@@ -161,33 +161,28 @@ export const pythonFromBlock = function (
161161 block : StepsBlock ,
162162 generator : ExtendedPythonGenerator ,
163163) {
164+ let code = 'def steps(self):\n' ;
165+ code += generator . INDENT + 'if not self._initialized_steps:\n' ;
166+ code += generator . INDENT . repeat ( 2 ) + 'self._current_step = "' + block . mrcStepNames [ 0 ] + '"\n' ;
167+ code += generator . INDENT . repeat ( 2 ) + 'self.initialized_steps = True\n\n' ;
168+ code += generator . INDENT + 'if self._current_step == None:\n' ;
169+ code += generator . INDENT . repeat ( 2 ) + 'return\n' ;
164170
165- let code = 'def initialize_steps(self):\n' ;
166- code += generator . INDENT + 'self.step_from_name = {}\n' ;
167- code += generator . INDENT + 'self.name_from_step = {}\n' ;
168- block . mrcStepNames . forEach ( ( stepName , index ) => {
169- code += generator . INDENT + `self.step_from_name['${ stepName } '] = ${ index } \n` ;
170- code += generator . INDENT + `self.name_from_step[${ index } ] = '${ stepName } '\n` ;
171- } ) ;
172-
173- code += generator . INDENT + 'self.current_step_index = 0\n' ;
174- code += generator . INDENT + 'self.initialized = True\n' ;
175171
176- generator . addClassMethodDefinition ( 'initialize_steps' , code ) ;
177-
178- code = 'def steps(self):\n' ;
179- code += generator . INDENT + 'if not self.initialized:\n' ;
180- code += generator . INDENT . repeat ( 2 ) + 'self.initialize_steps()\n\n' ;
181- code += generator . INDENT + 'match self.current_step_index:\n' ;
172+ code += generator . INDENT + 'match self._current_step:\n' ;
182173 block . mrcStepNames . forEach ( ( stepName , index ) => {
183- code += generator . INDENT . repeat ( 2 ) + `case ${ index } : # ${ stepName } \n` ;
174+ code += generator . INDENT . repeat ( 2 ) + `case " ${ stepName } ": \n` ;
184175 let stepCode = generator . statementToCode ( block , 'STEP_' + index ) ;
185176 if ( stepCode !== '' ) {
186177 code += generator . prefixLines ( stepCode , generator . INDENT . repeat ( 2 ) ) ;
187178 }
188179 let conditionCode = generator . valueToCode ( block , 'CONDITION_' + index , Order . NONE ) || 'False' ;
189180 code += generator . INDENT . repeat ( 3 ) + 'if ' + conditionCode + ':\n' ;
190- code += generator . INDENT . repeat ( 4 ) + 'self.current_step_index += 1\n' ;
181+ if ( index === block . mrcStepNames . length - 1 ) {
182+ code += generator . INDENT . repeat ( 4 ) + 'self._current_step = None\n' ;
183+ } else {
184+ code += generator . INDENT . repeat ( 4 ) + 'self._current_step = "' + block . mrcStepNames [ index + 1 ] + '"\n' ;
185+ }
191186 } ) ;
192187
193188 generator . addClassMethodDefinition ( 'steps' , code ) ;
0 commit comments