diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-13 02:09:38 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-13 02:09:38 -0400 |
commit | f5d2bb60a886ba0aa35a04eb6c096b7982643ca2 (patch) | |
tree | cf4cbf51686d0006baa26fc7a8add6c72517790b /lib/sqlalchemy/orm/attributes.py | |
parent | 18f6a06a51943198a9a375c781c2dbc1511d24a5 (diff) | |
download | sqlalchemy-f5d2bb60a886ba0aa35a04eb6c096b7982643ca2.tar.gz |
- Fixed recursion bug which could occur when moving
an object from one reference to another, with
backrefs involved, where the initiating parent
was a subclass (with its own mapper) of the
previous parent.
Diffstat (limited to 'lib/sqlalchemy/orm/attributes.py')
-rw-r--r-- | lib/sqlalchemy/orm/attributes.py | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 33069332d..b56de5f05 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -455,7 +455,7 @@ class ScalarAttributeImpl(AttributeImpl): self, state, dict_.get(self.key, NO_VALUE)) def set(self, state, dict_, value, initiator, passive=PASSIVE_OFF): - if initiator is self: + if initiator and initiator.parent_token is self.parent_token: return if self.active_history: @@ -534,7 +534,7 @@ class MutableScalarAttributeImpl(ScalarAttributeImpl): state.mutable_dict.pop(self.key) def set(self, state, dict_, value, initiator, passive=PASSIVE_OFF): - if initiator is self: + if initiator and initiator.parent_token is self.parent_token: return if self.extensions: @@ -596,7 +596,7 @@ class ScalarObjectAttributeImpl(ScalarAttributeImpl): setter operation. """ - if initiator is self: + if initiator and initiator.parent_token is self.parent_token: return if self.active_history: @@ -622,7 +622,7 @@ class ScalarObjectAttributeImpl(ScalarAttributeImpl): previous is not None and previous is not PASSIVE_NO_RESULT): self.sethasparent(instance_state(previous), False) - + for ext in self.extensions: value = ext.set(state, value, previous, initiator or self) @@ -726,7 +726,7 @@ class CollectionAttributeImpl(AttributeImpl): self.key, state, self.collection_factory) def append(self, state, dict_, value, initiator, passive=PASSIVE_OFF): - if initiator is self: + if initiator and initiator.parent_token is self.parent_token: return collection = self.get_collection(state, dict_, passive=passive) @@ -739,7 +739,7 @@ class CollectionAttributeImpl(AttributeImpl): collection.append_with_event(value, initiator) def remove(self, state, dict_, value, initiator, passive=PASSIVE_OFF): - if initiator is self: + if initiator and initiator.parent_token is self.parent_token: return collection = self.get_collection(state, state.dict, passive=passive) @@ -759,7 +759,7 @@ class CollectionAttributeImpl(AttributeImpl): setter operation. """ - if initiator is self: + if initiator and initiator.parent_token is self.parent_token: return self._set_iterable( |