hooks/workflow.py
changeset 4075 e710f4052bd6
parent 4024 6a14cff373c3
child 4088 23ce2b3fb03d
equal deleted inserted replaced
4074:9cce43f52c61 4075:e710f4052bd6
     9 
     9 
    10 from datetime import datetime
    10 from datetime import datetime
    11 
    11 
    12 from cubicweb import RepositoryError, ValidationError
    12 from cubicweb import RepositoryError, ValidationError
    13 from cubicweb.interfaces import IWorkflowable
    13 from cubicweb.interfaces import IWorkflowable
    14 from cubicweb.selectors import entity_implements
    14 from cubicweb.selectors import implements
    15 from cubicweb.server import hook
    15 from cubicweb.server import hook
    16 from cubicweb.entities.wfobjs import WorkflowTransition
    16 from cubicweb.entities.wfobjs import WorkflowTransition
    17 
    17 
    18 
    18 
    19 def _change_state(session, x, oldstate, newstate):
    19 def _change_state(session, x, oldstate, newstate):
   141     category = 'worfklow'
   141     category = 'worfklow'
   142 
   142 
   143 
   143 
   144 class SetInitialStateHook(WorkflowHook):
   144 class SetInitialStateHook(WorkflowHook):
   145     __regid__ = 'wfsetinitial'
   145     __regid__ = 'wfsetinitial'
   146     __select__ = WorkflowHook.__select__ & entity_implements(IWorkflowable)
   146     __select__ = WorkflowHook.__select__ & implements(IWorkflowable)
   147     events = ('after_add_entity',)
   147     events = ('after_add_entity',)
   148 
   148 
   149     def __call__(self):
   149     def __call__(self):
   150         _SetInitialStateOp(self._cw, entity=self.entity)
   150         _SetInitialStateOp(self._cw, entity=self.entity)
   151 
   151 
   165     """check the transition is allowed, add missing information. Expect that:
   165     """check the transition is allowed, add missing information. Expect that:
   166     * wf_info_for inlined relation is set
   166     * wf_info_for inlined relation is set
   167     * by_transition or to_state (managers only) inlined relation is set
   167     * by_transition or to_state (managers only) inlined relation is set
   168     """
   168     """
   169     __regid__ = 'wffiretransition'
   169     __regid__ = 'wffiretransition'
   170     __select__ = WorkflowHook.__select__ & entity_implements('TrInfo')
   170     __select__ = WorkflowHook.__select__ & implements('TrInfo')
   171     events = ('before_add_entity',)
   171     events = ('before_add_entity',)
   172 
   172 
   173     def __call__(self):
   173     def __call__(self):
   174         session = self._cw
   174         session = self._cw
   175         entity = self.entity
   175         entity = self.entity
   252 
   252 
   253 
   253 
   254 class FiredTransitionHook(WorkflowHook):
   254 class FiredTransitionHook(WorkflowHook):
   255     """change related entity state"""
   255     """change related entity state"""
   256     __regid__ = 'wffiretransition'
   256     __regid__ = 'wffiretransition'
   257     __select__ = WorkflowHook.__select__ & entity_implements('TrInfo')
   257     __select__ = WorkflowHook.__select__ & implements('TrInfo')
   258     events = ('after_add_entity',)
   258     events = ('after_add_entity',)
   259 
   259 
   260     def __call__(self):
   260     def __call__(self):
   261         trinfo = self.entity
   261         trinfo = self.entity
   262         _change_state(self._cw, trinfo['wf_info_for'],
   262         _change_state(self._cw, trinfo['wf_info_for'],