From: Mike Bayer Date: Wed, 12 Jan 2011 23:53:55 +0000 (-0500) Subject: QueryableAttribute can stringify itself without triggering a mapper compile. prevent... X-Git-Tag: rel_0_7b1~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56e59be4e7476d7d5a10760c84b8d5ee471a6d94;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git QueryableAttribute can stringify itself without triggering a mapper compile. prevents confusion when stringing the attr during an exception for something else like a bad event listen --- diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py index 6c74c101da..66b7e2d1b8 100644 --- a/lib/sqlalchemy/event.py +++ b/lib/sqlalchemy/event.py @@ -21,7 +21,7 @@ def listen(target, identifier, fn, *args, **kw): if tgt is not None: tgt.dispatch._listen(tgt, identifier, fn, *args, **kw) return - raise exc.InvalidRequestError("No such event %s for target %s" % + raise exc.InvalidRequestError("No such event '%s' for target '%s'" % (identifier,target)) def remove(target, identifier, fn): diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 6b57d33f5f..eb923bc4ee 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -113,7 +113,7 @@ class QueryableAttribute(interfaces.PropComparator): ) def __str__(self): - return repr(self.parententity) + "." + self.property.key + return "%s.%s" % (self.class_.__name__, self.key) @util.memoized_property def property(self): diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py index 2cc180895b..b34c4ab8af 100644 --- a/test/orm/test_mapper.py +++ b/test/orm/test_mapper.py @@ -88,6 +88,18 @@ class MapperTest(_fixtures.FixtureTest): assert_raises(sa.exc.ArgumentError, relationship, Address, cascade="fake, all, delete-orphan") + @testing.resolve_artifact_names + def test_friendly_attribute_str_on_uncompiled_boom(self): + def boom(): + raise Exception("it broke") + mapper(User, users, properties={ + 'addresses':relationship(boom) + }) + + # test that QueryableAttribute.__str__() doesn't + # cause a compile. + eq_(str(User.addresses), "User.addresses") + @testing.resolve_artifact_names def test_exceptions_sticky(self): """test preservation of mapper compile errors raised during hasattr(),