summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-01-26 16:58:11 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-01-26 16:58:11 -0500
commit54e68dc8bd4c4c982864b80f1ff90785a97425fe (patch)
treefe6eaf37a81e32fa53b9946f66c9fd4f157c6505
parent20cdf0e8550e5d2d7a5f2b3ad1e3b8bd354e9b6c (diff)
parent0e61acaf145f57c78a13fc5c20052e24472cfb02 (diff)
downloadsqlalchemy-54e68dc8bd4c4c982864b80f1ff90785a97425fe.tar.gz
Merge branch 'bb_issue_3262' of https://bitbucket.org/xflr6/sqlalchemy
-rw-r--r--lib/sqlalchemy/orm/mapper.py9
-rw-r--r--test/orm/test_mapper.py13
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):