summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Bank <sebastian.bank@uni-leipzig.de>2014-12-04 14:34:08 +0100
committerSebastian Bank <sebastian.bank@uni-leipzig.de>2014-12-04 14:34:08 +0100
commit0e61acaf145f57c78a13fc5c20052e24472cfb02 (patch)
treeaf99b31429ddcbe6536a7bdb2af539884892b5d4
parent156f473de00024688404d73aea305cd4fc452638 (diff)
downloadsqlalchemy-0e61acaf145f57c78a13fc5c20052e24472cfb02.tar.gz
warn on duplicate polymorphic_identity
-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 863dab5cb..0e0c1a833 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):