# HG changeset patch # User Sylvain Thénault # Date 1251196410 -7200 # Node ID d01417c14f351a7982dbd51bddb202735472b26b # Parent fed52d317ba733577b402601c3502036d8f5dcc1 [wf] new iter_worfklows method on workflow diff -r fed52d317ba7 -r d01417c14f35 entities/wfobjs.py --- a/entities/wfobjs.py Tue Aug 25 12:32:44 2009 +0200 +++ b/entities/wfobjs.py Tue Aug 25 12:33:30 2009 +0200 @@ -40,6 +40,23 @@ return self.workflow_of[0].rest_path(), {'vid': 'workflow'} return super(Workflow, self).after_deletion_path() + def iter_workflows(self, _done=None): + """return an iterator on actual workflows, eg this workflow and its + subworkflows + """ + # infinite loop safety belt + if _done is None: + _done = set() + yield self + _done.add(self.eid) + for tr in self.req.execute('Any T WHERE T is WorkflowTransition, ' + 'T transition_of WF, WF eid %(wf)s', + {'wf': self.eid}).entities(): + if tr.subwf.eid in _done: + continue + for subwf in tr.subwf.iter_workflows(_done): + yield subwf + # state / transitions accessors ############################################ def state_by_name(self, statename):