]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fix StaticPool [ticket:1615]
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 12 Nov 2009 21:46:14 +0000 (21:46 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 12 Nov 2009 21:46:14 +0000 (21:46 +0000)
lib/sqlalchemy/pool.py
test/engine/test_pool.py

index 0dd3438b106a9f54d19440f1fea6b8ccd47d765e..a67676143b1d930c05b336762c649005d3988b53 100644 (file)
@@ -20,7 +20,7 @@ import weakref, time, threading
 
 from sqlalchemy import exc, log
 from sqlalchemy import queue as sqla_queue
-from sqlalchemy.util import threading, pickle, as_interface
+from sqlalchemy.util import threading, pickle, as_interface, memoized_property
 
 proxies = {}
 
@@ -764,8 +764,10 @@ class StaticPool(Pool):
         """
         Pool.__init__(self, creator, **params)
         self._conn = creator()
-        self.connection = _ConnectionRecord(self)
-        self.connection = None
+    
+    @memoized_property
+    def connection(self):
+        return _ConnectionRecord(self)
         
     def status(self):
         return "StaticPool"
index 1aeab2bda68a1c4219b58be04c23f5d33c2e62ce..a7fe4dadea7f039c34e3d70a89917a2ca88f268e 100644 (file)
@@ -338,11 +338,10 @@ class PoolTest(PoolTestBase):
         snoop.assert_total(1, 1, 2, 1)
         c.close()
         snoop.assert_total(1, 1, 2, 2)
-        
+    
     def test_listeners_callables(self):
         dbapi = MockDBAPI()
 
-        counts = [0, 0, 0]
         def connect(dbapi_con, con_record):
             counts[0] += 1
         def checkout(dbapi_con, con_record, con_proxy):
@@ -355,46 +354,48 @@ class PoolTest(PoolTestBase):
         i_checkout = dict(checkout=checkout)
         i_checkin = dict(checkin=checkin)
 
-        def _pool(**kw):
-            return pool.QueuePool(creator=lambda: dbapi.connect('foo.db'),
-                                  use_threadlocal=False, **kw)
+        for cls in (pool.QueuePool, pool.StaticPool):
+            counts = [0, 0, 0]
+            def _pool(**kw):
+                return cls(creator=lambda: dbapi.connect('foo.db'),
+                                      use_threadlocal=False, **kw)
 
-        def assert_listeners(p, total, conn, cout, cin):
-            for instance in (p, p.recreate()):
-                self.assert_(len(instance.listeners) == total)
-                self.assert_(len(instance._on_connect) == conn)
-                self.assert_(len(instance._on_checkout) == cout)
-                self.assert_(len(instance._on_checkin) == cin)
+            def assert_listeners(p, total, conn, cout, cin):
+                for instance in (p, p.recreate()):
+                    self.assert_(len(instance.listeners) == total)
+                    self.assert_(len(instance._on_connect) == conn)
+                    self.assert_(len(instance._on_checkout) == cout)
+                    self.assert_(len(instance._on_checkin) == cin)
 
-        p = _pool()
-        assert_listeners(p, 0, 0, 0, 0)
+            p = _pool()
+            assert_listeners(p, 0, 0, 0, 0)
 
-        p.add_listener(i_all)
-        assert_listeners(p, 1, 1, 1, 1)
+            p.add_listener(i_all)
+            assert_listeners(p, 1, 1, 1, 1)
 
-        p.add_listener(i_connect)
-        assert_listeners(p, 2, 2, 1, 1)
+            p.add_listener(i_connect)
+            assert_listeners(p, 2, 2, 1, 1)
 
-        p.add_listener(i_checkout)
-        assert_listeners(p, 3, 2, 2, 1)
+            p.add_listener(i_checkout)
+            assert_listeners(p, 3, 2, 2, 1)
 
-        p.add_listener(i_checkin)
-        assert_listeners(p, 4, 2, 2, 2)
-        del p
+            p.add_listener(i_checkin)
+            assert_listeners(p, 4, 2, 2, 2)
+            del p
 
-        p = _pool(listeners=[i_all])
-        assert_listeners(p, 1, 1, 1, 1)
+            p = _pool(listeners=[i_all])
+            assert_listeners(p, 1, 1, 1, 1)
 
-        c = p.connect()
-        assert counts == [1, 1, 0]
-        c.close()
-        assert counts == [1, 1, 1]
+            c = p.connect()
+            assert counts == [1, 1, 0]
+            c.close()
+            assert counts == [1, 1, 1]
 
-        c = p.connect()
-        assert counts == [1, 2, 1]
-        p.add_listener(i_checkin)
-        c.close()
-        assert counts == [1, 2, 3]
+            c = p.connect()
+            assert counts == [1, 2, 1]
+            p.add_listener(i_checkin)
+            c.close()
+            assert counts == [1, 2, 3]
 
     def test_listener_after_oninit(self):
         """Test that listeners are called after OnInit is removed"""