def dispatch_workflow_commands(wf_ex, wf_cmds): # TODO(rakhmerov): I don't like these imports but otherwise we have # import cycles. from mistral.engine import task_handler from mistral.engine import workflow_handler as wf_handler if not wf_cmds: return for cmd in wf_cmds: if isinstance(cmd, (commands.RunTask, commands.RunExistingTask)): task_handler.run_task(cmd) elif isinstance(cmd, commands.SetWorkflowState): # TODO(rakhmerov): Make just a single call to workflow_handler if states.is_completed(cmd.new_state): wf_handler.stop_workflow(cmd.wf_ex, cmd.new_state, cmd.msg) else: wf_handler.set_workflow_state(wf_ex, cmd.new_state, cmd.msg) elif isinstance(cmd, commands.Noop): # Do nothing. pass else: raise exc.MistralError('Unsupported workflow command: %s' % cmd) if wf_ex.state != states.RUNNING: break
def _process_commands(wf_ex, cmds): if not cmds: return from mistral.engine import task_handler from mistral.engine import workflow_handler as wf_handler for cmd in _rearrange_commands(cmds): if states.is_completed(wf_ex.state): break if wf_ex.state == states.PAUSED: # Save all commands after 'pause' to the backlog so that # they can be processed after the workflow is resumed. _save_command_to_backlog(wf_ex, cmd) continue if isinstance(cmd, (commands.RunTask, commands.RunExistingTask)): task_handler.run_task(cmd) elif isinstance(cmd, commands.SetWorkflowState): wf_handler.set_workflow_state(wf_ex, cmd.new_state, cmd.msg) else: raise exc.MistralError('Unsupported workflow command: %s' % cmd)