def get_task_execution_result(task_ex): # Use of task_ex.executions requires a session to lazy load the action # executions. This get_task_execution_result method is also invoked # from get_all in the task execution API controller. If there is a lot of # read against the API, it will lead to a lot of unnecessary DB locks # which result in possible deadlocks and WF execution failures. Therefore, # use db_api.get_action_executions here to avoid session-less use cases. action_execs = db_api.get_action_executions(task_execution_id=task_ex.id) action_execs.sort( key=lambda x: x.runtime_context.get('index') ) results = [ _extract_execution_result(ex) for ex in action_execs if hasattr(ex, 'output') and ex.accepted ] task_spec = spec_parser.get_task_spec(task_ex.spec) if task_spec.get_with_items(): if with_items.get_count(task_ex) > 0: return results else: return [] return results[0] if len(results) == 1 else results
def get_task_execution_result(task_ex): execs = task_ex.executions execs.sort(key=lambda x: x.runtime_context.get('index')) results = [ _extract_execution_result(ex) for ex in execs if hasattr(ex, 'output') and ex.accepted ] task_spec = spec_parser.get_task_spec(task_ex.spec) if task_spec.get_with_items(): if with_items.get_count(task_ex) > 0: return results else: return [] return results[0] if len(results) == 1 else results
def get_task_execution_result(task_ex): execs = task_ex.executions execs.sort( key=lambda x: x.runtime_context.get('index') ) results = [ _extract_execution_result(ex) for ex in execs if hasattr(ex, 'output') and ex.accepted ] task_spec = spec_parser.get_task_spec(task_ex.spec) if task_spec.get_with_items(): if with_items.get_count(task_ex) > 0: return results else: return [] return results[0] if len(results) == 1 else results