]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug whereby adaptation of old append_ddl_listener()
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 30 Jun 2011 14:27:52 +0000 (10:27 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 30 Jun 2011 14:27:52 +0000 (10:27 -0400)
    function was passing unexpected **kw through
    to the Table event.   Table gets no kws, the MetaData
    event in 0.6 would get "tables=somecollection",
    this behavior is preserved.  [ticket:2206]

CHANGES
lib/sqlalchemy/schema.py
test/engine/test_ddlevents.py

diff --git a/CHANGES b/CHANGES
index 74e1beba6372acb44f40df7fa802e37b5f111523..a4d4e8356b0a7ec6462e3242b2ae9df5757adad5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -42,6 +42,13 @@ CHANGES
     when the label has been "grouped" and 
     loses itself.  Affects [ticket:2188].
 
+- schema
+  - Fixed bug whereby adaptation of old append_ddl_listener()
+    function was passing unexpected **kw through 
+    to the Table event.   Table gets no kws, the MetaData
+    event in 0.6 would get "tables=somecollection",
+    this behavior is preserved.  [ticket:2206]
+
 - engine
   - Use urllib.parse_qsl() in Python 2.6 and above,
     no deprecation warning about cgi.parse_qsl()
index 7dd7b03d42d957060218461a7ec81ea31a18db07..9a49c785e7ceba0a31c8862e39004268e88d7f2b 100644 (file)
@@ -478,7 +478,7 @@ class Table(SchemaItem, expression.TableClause):
         """
 
         def adapt_listener(target, connection, **kw):
-            listener(event_name, target, connection, **kw)
+            listener(event_name, target, connection)
 
         event.listen(self, "" + event_name.replace('-', '_'), adapt_listener)
 
@@ -2383,7 +2383,8 @@ class MetaData(SchemaItem):
 
         """
         def adapt_listener(target, connection, **kw):
-            listener(event, target, connection, **kw)
+            tables = kw['tables']
+            listener(event, target, connection, tables=tables)
 
         event.listen(self, "" + event_name.replace('-', '_'), adapt_listener)
 
index 536325d8806644a7ae7786820215cb2db5cca409..c1616fcfbd8642b08a21d3c00171728af30eb005 100644 (file)
@@ -261,6 +261,63 @@ class DDLExecutionTest(fixtures.TestBase):
         assert 'xyzzy' in strings
         assert 'fnord' in strings
 
+    def test_deprecated_append_ddl_listener_table(self):
+        metadata, users, engine = self.metadata, self.users, self.engine
+        canary = []
+        users.append_ddl_listener('before-create', 
+                            lambda e, t, b:canary.append('mxyzptlk')
+                        )
+        users.append_ddl_listener('after-create', 
+                            lambda e, t, b:canary.append('klptzyxm')
+                        )
+        users.append_ddl_listener('before-drop', 
+                            lambda e, t, b:canary.append('xyzzy')
+                        )
+        users.append_ddl_listener('after-drop', 
+                            lambda e, t, b:canary.append('fnord')
+                        )
+
+        metadata.create_all()
+        assert 'mxyzptlk' in canary
+        assert 'klptzyxm' in canary
+        assert 'xyzzy' not in canary
+        assert 'fnord' not in canary
+        del engine.mock[:]
+        canary[:] = []
+        metadata.drop_all()
+        assert 'mxyzptlk' not in canary
+        assert 'klptzyxm' not in canary
+        assert 'xyzzy' in canary
+        assert 'fnord' in canary
+
+    def test_deprecated_append_ddl_listener_metadata(self):
+        metadata, users, engine = self.metadata, self.users, self.engine
+        canary = []
+        metadata.append_ddl_listener('before-create', 
+                            lambda e, t, b, tables=None:canary.append('mxyzptlk')
+                        )
+        metadata.append_ddl_listener('after-create', 
+                            lambda e, t, b, tables=None:canary.append('klptzyxm')
+                        )
+        metadata.append_ddl_listener('before-drop', 
+                            lambda e, t, b, tables=None:canary.append('xyzzy')
+                        )
+        metadata.append_ddl_listener('after-drop', 
+                            lambda e, t, b, tables=None:canary.append('fnord')
+                        )
+
+        metadata.create_all()
+        assert 'mxyzptlk' in canary
+        assert 'klptzyxm' in canary
+        assert 'xyzzy' not in canary
+        assert 'fnord' not in canary
+        del engine.mock[:]
+        canary[:] = []
+        metadata.drop_all()
+        assert 'mxyzptlk' not in canary
+        assert 'klptzyxm' not in canary
+        assert 'xyzzy' in canary
+        assert 'fnord' in canary
 
     def test_metadata(self):
         metadata, engine = self.metadata, self.engine