diff options
author | Jason Kirtland <jek@discorporate.us> | 2008-04-29 18:22:23 +0000 |
---|---|---|
committer | Jason Kirtland <jek@discorporate.us> | 2008-04-29 18:22:23 +0000 |
commit | 629d6dc56840e66d7c40e1df8803bb4ca043cd73 (patch) | |
tree | 26a6d2270ad9d71b7aac3b24a70d04accd9d1610 /lib/sqlalchemy/ext/associationproxy.py | |
parent | ee27bfdbb7477c137239798d68443a267163fd35 (diff) | |
download | sqlalchemy-629d6dc56840e66d7c40e1df8803bb4ca043cd73.tar.gz |
- Refresh the cached proxy if the cache was built for a different instance.
Diffstat (limited to 'lib/sqlalchemy/ext/associationproxy.py')
-rw-r--r-- | lib/sqlalchemy/ext/associationproxy.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index bbfb1bcda..45c91eab2 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -155,11 +155,16 @@ class AssociationProxy(object): return self._scalar_get(getattr(obj, self.target_collection)) else: try: - return getattr(obj, self.key) + # If the owning instance is reborn (orm session resurrect, + # etc.), refresh the proxy cache. + creator_id, proxy = getattr(obj, self.key) + if id(obj) == creator_id: + return proxy except AttributeError: - proxy = self._new(self._lazy_collection(weakref.ref(obj))) - setattr(obj, self.key, proxy) - return proxy + pass + proxy = self._new(self._lazy_collection(weakref.ref(obj))) + setattr(obj, self.key, (id(obj), proxy)) + return proxy def __set__(self, obj, values): if self.scalar is None: |