summaryrefslogtreecommitdiff
path: root/test/sql/test_metadata.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-01-30 20:29:48 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2011-01-30 20:29:48 -0500
commit12073e281eebdece0fe4e24c6704d57eafdc9247 (patch)
tree1c831d73551c5a2e490bae41af390bd44d6391b5 /test/sql/test_metadata.py
parent41d222b5f85d81c3cb7c33be284b9b5507463cb2 (diff)
downloadsqlalchemy-12073e281eebdece0fe4e24c6704d57eafdc9247.tar.gz
- SchemaItem, SchemaType now descend from common type
SchemaEventTarget, which supplies dispatch - the dispatch now provides before_parent_attach(), after_parent_attach(), events which generally bound the _set_parent() event. [ticket:2037] - the _on_table_attach mechanism now usually uses the event dispatch - fixed class-level event dispatch to propagate to all subclasses, not just immediate subclasses - fixed class-level event unpickling to handle more involved inheritance hierarchies, needed by the new schema event dispatch. - ForeignKeyConstraint doesn't re-call the column attach event on ForeignKey objects that are already associated with the correct Column - we still need that ImportError on mysqldb CLIENT FLAGS to support mock DBAPIs
Diffstat (limited to 'test/sql/test_metadata.py')
-rw-r--r--test/sql/test_metadata.py54
1 files changed, 51 insertions, 3 deletions
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py
index db087331a..38788330a 100644
--- a/test/sql/test_metadata.py
+++ b/test/sql/test_metadata.py
@@ -5,7 +5,8 @@ from test.lib.testing import emits_warning
import pickle
from sqlalchemy import Integer, String, UniqueConstraint, \
CheckConstraint, ForeignKey, MetaData, Sequence, \
- ForeignKeyConstraint, ColumnDefault, Index
+ ForeignKeyConstraint, ColumnDefault, Index, event,\
+ events
from test.lib.schema import Table, Column
from sqlalchemy import schema, exc
import sqlalchemy as tsa
@@ -68,13 +69,16 @@ class MetaDataTest(TestBase, ComparesTables):
def test_uninitialized_column_copy_events(self):
msgs = []
- def write(t, c):
+ def write(c, t):
msgs.append("attach %s.%s" % (t.name, c.name))
c1 = Column('foo', String())
- c1._on_table_attach(write)
m = MetaData()
for i in xrange(3):
cx = c1.copy()
+ # as of 0.7, these events no longer copy. its expected
+ # that listeners will be re-established from the
+ # natural construction of things.
+ cx._on_table_attach(write)
t = Table('foo%d' % i, m, cx)
eq_(msgs, ['attach foo0.foo', 'attach foo1.foo', 'attach foo2.foo'])
@@ -585,3 +589,47 @@ class ColumnOptionsTest(TestBase):
c.info['bar'] = 'zip'
assert c.info['bar'] == 'zip'
+
+class CatchAllEventsTest(TestBase):
+
+ def teardown(self):
+ events.SchemaEventTarget.dispatch._clear()
+
+ def test_all_events(self):
+ canary = []
+ def before_attach(obj, parent):
+ canary.append("%s->%s" % (obj.__class__.__name__, parent.__class__.__name__))
+
+ def after_attach(obj, parent):
+ canary.append("%s->%s" % (obj, parent))
+
+ event.listen(events.SchemaEventTarget, "before_parent_attach", before_attach)
+ event.listen(events.SchemaEventTarget, "after_parent_attach", after_attach)
+
+ m = MetaData()
+ t1 = Table('t1', m,
+ Column('id', Integer, Sequence('foo_id'), primary_key=True),
+ Column('bar', String, ForeignKey('t2.id'))
+ )
+ t2 = Table('t2', m,
+ Column('id', Integer, primary_key=True),
+ )
+
+ # TODO: test more conditions here, constraints, defaults, etc.
+ eq_(
+ canary,
+ [
+ 'Sequence->Column',
+ "Sequence('foo_id', start=None, increment=None, optional=False)->id",
+ 'ForeignKey->Column',
+ "ForeignKey('t2.id')->bar",
+ 'Table->MetaData',
+ 'Column->Table', 't1.id->t1',
+ 'Column->Table', 't1.bar->t1',
+ 'ForeignKeyConstraint->Table',
+ 'ForeignKeyConstraint()->t1',
+ 't1->MetaData(None)',
+ 'Table->MetaData', 'Column->Table',
+ 't2.id->t2', 't2->MetaData(None)']
+ )
+