diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-08-02 17:51:33 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-08-02 17:51:33 +0000 |
commit | 68c8b13ed6b8f88d958f72f6d0721b25817c6636 (patch) | |
tree | 5afd662cfc661f503509a087ae040c35eccc244b /test | |
parent | e58b66838d95e9c5e57f3567940f619c730a7d69 (diff) | |
download | sqlalchemy-68c8b13ed6b8f88d958f72f6d0721b25817c6636.tar.gz |
- Simplified the sweep of instrumentation in strategies._register_attribute
- Improved support for MapperProperty objects overriding
that of an inherited mapper for non-concrete
inheritance setups - attribute extensions won't randomly
collide with each other. [ticket:1488]
- Added AttributeExtension to sqlalchemy.orm.__all__
Diffstat (limited to 'test')
-rw-r--r-- | test/orm/test_mapper.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py index edde2a756..13913578a 100644 --- a/test/orm/test_mapper.py +++ b/test/orm/test_mapper.py @@ -2219,6 +2219,64 @@ class NoLoadTest(_fixtures.FixtureTest): ) +class AttributeExtensionTest(_base.MappedTest): + @classmethod + def define_tables(cls, metadata): + Table('t1', + metadata, + Column('id', Integer, primary_key=True), + Column('type', String(40)), + Column('data', String(50)) + + ) + + @testing.resolve_artifact_names + def test_cascading_extensions(self): + ext_msg = [] + + class Ex1(sa.orm.AttributeExtension): + def set(self, state, value, oldvalue, initiator): + ext_msg.append("Ex1 %r" % value) + return "ex1" + value + + class Ex2(sa.orm.AttributeExtension): + def set(self, state, value, oldvalue, initiator): + ext_msg.append("Ex2 %r" % value) + return "ex2" + value + + class A(_base.BasicEntity): + pass + class B(A): + pass + class C(B): + pass + + mapper(A, t1, polymorphic_on=t1.c.type, polymorphic_identity='a', properties={ + 'data':column_property(t1.c.data, extension=Ex1()) + }) + mapper(B, polymorphic_identity='b', inherits=A) + mc = mapper(C, polymorphic_identity='c', inherits=B, properties={ + 'data':column_property(t1.c.data, extension=Ex2()) + }) + + a1 = A(data='a1') + b1 = B(data='b1') + c1 = C(data='c1') + + eq_(a1.data, 'ex1a1') + eq_(b1.data, 'ex1b1') + eq_(c1.data, 'ex2c1') + + a1.data = 'a2' + b1.data='b2' + c1.data = 'c2' + eq_(a1.data, 'ex1a2') + eq_(b1.data, 'ex1b2') + eq_(c1.data, 'ex2c2') + + eq_(ext_msg, ["Ex1 'a1'", "Ex1 'b1'", "Ex2 'c1'", "Ex1 'a2'", "Ex1 'b2'", "Ex2 'c2'"]) + + class MapperExtensionTest(_fixtures.FixtureTest): run_inserts = None |