[Erp5-report] r31163 seb - /erp5/trunk/products/ERP5Type/tests/Sequence.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Dec 8 17:14:46 CET 2009
Author: seb
Date: Tue Dec 8 17:14:44 2009
New Revision: 31163
URL: http://svn.erp5.org?rev=31163&view=rev
Log:
Add the possibility to mix code using sequence with code not
using sequences
Modified:
erp5/trunk/products/ERP5Type/tests/Sequence.py
Modified: erp5/trunk/products/ERP5Type/tests/Sequence.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/Sequence.py?rev=31163&r1=31162&r2=31163&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/Sequence.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/Sequence.py [utf8] Tue Dec 8 17:14:44 2009
@@ -97,19 +97,23 @@
class Sequence:
- def __init__(self):
+ def __init__(self, context=None):
self._step_list = []
self._dict = {}
+ self._played_index = 0
+ self._context = context
def play(self, context, sequence=None, sequence_number=0, quiet=0):
if not quiet:
- ZopeTestCase._print('\nStarting New Sequence %i... ' % sequence_number)
- LOG('Sequence.play', 0, 'Starting New Sequence %i... ' % sequence_number)
+ if self._played_index == 0:
+ ZopeTestCase._print('\nStarting New Sequence %i... ' % sequence_number)
+ LOG('Sequence.play', 0, 'Starting New Sequence %i... ' % sequence_number)
if sequence is None:
- for idx, step in enumerate(self._step_list):
+ for idx, step in enumerate(self._step_list[self._played_index:]):
step.play(context, sequence=self, quiet=quiet)
# commit transaction after each step
transaction.commit()
+ self._played_index = len(self._step_list)
def addStep(self,method_name,required=1,max_replay=1):
new_step = Step(method_name=method_name,
@@ -128,6 +132,32 @@
def setdefault(self, key, default=None):
return self._dict.setdefault(key, default)
+ def __call__(self, sequence_string, sequence_number=0, quiet=0):
+ """
+ add some steps and directly runs them, this allows to easily write
+ such code when sequence are unable to handle too complex cases :
+
+ sequence('CreateFoo Tic')
+ [some code not using sequences]
+ sequence('CreateBar Tic')
+ """
+ self.setSequenceString(sequence_string)
+ if self._context is None:
+ raise ValueError('context must be initialized when sequence directly called')
+ self.play(self._context, sequence_number=sequence_number, quiet=quiet)
+
+ def setSequenceString(self, sequence_string):
+ sequence_string = re.subn("#.*\n", "\n", sequence_string)[0]
+ step_list = sequence_string.split()
+ self.setSequenceStringList(step_list)
+
+ def setSequenceStringList(self, step_list):
+ for step in step_list:
+ if step != '':
+ if step.startswith('step'):
+ step = step[4:]
+ self.addStep(step)
+
class SequenceList:
def __init__(self):
@@ -144,18 +174,14 @@
returns the sequence for those steps.
"""
# remove comments in sequence strings
- sequence_string = re.subn("#.*\n", "\n", sequence_string)[0]
- step_list = sequence_string.split()
- return self.addSequenceStringList(step_list)
+ sequence = Sequence()
+ sequence.setSequenceString(sequence_string)
+ self.addSequence(sequence)
+ return sequence
def addSequenceStringList(self, step_list):
- step_list
sequence = Sequence()
- for step in step_list:
- if step != '':
- if step.startswith('step'):
- step = step[4:]
- sequence.addStep(step)
+ sequence.setSequenceStringList(step_list)
self.addSequence(sequence)
return sequence
More information about the Erp5-report
mailing list