From: Mike Bayer Date: Sun, 23 Jun 2013 21:53:49 +0000 (-0400) Subject: - add a test for pullreq 8 X-Git-Tag: rel_0_9_0b1~234 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=786c5fe31672a0aebd49ba97f7a79ccdddad6ba1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - add a test for pullreq 8 - simplify --- diff --git a/lib/sqlalchemy/ext/mutable.py b/lib/sqlalchemy/ext/mutable.py index 48c8d13ccc..d3133b1f53 100644 --- a/lib/sqlalchemy/ext/mutable.py +++ b/lib/sqlalchemy/ext/mutable.py @@ -588,11 +588,11 @@ class MutableComposite(MutableBase): setattr(parent, attr_name, value) def _setup_composite_listener(): - import types def _listen_for_type(mapper, class_): for prop in mapper.iterate_properties: - if (hasattr(prop, 'composite_class') and (type(prop.composite_class) in (types.ClassType, types.TypeType)) and - issubclass(prop.composite_class, MutableComposite)): + if (hasattr(prop, 'composite_class') and + isinstance(prop.composite_class, type) and + issubclass(prop.composite_class, MutableComposite)): prop.composite_class._listen_on_attribute( getattr(class_, prop.key), False, class_) if not Mapper.dispatch.mapper_configured._contains(Mapper, _listen_for_type): diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py index bda9e5382e..25c182f1da 100644 --- a/test/ext/test_mutable.py +++ b/test/ext/test_mutable.py @@ -421,6 +421,32 @@ class MutableCompositesTest(_CompositeTestBase, fixtures.MappedTest): eq_(f1.data.x, 5) +class MutableCompositeCallableTest(_CompositeTestBase, fixtures.MappedTest): + + @classmethod + def setup_mappers(cls): + foo = cls.tables.foo + + Point = cls._type_fixture() + + # in this case, this is not actually a MutableComposite. + # so we don't expect it to track changes + mapper(Foo, foo, properties={ + 'data': composite(lambda x, y: Point(x, y), foo.c.x, foo.c.y) + }) + + def test_basic(self): + sess = Session() + f1 = Foo(data=Point(3, 4)) + sess.add(f1) + sess.flush() + f1.data.x = 5 + sess.commit() + + # we didn't get the change. + eq_(f1.data.x, 3) + + class MutableCompositeCustomCoerceTest(_CompositeTestBase, fixtures.MappedTest): @classmethod def _type_fixture(cls):