Files
rmmanager/core/execution/operation/operation.py
T
2026-10-28 11:18:23 -04:00

70 lines
2.2 KiB
Python

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