import logging import pprint from rich.progress import track from core.runtime.managefailure import manageFailure from core.runtime.stopsignals import checkDependency from core.execution.processregistry import registerProcess outputs = {} def buildOperation(definition, outputs): process_log = True from core.execution.executioncontract import executeContract actions = definition.actions outputs = registerProcess(definition, outputs) responses = [] if getattr(definition, "track", False): actions = track( actions, #description=definition.name description=f"[green]{definition.name}[/green]" ) for action in actions: #Check if dependencies are in stop signal registry stop = checkDependency(action, outputs, definition) if stop: continue #Register action before its execution if action.kind == "action": outputs["processes"][definition.name][action.name] = {} #Pass the definition through to the action so it can be passed into buildPreRuntimeAttr #Definition should be passed through in order to give access to addStopSignal so it can write directly to the definition during buildPreRuntimeAttr #Stop signal can optionally be engaged by doing addStopSignal inside the action definition outputs, response = executeContract(action, outputs, definition) responses.append(response) #Register responses in process registry if action.kind == "action": outputs["processes"][definition.name][action.name]["response"] = response ##Append completed process to process registry outputs["processes"][definition.name]["completed"].append(action.alias) #Temporarily disabled manageFailure functions #except Exception as error: #outputs = manageFailure(error, action, outputs) #Print completion status after runtime processes if process_log: logging.info(f"{definition.name} completed") #For debugging purposes only process_registry_logs = False if process_registry_logs: pprint.pprint(outputs["processes"]) return outputs, responses