[z3-checkins] r17561 - z3/hurry/trunk/src/hurry/workflow
faassen at codespeak.net
faassen at codespeak.net
Wed Sep 14 15:26:09 CEST 2005
Author: faassen
Date: Wed Sep 14 15:26:08 2005
New Revision: 17561
Modified:
z3/hurry/trunk/src/hurry/workflow/interfaces.py
z3/hurry/trunk/src/hurry/workflow/workflow.py
z3/hurry/trunk/src/hurry/workflow/workflow.txt
Log:
Introduce fireTransitionToward
Modified: z3/hurry/trunk/src/hurry/workflow/interfaces.py
==============================================================================
--- z3/hurry/trunk/src/hurry/workflow/interfaces.py (original)
+++ z3/hurry/trunk/src/hurry/workflow/interfaces.py Wed Sep 14 15:26:08 2005
@@ -7,6 +7,12 @@
class InvalidTransitionError(Exception):
pass
+class NoTransitionAvailableError(InvalidTransitionError):
+ pass
+
+class AmbiguousTransitionError(InvalidTransitionError):
+ pass
+
class ConditionFailedError(Exception):
pass
@@ -96,6 +102,20 @@
user's permission is.
"""
+ def fireTransitionToward(state, comment=None, side_effect=None,
+ check_security=True):
+ """Fire transition toward state.
+
+ Looks up a manual transition that will get to the indicated
+ state.
+
+ If no such transition is possible, NoTransitionAvailableError will
+ be raised.
+
+ If more than one manual transitions are possible,
+ AmbiguousTransitionError will be raised.
+ """
+
def fireTransitionForVersions(state, transition_id):
"""Fire a transition for all versions in a state.
"""
Modified: z3/hurry/trunk/src/hurry/workflow/workflow.py
==============================================================================
--- z3/hurry/trunk/src/hurry/workflow/workflow.py (original)
+++ z3/hurry/trunk/src/hurry/workflow/workflow.py Wed Sep 14 15:26:08 2005
@@ -183,6 +183,16 @@
notify(ObjectModifiedEvent(result))
return result
+ def fireTransitionToward(self, state, comment=None, side_effect=None,
+ check_security=True):
+ transition_ids = self.getManualTransitionIdsToward(state)
+ if not transition_ids:
+ raise interfaces.NoTransitionAvailableError
+ if len(transition_ids) != 1:
+ raise interfaces.AmbiguousTransitionError
+ return self.fireTransition(transition_ids[0],
+ comment, side_effect, check_security)
+
def fireTransitionForVersions(self, state, transition_id):
id = IWorkflowState(self.context).getId()
wf_versions = zapi.getUtility(IWorkflowVersions)
Modified: z3/hurry/trunk/src/hurry/workflow/workflow.txt
==============================================================================
--- z3/hurry/trunk/src/hurry/workflow/workflow.txt (original)
+++ z3/hurry/trunk/src/hurry/workflow/workflow.txt Wed Sep 14 15:26:08 2005
@@ -143,7 +143,7 @@
The workflow state should now be 'b'::
- >>> interfaces.IWorkflowState(document).getState()
+ >>> state.getState()
'b'
We check that the event indeed got fired::
@@ -155,6 +155,24 @@
>>> events[-1].destination
'b'
+We will also try fireTransitionToward here, so we sneak back the
+workflow to state 'a' again and try that::
+
+ >>> state.setState('a')
+
+Try going through a transition we cannot reach first::
+
+ >>> info.fireTransitionToward('c')
+ Traceback (most recent call last):
+ ...
+ NoTransitionAvailableError
+
+Now go to 'b' again::
+
+ >>> info.fireTransitionToward('b')
+ >>> state.getState()
+ 'b'
+
Finally, before forgetting about our document, we finalize the workflow::
>>> info.fireTransition('finalize')
More information about the z3-checkins
mailing list