]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
QueryableAttribute can stringify itself without triggering a mapper compile. prevent...
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 12 Jan 2011 23:53:55 +0000 (18:53 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 12 Jan 2011 23:53:55 +0000 (18:53 -0500)
when stringing the attr during an exception for something else like a bad event listen

lib/sqlalchemy/event.py
lib/sqlalchemy/orm/attributes.py
test/orm/test_mapper.py

index 6c74c101da9d423304e010a4a7cef5e0cc73ad18..66b7e2d1b8c85a2ca4e3e315a529fa213139f22e 100644 (file)
@@ -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):
index 6b57d33f5f5f0c1256151a9b99c34c8682c7b45f..eb923bc4ee10e04ead1562c2a762688ad20fc43e 100644 (file)
@@ -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):
index 2cc180895b4ce3633f379e0032c3119971c356b9..b34c4ab8afae17582dbe95beecddd89f3644d22f 100644 (file)
@@ -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(),