diff options
author | Nils Philippsen <nils@redhat.com> | 2015-11-09 14:50:23 +0100 |
---|---|---|
committer | Nils Philippsen <nils@redhat.com> | 2015-11-25 16:03:59 +0100 |
commit | 58f73d2278393d813c7f39736fc96c5086f18f6d (patch) | |
tree | fb4123cde07619fffd1c7f0be49e46bf8c8339fd | |
parent | 054b22c7867722a256bfe8dd74eada4da378a601 (diff) | |
download | sqlalchemy-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.rst | 10 | ||||
-rw-r--r-- | lib/sqlalchemy/ext/declarative/clsregistry.py | 3 | ||||
-rw-r--r-- | test/ext/declarative/test_basic.py | 23 |
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): |