@@ -265,6 +265,11 @@ def event_state_details(self):
265265 def foreach_state_details (self ):
266266 if isinstance (self .current_state , ForEachState ):
267267 self .state_to_machine_state (["foreach_state" , "state" ])
268+ self .state_machine .add_transition (
269+ trigger = f"{ self .current_state .iterationParam } IN { self .current_state .inputCollection } " ,
270+ source = self .current_state .name ,
271+ dest = self .current_state .name ,
272+ )
268273 self .generate_actions_info (
269274 machine_state = self .state_machine .get_state (self .current_state .name ),
270275 state_name = self .current_state .name ,
@@ -349,93 +354,104 @@ def generate_actions_info(
349354 actions : List [Dict [str , Action ]],
350355 action_mode : str = "sequential" ,
351356 ):
352- parallel_states = []
353- if actions :
354- new_subflows_names = self .get_subflow_state (
355- machine_state = machine_state , state_name = state_name , actions = actions
356- )
357- for i , action in enumerate (actions ):
358- name = None
359- if action .functionRef :
360- name = (
361- self .get_function_name (action .functionRef )
362- if isinstance (action .functionRef , str )
363- else (
364- action .functionRef .refName
365- if isinstance (action .functionRef , FunctionRef )
366- else None
367- )
368- )
369- if name not in machine_state .states .keys ():
370- machine_state .add_substate (
371- ns := self .state_machine .state_cls (name )
372- )
373- ns .tags = ["function" ]
374- self .get_action_function (state = ns , f_name = name )
375- elif action .subFlowRef :
376- name = new_subflows_names .get (i )
377- elif action .eventRef :
378- name = f"{ action .eventRef .triggerEventRef } /{ action .eventRef .resultEventRef } "
379- if name not in machine_state .states .keys ():
380- machine_state .add_substate (
381- ns := self .state_machine .state_cls (name )
357+ if self .get_actions :
358+ parallel_states = []
359+ if actions :
360+ new_subflows_names = self .get_subflow_state (
361+ machine_state = machine_state , state_name = state_name , actions = actions
362+ )
363+ for i , action in enumerate (actions ):
364+ name = None
365+ if action .functionRef :
366+ name = (
367+ self .get_function_name (action .functionRef )
368+ if isinstance (action .functionRef , str )
369+ else (
370+ action .functionRef .refName
371+ if isinstance (action .functionRef , FunctionRef )
372+ else None
373+ )
382374 )
383- ns .tags = ["event" ]
384- self .get_action_event (state = ns , e_name = name )
385- if name :
386- if action_mode == "sequential" :
387- if i < len (actions ) - 1 :
388- # get next name
389- next_name = None
390- if actions [i + 1 ].functionRef :
391- next_name = (
392- self .get_function_name (actions [i + 1 ].functionRef )
393- if isinstance (actions [i + 1 ].functionRef , str )
394- else (
395- actions [i + 1 ].functionRef .refName
396- if isinstance (
397- actions [i + 1 ].functionRef , FunctionRef
375+ if name not in machine_state .states .keys ():
376+ machine_state .add_substate (
377+ ns := self .state_machine .state_cls (name )
378+ )
379+ ns .tags = ["function" ]
380+ self .get_action_function (state = ns , f_name = name )
381+ elif action .subFlowRef :
382+ name = new_subflows_names .get (i )
383+ elif action .eventRef :
384+ name = f"{ action .eventRef .triggerEventRef } /{ action .eventRef .resultEventRef } "
385+ if name not in machine_state .states .keys ():
386+ machine_state .add_substate (
387+ ns := self .state_machine .state_cls (name )
388+ )
389+ ns .tags = ["event" ]
390+ self .get_action_event (state = ns , e_name = name )
391+ if name :
392+ if action_mode == "sequential" :
393+ if i < len (actions ) - 1 :
394+ # get next name
395+ next_name = None
396+ if actions [i + 1 ].functionRef :
397+ next_name = (
398+ self .get_function_name (
399+ actions [i + 1 ].functionRef
400+ )
401+ if isinstance (actions [i + 1 ].functionRef , str )
402+ else (
403+ actions [i + 1 ].functionRef .refName
404+ if isinstance (
405+ actions [i + 1 ].functionRef , FunctionRef
406+ )
407+ else None
398408 )
399- else None
400409 )
410+ if (
411+ next_name
412+ not in self .state_machine .get_state (
413+ state_name
414+ ).states .keys ()
415+ ):
416+ machine_state .add_substate (
417+ ns := self .state_machine .state_cls (
418+ next_name
419+ )
420+ )
421+ ns .tags = ["function" ]
422+ self .get_action_function (
423+ state = ns , f_name = next_name
424+ )
425+ elif actions [i + 1 ].subFlowRef :
426+ next_name = new_subflows_names .get (i + 1 )
427+ elif actions [i + 1 ].eventRef :
428+ next_name = f"{ action .eventRef .triggerEventRef } /{ action .eventRef .resultEventRef } "
429+ if (
430+ next_name
431+ not in self .state_machine .get_state (
432+ state_name
433+ ).states .keys ()
434+ ):
435+ machine_state .add_substate (
436+ ns := self .state_machine .state_cls (
437+ next_name
438+ )
439+ )
440+ ns .tags = ["event" ]
441+ self .get_action_event (
442+ state = ns , e_name = next_name
443+ )
444+ self .state_machine .add_transition (
445+ trigger = "" ,
446+ source = f"{ state_name } .{ name } " ,
447+ dest = f"{ state_name } .{ next_name } " ,
401448 )
402- if (
403- next_name
404- not in self .state_machine .get_state (
405- state_name
406- ).states .keys ()
407- ):
408- machine_state .add_substate (
409- ns := self .state_machine .state_cls (next_name )
410- )
411- ns .tags = ["function" ]
412- self .get_action_function (state = ns , f_name = next_name )
413- elif actions [i + 1 ].subFlowRef :
414- next_name = new_subflows_names .get (i + 1 )
415- elif actions [i + 1 ].eventRef :
416- next_name = f"{ action .eventRef .triggerEventRef } /{ action .eventRef .resultEventRef } "
417- if (
418- next_name
419- not in self .state_machine .get_state (
420- state_name
421- ).states .keys ()
422- ):
423- machine_state .add_substate (
424- ns := self .state_machine .state_cls (next_name )
425- )
426- ns .tags = ["event" ]
427- self .get_action_event (state = ns , e_name = next_name )
428- self .state_machine .add_transition (
429- trigger = "" ,
430- source = f"{ state_name } .{ name } " ,
431- dest = f"{ state_name } .{ next_name } " ,
432- )
433- if i == 0 :
434- machine_state .initial = name
435- elif action_mode == "parallel" :
436- parallel_states .append (name )
437- if action_mode == "parallel" :
438- machine_state .initial = parallel_states
449+ if i == 0 :
450+ machine_state .initial = name
451+ elif action_mode == "parallel" :
452+ parallel_states .append (name )
453+ if action_mode == "parallel" :
454+ machine_state .initial = parallel_states
439455
440456 def get_action_function (self , state : NestedState , f_name : str ):
441457 if self .workflow .functions :
0 commit comments