]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed clear_mappers() behavior to better clean up after itself
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 27 Oct 2007 00:24:43 +0000 (00:24 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 27 Oct 2007 00:24:43 +0000 (00:24 +0000)
CHANGES
lib/sqlalchemy/orm/__init__.py
lib/sqlalchemy/util.py
test/base/utils.py

diff --git a/CHANGES b/CHANGES
index a403602145cc6ba1002c55660bc0cf133f2125ed..cbc67819f9626658a140acc023c7d3a1c3058a80 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -24,6 +24,8 @@ CHANGES
 
 - improved behavior of add_property() etc., fixed [ticket:831] involving
   synonym/deferred
+
+- fixed clear_mappers() behavior to better clean up after itself
   
 - Made access dao dection more reliable [ticket:828]
   
index 222bd75fbf864d405e8b17da7336225ed3055cd7..12cc1316eeff8f585d672e5075c28d005ef954d5 100644 (file)
@@ -546,7 +546,7 @@ def clear_mappers():
         for mapper in mapper_registry.values():
             mapper.dispose()
         mapper_registry.clear()
-        mapperlib.ClassKey.dispose()
+        mapperlib.ClassKey.dispose(mapperlib.ClassKey)
     finally:
         mapperlib._COMPILE_MUTEX.release()
         
index 6fd3a81ef26cf976fd81d5c7efaed616cfe20369..ad3b30e8dd2991500adb0e48b4c51ed334799b19 100644 (file)
@@ -123,10 +123,10 @@ class ArgSingleton(type):
     instances = {}
 
     def dispose(cls):
-        for key in ArgSingleton.instances:
+        for key in list(ArgSingleton.instances):
             if key[0] is cls:
                 del ArgSingleton.instances[key]
-    dispose = classmethod(dispose)
+    dispose = staticmethod(dispose)
 
     def __call__(self, *args):
         hashkey = (self, args)
index 8df3a2b97dd6919bf64e8695668d0bd5b669dfa4..28258e9c3dd455cd9f121d68e6f4516e1e8884c9 100644 (file)
@@ -1,4 +1,5 @@
 import testbase
+import unittest
 from sqlalchemy import util, sql, exceptions
 from testlib import *
 
@@ -61,6 +62,27 @@ class ColumnCollectionTest(PersistTest):
         cc3.add(c3)
         assert (cc1==cc2).compare(c1 == c2)
         assert not (cc1==cc3).compare(c2 == c3)
+
+class ArgSingletonTest(unittest.TestCase):
+    def test_cleanout(self):
+        util.ArgSingleton.instances.clear()
+        
+        class MyClass(object):
+            __metaclass__ = util.ArgSingleton
+            def __init__(self, x, y):
+                self.x = x
+                self.y = y
+        
+        m1 = MyClass(3, 4)
+        m2 = MyClass(1, 5)
+        m3 = MyClass(3, 4)
+        assert m1 is m3
+        assert m2 is not m3
+        assert len(util.ArgSingleton.instances) == 2
+        
+        m1 = m2 = m3 = None
+        MyClass.dispose(MyClass)
+        assert len(util.ArgSingleton.instances) == 0
         
         
 if __name__ == "__main__":