From 0d2ae16aee7d99aeb89d3aa087df6d693900b093 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 1 Nov 2009 20:39:43 +0000 Subject: [PATCH] - the `__contains__()` method of `MetaData` now accepts strings or `Table` objects as arguments. If given a `Table`, the argument is converted to `table.key` first, i.e. "[schemaname.]" [ticket:1541] --- CHANGES | 5 +++++ lib/sqlalchemy/schema.py | 6 ++++-- test/engine/test_metadata.py | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 2c4c92be81..403b7fa59f 100644 --- a/CHANGES +++ b/CHANGES @@ -268,6 +268,11 @@ CHANGES result.inserted_primary_key - schema + - the `__contains__()` method of `MetaData` now accepts + strings or `Table` objects as arguments. If given + a `Table`, the argument is converted to `table.key` first, + i.e. "[schemaname.]" [ticket:1541] + - deprecated MetaData.connect() and ThreadLocalMetaData.connect() have been removed - send the "bind" attribute to bind a metadata. diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 44f53f2356..00a21a30af 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -1662,8 +1662,10 @@ class MetaData(SchemaItem): def __repr__(self): return 'MetaData(%r)' % self.bind - def __contains__(self, key): - return key in self.tables + def __contains__(self, table_or_key): + if not isinstance(table_or_key, basestring): + table_or_key = table_or_key.key + return table_or_key in self.tables def __getstate__(self): return {'tables': self.tables} diff --git a/test/engine/test_metadata.py b/test/engine/test_metadata.py index 2612f10293..e8e7b472fa 100644 --- a/test/engine/test_metadata.py +++ b/test/engine/test_metadata.py @@ -19,7 +19,22 @@ class MetaDataTest(TestBase, ComparesTables): finally: metadata.drop_all() - + def test_metadata_contains(self): + metadata = MetaData() + t1 = Table('t1', metadata, Column('x', Integer)) + t2 = Table('t2', metadata, Column('x', Integer), schema='foo') + t3 = Table('t2', MetaData(), Column('x', Integer)) + t4 = Table('t1', MetaData(), Column('x', Integer), schema='foo') + + assert "t1" in metadata + assert "foo.t2" in metadata + assert "t2" not in metadata + assert "foo.t1" not in metadata + assert t1 in metadata + assert t2 in metadata + assert t3 not in metadata + assert t4 not in metadata + def test_dupe_tables(self): metadata = MetaData() t1 = Table('table1', metadata, Column('col1', Integer, primary_key=True), -- 2.47.2