From: Mike Bayer Date: Tue, 5 Apr 2011 18:26:28 +0000 (-0400) Subject: - The "pool.manage" feature doesn't use pickle X-Git-Tag: rel_0_7b4~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b80e9b805fab70fb49868d90d7add233b640fd10;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - The "pool.manage" feature doesn't use pickle anymore to hash the arguments for each pool. --- diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index 6d7542fb58..2edafbf383 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -20,7 +20,7 @@ import weakref, time, traceback from sqlalchemy import exc, log, event, events, interfaces, util from sqlalchemy.util import queue as sqla_queue -from sqlalchemy.util import threading, pickle, memoized_property, \ +from sqlalchemy.util import threading, memoized_property, \ chop_traceback proxies = {} @@ -952,4 +952,7 @@ class _DBProxy(object): pass def _serialize(self, *args, **kw): - return pickle.dumps([args, kw]) + return tuple( + list(args) + + [(k, kw[k]) for k in sorted(kw)] + ) diff --git a/test/engine/test_pool.py b/test/engine/test_pool.py index f5660b9d6b..67252865c6 100644 --- a/test/engine/test_pool.py +++ b/test/engine/test_pool.py @@ -51,26 +51,27 @@ class PoolTestBase(fixtures.TestBase): return dbapi, pool.QueuePool(creator=lambda: dbapi.connect('foo.db'), **kw) class PoolTest(PoolTestBase): - def testmanager(self): + def test_manager(self): manager = pool.manage(MockDBAPI(), use_threadlocal=True) - connection = manager.connect('foo.db') - connection2 = manager.connect('foo.db') - connection3 = manager.connect('bar.db') + c1 = manager.connect('foo.db') + c2 = manager.connect('foo.db') + c3 = manager.connect('bar.db') + c4 = manager.connect("foo.db", bar="bat") + c5 = manager.connect("foo.db", bar="hoho") + c6 = manager.connect("foo.db", bar="bat") - self.assert_(connection.cursor() is not None) - self.assert_(connection is connection2) - self.assert_(connection2 is not connection3) + assert c1.cursor() is not None + assert c1 is c2 + assert c1 is not c3 + assert c4 is c6 + assert c4 is not c5 - def testbadargs(self): + def test_bad_args(self): manager = pool.manage(MockDBAPI()) + connection = manager.connect(None) - try: - connection = manager.connect(None) - except: - pass - - def testnonthreadlocalmanager(self): + def test_non_thread_local_manager(self): manager = pool.manage(MockDBAPI(), use_threadlocal = False) connection = manager.connect('foo.db')