From: Mike Bayer Date: Wed, 16 Mar 2011 22:15:27 +0000 (-0400) Subject: - Fixed AssertionPool regression bug. A replacement of finalize X-Git-Tag: rel_0_7b3~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=852a1aef0763b5cd5ffb196ec1d18dcfee6bbfd9;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed AssertionPool regression bug. A replacement of finalize logic did the wrong thing, but then also the logic it replaced also doesn't seem like its needed. If it is, would rather have a test case first so its out for now, added tests for assertionpool. [ticket:2097] --- diff --git a/CHANGES b/CHANGES index 9eedcae30b..660c4a860d 100644 --- a/CHANGES +++ b/CHANGES @@ -78,6 +78,9 @@ CHANGES (, ), which are applied to the Table before the reflection process begins. +- engine + - Fixed AssertionPool regression bug. [ticket:2097] + - dialect - Changed exception raised to ArgumentError when an invalid dialect is specified. [ticket:2060] diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index 327e4aa1f5..a45c2e80b0 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -60,8 +60,6 @@ def clear_managers(): class Pool(log.Identified): """Abstract base class for connection pools.""" - _no_finalize = False - def __init__(self, creator, recycle=-1, echo=None, use_threadlocal=False, @@ -324,9 +322,6 @@ class _ConnectionRecord(object): def _finalize_fairy(connection, connection_record, pool, ref, echo): _refs.discard(connection_record) - if pool._no_finalize: - return - if ref is not None and \ connection_record.fairy is not ref: return @@ -826,8 +821,6 @@ class AssertionPool(Pool): than desired. """ - _no_finalize = True - def __init__(self, *args, **kw): self._conn = None self._checked_out = False diff --git a/test/engine/test_pool.py b/test/engine/test_pool.py index 4e818894fa..2df8b9ca29 100644 --- a/test/engine/test_pool.py +++ b/test/engine/test_pool.py @@ -3,7 +3,7 @@ from sqlalchemy import pool, interfaces, create_engine, select, event import sqlalchemy as tsa from test.lib import TestBase, testing from test.lib.util import gc_collect, lazy_gc -from test.lib.testing import eq_ +from test.lib.testing import eq_, assert_raises mcid = 1 class MockDBAPI(object): @@ -940,6 +940,24 @@ class SingletonThreadPoolTest(PoolTestBase): th.join() assert len(p._all_conns) == 3 +class AssertionPoolTest(PoolTestBase): + def test_connect_error(self): + dbapi = MockDBAPI() + p = pool.AssertionPool(creator = lambda: dbapi.connect('foo.db')) + c1 = p.connect() + assert_raises(AssertionError, p.connect) + + def test_connect_multiple(self): + dbapi = MockDBAPI() + p = pool.AssertionPool(creator = lambda: dbapi.connect('foo.db')) + c1 = p.connect() + c1.close() + c2 = p.connect() + c2.close() + + c3 = p.connect() + assert_raises(AssertionError, p.connect) + class NullPoolTest(PoolTestBase): def test_reconnect(self): dbapi = MockDBAPI()