From: Mike Bayer Date: Sat, 12 Aug 2006 21:08:31 +0000 (+0000) Subject: improved error message when a backref conflicts with a column-based property X-Git-Tag: rel_0_2_7~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=605ed429cd7992e3080f8293ce62c98c9c766475;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git improved error message when a backref conflicts with a column-based property --- diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 26717fb659..5551348747 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -717,6 +717,8 @@ class BackRef(object): parent = prop.parent.primary_mapper() relation = cls(parent, prop.secondary, pj, sj, backref=prop.key, is_backref=True, **self.kwargs) mapper._compile_property(self.key, relation); + elif not isinstance(mapper.props[self.key], PropertyLoader): + raise exceptions.ArgumentError("Cant create backref '%s' on mapper '%s'; an incompatible property of that name already exists" % (self.key, str(mapper))) else: # else set one of us as the "backreference" parent = prop.parent.primary_mapper() diff --git a/test/orm/mapper.py b/test/orm/mapper.py index 5cf665fd41..49b5a0cbcb 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -101,6 +101,21 @@ class MapperTest(MapperSuperTest): finally: table.drop() + def testpropconflict(self): + """test that a backref created against an existing mapper with a property name + conflict raises a decent error message""" + mapper(Address, addresses) + mapper(User, users, + properties={ + 'addresses':relation(Address, backref='email_address') + }) + try: + class_mapper(Address) + class_mapper(User) + assert False + except exceptions.ArgumentError: + pass + def testrefresh(self): mapper(User, users, properties={'addresses':relation(mapper(Address, addresses))}) s = create_session()