diff options
-rw-r--r-- | lib/sqlalchemy/pool.py | 8 | ||||
-rw-r--r-- | test/engine/test_pool.py | 67 |
2 files changed, 39 insertions, 36 deletions
diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index 0dd3438b1..a67676143 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -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" diff --git a/test/engine/test_pool.py b/test/engine/test_pool.py index 1aeab2bda..a7fe4dade 100644 --- a/test/engine/test_pool.py +++ b/test/engine/test_pool.py @@ -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""" |