[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