summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-10-27 00:24:43 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-10-27 00:24:43 +0000
commit4127d2219660362f8664165e5e381b003a22dad2 (patch)
tree82f9e51eb4cdfff55fd7270bd2ca42571ba52788
parentd6568b482966f99e2df0a96d893f7b8e6f639706 (diff)
downloadsqlalchemy-4127d2219660362f8664165e5e381b003a22dad2.tar.gz
- fixed clear_mappers() behavior to better clean up after itself
-rw-r--r--CHANGES2
-rw-r--r--lib/sqlalchemy/orm/__init__.py2
-rw-r--r--lib/sqlalchemy/util.py4
-rw-r--r--test/base/utils.py22
4 files changed, 27 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index a40360214..cbc67819f 100644
--- 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]
diff --git a/lib/sqlalchemy/orm/__init__.py b/lib/sqlalchemy/orm/__init__.py
index 222bd75fb..12cc1316e 100644
--- a/lib/sqlalchemy/orm/__init__.py
+++ b/lib/sqlalchemy/orm/__init__.py
@@ -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()
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index 6fd3a81ef..ad3b30e8d 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -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)
diff --git a/test/base/utils.py b/test/base/utils.py
index 8df3a2b97..28258e9c3 100644
--- a/test/base/utils.py
+++ b/test/base/utils.py
@@ -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__":