diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-05-13 15:36:22 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-05-13 15:36:22 -0400 |
| commit | e352e255a749b6e75e18bd41bf6646eeea345442 (patch) | |
| tree | bb96b73fdfef54a85e865268a49e4bdb760a0690 /lib/sqlalchemy | |
| parent | 0a8f2207f0874c9639a2968e18bce88e6cb55c69 (diff) | |
| download | sqlalchemy-e352e255a749b6e75e18bd41bf6646eeea345442.tar.gz | |
- fixed __setstate__ method of CollectionAdapter to not
fail during deserialize where parent InstanceState not
yet unserialized. [ticket:1802]
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/collections.py | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/sqlalchemy/orm/collections.py b/lib/sqlalchemy/orm/collections.py index 58b383a29..0ea17cd8b 100644 --- a/lib/sqlalchemy/orm/collections.py +++ b/lib/sqlalchemy/orm/collections.py @@ -471,15 +471,20 @@ class CollectionAdapter(object): """ def __init__(self, attr, owner_state, data): - self.attr = attr - # TODO: figure out what this being a weakref buys us + self._key = attr.key self._data = weakref.ref(data) self.owner_state = owner_state self.link_to_self(data) - - data = property(lambda s: s._data(), - doc="The entity collection being adapted.") - + + @property + def data(self): + "The entity collection being adapted." + return self._data() + + @util.memoized_property + def attr(self): + return self.owner_state.manager[self._key].impl + def link_to_self(self, data): """Link a collection to this adapter, and fire a link event.""" setattr(data, '_sa_adapter', self) @@ -619,12 +624,12 @@ class CollectionAdapter(object): initiator=initiator) def __getstate__(self): - return {'key': self.attr.key, + return {'key': self._key, 'owner_state': self.owner_state, 'data': self.data} def __setstate__(self, d): - self.attr = getattr(d['owner_state'].obj().__class__, d['key']).impl + self._key = d['key'] self.owner_state = d['owner_state'] self._data = weakref.ref(d['data']) |
