summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/ext/orderinglist.py7
-rw-r--r--lib/sqlalchemy/orm/collections.py10
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/sqlalchemy/ext/orderinglist.py b/lib/sqlalchemy/ext/orderinglist.py
index 67fda44c4..61155731c 100644
--- a/lib/sqlalchemy/ext/orderinglist.py
+++ b/lib/sqlalchemy/ext/orderinglist.py
@@ -119,7 +119,7 @@ start numbering at 1 or some other integer, provide ``count_from=1``.
"""
-from ..orm.collections import collection
+from ..orm.collections import collection, collection_adapter
from .. import util
__all__ = ['ordering_list']
@@ -319,7 +319,10 @@ class OrderingList(list):
def remove(self, entity):
super(OrderingList, self).remove(entity)
- self._reorder()
+
+ adapter = collection_adapter(self)
+ if adapter and adapter._referenced_by_owner:
+ self._reorder()
def pop(self, index=-1):
entity = super(OrderingList, self).pop(index)
diff --git a/lib/sqlalchemy/orm/collections.py b/lib/sqlalchemy/orm/collections.py
index 1fc0873bd..c2754d58f 100644
--- a/lib/sqlalchemy/orm/collections.py
+++ b/lib/sqlalchemy/orm/collections.py
@@ -589,6 +589,16 @@ class CollectionAdapter(object):
"The entity collection being adapted."
return self._data()
+ @property
+ def _referenced_by_owner(self):
+ """return True if the owner state still refers to this collection.
+
+ This will return False within a bulk replace operation,
+ where this collection is the one being replaced.
+
+ """
+ return self.owner_state.dict[self._key] is self._data()
+
@util.memoized_property
def attr(self):
return self.owner_state.manager[self._key].impl