equal
deleted
inserted
replaced
95 relation. This is best achieved in an operation since all relations are likely to |
95 relation. This is best achieved in an operation since all relations are likely to |
96 be set at commit time. |
96 be set at commit time. |
97 |
97 |
98 .. sourcecode:: python |
98 .. sourcecode:: python |
99 |
99 |
100 from cubicweb.server.hook import Hook, Operation, match_rtype |
100 from cubicweb.server.hook import Hook, DataOperationMixIn, Operation, match_rtype |
101 |
101 |
102 def check_cycle(self, session, eid, rtype, role='subject'): |
102 def check_cycle(self, session, eid, rtype, role='subject'): |
103 parents = set([eid]) |
103 parents = set([eid]) |
104 parent = session.entity_from_eid(eid) |
104 parent = session.entity_from_eid(eid) |
105 while parent.related(rtype, role): |
105 while parent.related(rtype, role): |
108 msg = session._('detected %s cycle' % rtype) |
108 msg = session._('detected %s cycle' % rtype) |
109 raise ValidationError(eid, {rtype: msg}) |
109 raise ValidationError(eid, {rtype: msg}) |
110 parents.add(parent.eid) |
110 parents.add(parent.eid) |
111 |
111 |
112 |
112 |
113 class CheckSubsidiaryCycleOp(Operation): |
113 class CheckSubsidiaryCycleOp(DataOperationMixIn, Operation): |
114 |
114 |
115 def precommit_event(self): |
115 def precommit_event(self): |
116 check_cycle(self.session, self.eidto, 'subsidiary_of') |
116 check_cycle(self.session, self.eidto, 'subsidiary_of') |
117 |
117 |
118 |
118 |