doc/book/en/devrepo/repo/hooks.rst
branchstable
changeset 6756 46297c498842
parent 6753 2bbc1010494c
child 8062 ffd510fb71da
equal deleted inserted replaced
6755:799ae44925c4 6756:46297c498842
    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