diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-01-26 16:58:11 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-01-26 16:58:11 -0500 |
commit | 54e68dc8bd4c4c982864b80f1ff90785a97425fe (patch) | |
tree | fe6eaf37a81e32fa53b9946f66c9fd4f157c6505 | |
parent | 20cdf0e8550e5d2d7a5f2b3ad1e3b8bd354e9b6c (diff) | |
parent | 0e61acaf145f57c78a13fc5c20052e24472cfb02 (diff) | |
download | sqlalchemy-54e68dc8bd4c4c982864b80f1ff90785a97425fe.tar.gz |
Merge branch 'bb_issue_3262' of https://bitbucket.org/xflr6/sqlalchemy
-rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 9 | ||||
-rw-r--r-- | test/orm/test_mapper.py | 13 |
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 74d8f3860..eb5abbd4f 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -974,6 +974,15 @@ class Mapper(InspectionAttr): self._all_tables = self.inherits._all_tables if self.polymorphic_identity is not None: + if self.polymorphic_identity in self.polymorphic_map: + util.warn( + "Reassigning polymorphic association for identity %r " + "from %r to %r: Check for duplicate use of %r as " + "value for polymorphic_identity." % + (self.polymorphic_identity, + self.polymorphic_map[self.polymorphic_identity], + self, self.polymorphic_identity) + ) self.polymorphic_map[self.polymorphic_identity] = self else: diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py index 63ba1a207..264b386d4 100644 --- a/test/orm/test_mapper.py +++ b/test/orm/test_mapper.py @@ -716,6 +716,19 @@ class MapperTest(_fixtures.FixtureTest, AssertsCompiledSQL): m3.identity_key_from_instance(AddressUser()) ) + def test_reassign_polymorphic_identity_warns(self): + User = self.classes.User + users = self.tables.users + class MyUser(User): + pass + m1 = mapper(User, users, polymorphic_on=users.c.name, + polymorphic_identity='user') + assert_raises_message( + sa.exc.SAWarning, + "Reassigning polymorphic association for identity 'user'", + mapper, + MyUser, users, inherits=User, polymorphic_identity='user' + ) def test_illegal_non_primary(self): |