@@ -265,6 +265,11 @@ def event_state_details(self):
265
265
def foreach_state_details (self ):
266
266
if isinstance (self .current_state , ForEachState ):
267
267
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
+ )
268
273
self .generate_actions_info (
269
274
machine_state = self .state_machine .get_state (self .current_state .name ),
270
275
state_name = self .current_state .name ,
@@ -349,93 +354,104 @@ def generate_actions_info(
349
354
actions : List [Dict [str , Action ]],
350
355
action_mode : str = "sequential" ,
351
356
):
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
+ )
382
374
)
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
398
408
)
399
- else None
400
409
)
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 } " ,
401
448
)
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
439
455
440
456
def get_action_function (self , state : NestedState , f_name : str ):
441
457
if self .workflow .functions :
0 commit comments