summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Philippsen <nils@redhat.com>2015-11-09 14:50:23 +0100
committerNils Philippsen <nils@redhat.com>2015-11-25 16:03:59 +0100
commit58f73d2278393d813c7f39736fc96c5086f18f6d (patch)
treefb4123cde07619fffd1c7f0be49e46bf8c8339fd
parent054b22c7867722a256bfe8dd74eada4da378a601 (diff)
downloadsqlalchemy-pr/212.tar.gz
py2k: accept unicode literals on :func:`backref`, toopr/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`. amends commit e6f67f48054d906856f879bc1803ea639aa4b670
-rw-r--r--doc/build/changelog/changelog_11.rst10
-rw-r--r--lib/sqlalchemy/ext/declarative/clsregistry.py3
-rw-r--r--test/ext/declarative/test_basic.py23
3 files changed, 34 insertions, 2 deletions
diff --git a/doc/build/changelog/changelog_11.rst b/doc/build/changelog/changelog_11.rst
index b2012f4ac..2ba204623 100644
--- a/doc/build/changelog/changelog_11.rst
+++ b/doc/build/changelog/changelog_11.rst
@@ -22,6 +22,14 @@
: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
@@ -432,4 +440,4 @@
.. seealso::
- :ref:`change_3504` \ No newline at end of file
+ :ref:`change_3504`
diff --git a/lib/sqlalchemy/ext/declarative/clsregistry.py b/lib/sqlalchemy/ext/declarative/clsregistry.py
index c3887d6cf..050923980 100644
--- a/lib/sqlalchemy/ext/declarative/clsregistry.py
+++ b/lib/sqlalchemy/ext/declarative/clsregistry.py
@@ -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
diff --git a/test/ext/declarative/test_basic.py b/test/ext/declarative/test_basic.py
index 5165d9cc9..ae1a85f8b 100644
--- a/test/ext/declarative/test_basic.py
+++ b/test/ext/declarative/test_basic.py
@@ -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):