diff -r 22403d5c3da4 -r d3104c697adb entity.py --- a/entity.py Thu May 05 12:50:21 2011 +0200 +++ b/entity.py Thu May 05 15:28:24 2011 +0200 @@ -958,8 +958,9 @@ """add relations to the given object. To set a relation where this entity is the object of the relation, use 'reverse_' as argument name. - Values may be an entity, a list of entities, or None (meaning that all - relations of the given type from or to this object should be deleted). + Values may be an entity or eid, a list of entities or eids, or None + (meaning that all relations of the given type from or to this object + should be deleted). """ # XXX update cache _check_cw_unsafe(kwargs) @@ -974,9 +975,17 @@ continue if not isinstance(values, (tuple, list, set, frozenset)): values = (values,) + eids = [] + for val in values: + try: + eids.append(str(val.eid)) + except AttributeError: + try: + eids.append(str(typed_eid(val))) + except (ValueError, TypeError): + raise Exception('expected an Entity or eid, got %s' % val) self._cw.execute('SET %s WHERE X eid %%(x)s, Y eid IN (%s)' % ( - restr, ','.join(str(r.eid) for r in values)), - {'x': self.eid}) + restr, ','.join(eids)), {'x': self.eid}) def cw_delete(self, **kwargs): assert self.has_eid(), self.eid