From fc4f7de0051334987326de1e74cd86d2a08e2e07 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 30 Jun 2011 10:27:52 -0400 Subject: [PATCH] - 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] --- CHANGES | 7 +++++ lib/sqlalchemy/schema.py | 5 +-- test/engine/test_ddlevents.py | 57 +++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 74e1beba63..a4d4e8356b 100644 --- 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() diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 7dd7b03d42..9a49c785e7 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -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) diff --git a/test/engine/test_ddlevents.py b/test/engine/test_ddlevents.py index 536325d880..c1616fcfbd 100644 --- a/test/engine/test_ddlevents.py +++ b/test/engine/test_ddlevents.py @@ -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 -- 2.39.5