summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ext/associationproxy.py
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2008-04-29 18:22:23 +0000
committerJason Kirtland <jek@discorporate.us>2008-04-29 18:22:23 +0000
commit629d6dc56840e66d7c40e1df8803bb4ca043cd73 (patch)
tree26a6d2270ad9d71b7aac3b24a70d04accd9d1610 /lib/sqlalchemy/ext/associationproxy.py
parentee27bfdbb7477c137239798d68443a267163fd35 (diff)
downloadsqlalchemy-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.py13
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: