]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- the `__contains__()` method of `MetaData` now accepts
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 1 Nov 2009 20:39:43 +0000 (20:39 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 1 Nov 2009 20:39:43 +0000 (20:39 +0000)
strings or `Table` objects as arguments.  If given
a `Table`, the argument is converted to `table.key` first,
i.e. "[schemaname.]<tablename>" [ticket:1541]

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

diff --git a/CHANGES b/CHANGES
index 2c4c92be81bd574be14a1d94365baec95a08d16f..403b7fa59f3969cc9532b099cc8ede66647159d4 100644 (file)
--- 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.]<tablename>" [ticket:1541]
+      
     - deprecated MetaData.connect() and
       ThreadLocalMetaData.connect() have been removed - send
       the "bind" attribute to bind a metadata.
index 44f53f2356c5146f3b3684400dff99cd1306a2ac..00a21a30af67f4520c43dda1c7ceb9e3a4e59a46 100644 (file)
@@ -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}
index 2612f102932b0e8eafe0c84b62801a3228e48719..e8e7b472faf42970fc5282b24baebe3b707b9d8a 100644 (file)
@@ -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),