80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
import logging
|
|
import pprint
|
|
from rich.progress import track
|
|
from rich.console import Console
|
|
|
|
from core.runtime.managefailure import manageFailure
|
|
from core.runtime.stopsignals import checkDependency
|
|
from core.execution.processregistry import registerProcess
|
|
from core.console import console
|
|
|
|
outputs = {}
|
|
|
|
#console = Console(stderr=True)
|
|
|
|
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]",
|
|
console=console
|
|
)
|
|
|
|
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:
|
|
stopsignal_count = len(outputs["processes"][definition.name]["stopsignals"])
|
|
completed_count = len(outputs["processes"][definition.name]["completed"])
|
|
|
|
if completed_count == 1 and stopsignal_count == 1:
|
|
logging.info(f"{definition.name} bypassed")
|
|
else:
|
|
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
|