import logging import pprint from core.runtime.managefailure import manageFailure from core.runtime.stopsignals import checkDependency from core.execution.processregistry import registerProcess #from tqdm import tqdm from rich.progress import track outputs = {} def buildOperation(definition, outputs): from core.execution.executioncontract import executeContract actions = definition.actions outputs = registerProcess(definition, outputs) responses = [] #for action in tqdm( # actions, # desc=definition.name, # unit="action" #): 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 #Print completion status after runtime processes print(f"{action.name} completed") ##Append completed process to process registry outputs["processes"][definition.name]["completed"].append(action.alias) #For debugging purposes only process_registry_logs = False if process_registry_logs: pprint.pprint(outputs["processes"]) #Temporarily disabled manageFailure functions #except Exception as error: #outputs = manageFailure(error, action, outputs) return outputs, responses