]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- The "pool.manage" feature doesn't use pickle
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Apr 2011 18:26:28 +0000 (14:26 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Apr 2011 18:26:28 +0000 (14:26 -0400)
anymore to hash the arguments for each pool.

lib/sqlalchemy/pool.py
test/engine/test_pool.py

index 6d7542fb587e9f2359943a1eb9e10680c9b4cd2a..2edafbf383337a88369ec2f559e515c63f41939d 100644 (file)
@@ -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)]
+        )
index f5660b9d6bb05543a81372c5849cdfb83fe935c8..67252865c69f96ca4297d35a4e1dae2e0ed629dd 100644 (file)
@@ -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')