[Erp5-report] r46003 arnaud.fontaine - /erp5/trunk/utils/erp5.utils.test_browser/src/erp5/u...

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Aug 29 09:46:20 CEST 2011


Author: arnaud.fontaine
Date: Mon Aug 29 09:46:19 2011
New Revision: 46003

URL: http://svn.erp5.org?rev=46003&view=rev
Log:
Workflow action may not be available yet, thus provide a way to try again


Modified:
    erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py

Modified: erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py?rev=46003&r1=46002&r2=46003&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py [utf8] (original)
+++ erp5/trunk/utils/erp5.utils.test_browser/src/erp5/utils/test_browser/browser.py [utf8] Mon Aug 29 09:46:19 2011
@@ -742,6 +742,8 @@ class MainForm(Form):
     """
     self.submitSelectFavourite(value='/logout')
 
+import time
+
 class ContextMainForm(MainForm):
   """
   Class defining context-dependent convenient methods for the main
@@ -845,7 +847,9 @@ class ContextMainForm(MainForm):
     self.submit(name='Base_doSelect:method')
 
   def submitSelectWorkflow(self, label=None, value=None,
-                           script_id='viewWorkflowActionDialog', **kw):
+                           script_id='viewWorkflowActionDialog',
+                           maximum_attempt_number=1, sleep_between_attempt=0,
+                           **kw):
     """
     Select and submit a workflow action, given either by its label
     (such as I{Create User}) or value (such as I{create_user_action}
@@ -855,19 +859,41 @@ class ContextMainForm(MainForm):
     When validating an object, L{submitDialogConfirm} allows to
     perform the validation required on the next page.
 
+    As the Workflow action may not be available yet, it is possible to set the
+    maximum number of attempts and the sleep duration between each attempt.
+
     @param script_id: Script identifier
     @type script_id: str
-    """
-    try:
-      self.submitSelect('select_action', 'Base_doAction:method', label,
-                        value and '%s?workflow_action=%s' % (script_id, value),
-                        **kw)
-
-    except LookupError:
-      self.submitSelect('select_action', 'Base_doAction:method', label,
-                        value and '%s?field_my_workflow_action=%s' % (script_id,
-                                                                      value),
-                        **kw)
+    @param maximum_attempt_number: Number of attempts before failing
+    @type maximum_attempt_number: int
+    @param sleep_between_attempt: Sleep N seconds between attempts
+    @type sleep_between_attempt: int
+    @return: The time spent (in seconds) if relevant
+    @rtype: int
+    """
+    current_attempt_number = 1
+    while True:
+      try:
+        try:
+          self.submitSelect('select_action', 'Base_doAction:method', label,
+                            value and '%s?workflow_action=%s' % (script_id, value),
+                            **kw)
+
+        except LookupError:
+          self.submitSelect('select_action', 'Base_doAction:method', label,
+                            value and '%s?field_my_workflow_action=%s' % (script_id,
+                                                                          value),
+                            **kw)
+      except LookupError:
+        if current_attempt_nbr == maximum_attempt_number:
+          raise
+
+        current_attempt_number += 1
+        time.sleep(sleep_between_attempt)
+      else:
+        break
+
+    return (current_attempt_number - 1) * sleep_between_attempt
 
   def submitDialogCancel(self):
     """



More information about the Erp5-report mailing list