]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
py2k: accept unicode literals on :func:`backref`, too
authorNils Philippsen <nils@redhat.com>
Mon, 9 Nov 2015 13:50:23 +0000 (14:50 +0100)
committerNils Philippsen <nils@redhat.com>
Wed, 25 Nov 2015 15:03:59 +0000 (16:03 +0100)
Fixed bug where in Py2K a unicode literal would not be accepted as the
string name of a class or other argument within declarative using
:func:`.backref` on :func:`.relationship`.

amends commit e6f67f48054d906856f879bc1803ea639aa4b670

doc/build/changelog/changelog_11.rst
lib/sqlalchemy/ext/declarative/clsregistry.py
test/ext/declarative/test_basic.py

index b2012f4ac727e74b9c218ddf7705bcc1e3aee1cf..2ba2046233ddffa8aa905aa447a6b8fc709aab3b 100644 (file)
 .. changelog::
     :version: 1.1.0b1
 
+    .. change::
+        :tags: bug, orm, declarative
+        :pullreq: github:212
+
+        Fixed bug where in Py2K a unicode literal would not be accepted as the
+        string name of a class or other argument within declarative using
+        :func:`.backref` on :func:`.relationship`.
+
     .. change::
         :tags: bug, postgresql
         :tickets: 3587
 
         .. seealso::
 
-            :ref:`change_3504`
\ No newline at end of file
+            :ref:`change_3504`
index c3887d6cf1cc0d09b56afe231a42a025bd659961..050923980f8ed22c87894fcaf0ebf4d4ebb15cfb 100644 (file)
@@ -321,7 +321,8 @@ def _deferred_relationship(cls, prop):
             key, kwargs = prop.backref
             for attr in ('primaryjoin', 'secondaryjoin', 'secondary',
                          'foreign_keys', 'remote_side', 'order_by'):
-                if attr in kwargs and isinstance(kwargs[attr], str):
+                if attr in kwargs and isinstance(kwargs[attr],
+                                                 util.string_types):
                     kwargs[attr] = resolve_arg(kwargs[attr])
 
     return prop
index 5165d9cc931ed3e151b1c6ab51a156bc8f1fdbea..ae1a85f8b5a245301490cbd52cb60a5e1e1fcb57 100644 (file)
@@ -102,6 +102,29 @@ class DeclarativeTest(DeclarativeTestBase):
 
         assert User.addresses.property.mapper.class_ is Address
 
+    def test_unicode_string_resolve_backref(self):
+        class User(Base, fixtures.ComparableEntity):
+            __tablename__ = 'users'
+
+            id = Column('id', Integer, primary_key=True,
+                        test_needs_autoincrement=True)
+            name = Column('name', String(50))
+
+        class Address(Base, fixtures.ComparableEntity):
+            __tablename__ = 'addresses'
+
+            id = Column(Integer, primary_key=True,
+                        test_needs_autoincrement=True)
+            email = Column(String(50), key='_email')
+            user_id = Column('user_id', Integer, ForeignKey('users.id'),
+                             key='_user_id')
+            user = relationship(
+                    User,
+                    backref=backref("addresses",
+                                    order_by=util.u("Address.email")))
+
+        assert Address.user.property.mapper.class_ is User
+
     def test_no_table(self):
         def go():
             class User(Base):