]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
moved _impl_dict to an external weakref so that TypeEngine objects can be pickled
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 6 Dec 2006 21:37:25 +0000 (21:37 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 6 Dec 2006 21:37:25 +0000 (21:37 +0000)
lib/sqlalchemy/types.py

index 08f2c9843694f7651b72673411460eac2463ecdb..eddb5d306f4a528aadaf9e63ba92092417e4d085 100644 (file)
@@ -12,19 +12,20 @@ __all__ = [ 'TypeEngine', 'TypeDecorator', 'NullTypeEngine',
             ]
 
 from sqlalchemy import util, exceptions
-import inspect
+import inspect, weakref
 try:
     import cPickle as pickle
 except:
     import pickle
 
+_impl_cache = weakref.WeakKeyDictionary()
+
 class AbstractType(object):
     def _get_impl_dict(self):
         try:
-            return self._impl_dict
-        except AttributeError:
-            self._impl_dict = {}
-            return self._impl_dict
+            return _impl_cache[self]
+        except KeyError:
+            return _impl_cache.setdefault(self, {})
     impl_dict = property(_get_impl_dict)
 
     def copy_value(self, value):