From: Mike Bayer Date: Sat, 20 Nov 2010 20:35:43 +0000 (-0500) Subject: - merge FromObj cleanup, immutable .c attribute patch, [ticket:1917] X-Git-Tag: rel_0_7b1~244 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e3ca3a773ff8c36126fe584b69e380c67791e2bf;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - merge FromObj cleanup, immutable .c attribute patch, [ticket:1917] --- e3ca3a773ff8c36126fe584b69e380c67791e2bf diff --cc lib/sqlalchemy/schema.py index 50df8b9b6b,e7a5d6e464..ff953cef79 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@@ -229,8 -227,9 +229,8 @@@ class Table(SchemaItem, expression.Tabl self.constraints = set() self._columns = expression.ColumnCollection() self._set_primary_key(PrimaryKeyConstraint()) - self._foreign_keys = util.OrderedSet() + self.foreign_keys = util.OrderedSet() self._extra_dependencies = set() - self.ddl_listeners = util.defaultdict(list) self.kwargs = {} if self.schema is not None: self.fullname = "%s.%s" % (self.schema, self.name) diff --cc test/engine/test_metadata.py index 59aa4c3543,b3a9cef2e5..1feb4d9e29 --- a/test/engine/test_metadata.py +++ b/test/engine/test_metadata.py @@@ -77,75 -77,30 +77,72 @@@ class MetaDataTest(TestBase, ComparesTa t = Table('foo%d' % i, m, cx) eq_(msgs, ['attach foo0.foo', 'attach foo1.foo', 'attach foo2.foo']) + def test_schema_collection_add(self): + metadata = MetaData() - def test_dupe_tables(self): + t1 = Table('t1', metadata, Column('x', Integer), schema='foo') + t2 = Table('t2', metadata, Column('x', Integer), schema='bar') + t3 = Table('t3', metadata, Column('x', Integer)) + + eq_(metadata._schemas, set(['foo', 'bar'])) + eq_(len(metadata.tables), 3) + + def test_schema_collection_remove(self): + metadata = MetaData() + + t1 = Table('t1', metadata, Column('x', Integer), schema='foo') + t2 = Table('t2', metadata, Column('x', Integer), schema='bar') + t3 = Table('t3', metadata, Column('x', Integer), schema='bar') + + metadata.remove(t3) + eq_(metadata._schemas, set(['foo', 'bar'])) + eq_(len(metadata.tables), 2) + + metadata.remove(t1) + eq_(metadata._schemas, set(['bar'])) + eq_(len(metadata.tables), 1) + + def test_schema_collection_remove_all(self): + metadata = MetaData() + + t1 = Table('t1', metadata, Column('x', Integer), schema='foo') + t2 = Table('t2', metadata, Column('x', Integer), schema='bar') + + metadata.clear() + eq_(metadata._schemas, set()) + eq_(len(metadata.tables), 0) + + def test_metadata_tables_immutable(self): metadata = MetaData() + + t1 = Table('t1', metadata, Column('x', Integer)) + assert 't1' in metadata.tables + + assert_raises( - AttributeError, ++ TypeError, + lambda: metadata.tables.pop('t1') + ) - ++ ++ @testing.provide_metadata + def test_dupe_tables(self): - metadata = MetaData() t1 = Table('table1', metadata, Column('col1', Integer, primary_key=True), Column('col2', String(20))) -- metadata.bind = testing.db metadata.create_all() -- try: -- try: -- t1 = Table('table1', metadata, autoload=True) -- t2 = Table('table1', metadata, -- Column('col1', Integer, primary_key=True), -- Column('col2', String(20))) -- assert False -- except tsa.exc.InvalidRequestError, e: -- assert str(e) \ -- == "Table 'table1' is already defined for this "\ -- "MetaData instance. Specify 'useexisting=True' "\ -- "to redefine options and columns on an existing "\ -- "Table object." -- finally: -- metadata.drop_all() ++ t1 = Table('table1', metadata, autoload=True) ++ def go(): ++ t2 = Table('table1', metadata, ++ Column('col1', Integer, primary_key=True), ++ Column('col2', String(20))) ++ assert_raises_message( ++ tsa.exc.InvalidRequestError, ++ "Table 'table1' is already defined for this "\ ++ "MetaData instance. Specify 'useexisting=True' "\ ++ "to redefine options and columns on an existing "\ ++ "Table object.", ++ go ++ ) def test_fk_copy(self): c1 = Column('foo', Integer)