Commit b229edde authored by Nicolas Chauvat's avatar Nicolas Chauvat
Browse files

[entity] make set_relations() accept entities and eids (closes #1631391)

--HG--
branch : stable
parent a650e6267e97
......@@ -958,8 +958,9 @@ class Entity(AppObject):
"""add relations to the given object. To set a relation where this entity
is the object of the relation, use 'reverse_'<relation> 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 @@ class Entity(AppObject):
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
......
......@@ -564,6 +564,15 @@ du :eid:`1:*ReST*`'''
self.assertEqual(person.prenom, u'sylvain')
self.assertEqual(person.nom, u'thénault')
def test_set_relations(self):
req = self.request()
person = req.create_entity('Personne', nom=u'chauvat', prenom=u'nicolas')
note = req.create_entity('Note', type=u'x')
note.set_relations(ecrit_par=person)
note = req.create_entity('Note', type=u'y')
note.set_relations(ecrit_par=person.eid)
self.assertEqual(len(person.reverse_ecrit_par), 2)
def test_metainformation_and_external_absolute_url(self):
req = self.request()
note = req.create_entity('Note', type=u'z')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment