From: Mike Bayer Date: Fri, 14 Aug 2009 17:02:56 +0000 (+0000) Subject: dont see the need to re-call post_configure inside a reentrant loop. since we're X-Git-Tag: rel_0_6beta1~330 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da9c1405d6f62a953e6274db75cfdf30ae6eb379;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git dont see the need to re-call post_configure inside a reentrant loop. since we're in 0.6 let's just simplify. --- diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index dcf33d07eb..f4cc72cefc 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -636,10 +636,6 @@ class Mapper(object): try: global _already_compiling if _already_compiling: - # re-entrance to compile() occurs rarely, when a class-mapped construct is - # used within a ForeignKey, something that is possible - # when using the declarative layer - self._post_configure_properties() return _already_compiling = True try: diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py index 597b0bd566..01ee232318 100644 --- a/test/orm/test_mapper.py +++ b/test/orm/test_mapper.py @@ -893,11 +893,6 @@ class MapperTest(_fixtures.FixtureTest): @testing.resolve_artifact_names def test_reentrant_compile(self): - # this trips the _already_compiling - # flag in mapper.compile(). but if the m2.compile is - # changed to m1.compile, you still get a stack overflow. - # not sure why the previous use case did it that way (i.e. - # it was declarative compiling a mapper within ForeignKey()). class MyFakeProperty(sa.orm.properties.ColumnProperty): def post_instrument_class(self, mapper): super(MyFakeProperty, self).post_instrument_class(mapper) @@ -908,6 +903,18 @@ class MapperTest(_fixtures.FixtureTest): }) m2 = mapper(Address, addresses) compile_mappers() + + sa.orm.clear_mappers() + class MyFakeProperty(sa.orm.properties.ColumnProperty): + def post_instrument_class(self, mapper): + super(MyFakeProperty, self).post_instrument_class(mapper) + m1.compile() + + m1 = mapper(User, users, properties={ + 'name':MyFakeProperty(users.c.name) + }) + m2 = mapper(Address, addresses) + compile_mappers() @testing.resolve_artifact_names def test_reconstructor(self):