From cb3a2d90b09158cacc29e6674b315d35e3cdcfbd Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Wed, 28 Oct 2026 01:24:33 -0400 Subject: [PATCH] Extended positional variables to allow operation information to pass through to signal registry and dependency check at the action level for the new process registry (Working). Introduced track for operation --- core/execution/action/action.py | 5 ++- core/execution/executioncontract.py | 4 +- core/execution/monitor.py | 2 +- core/execution/operation/operation.py | 59 +++++++++++++++++++-------- core/runtime/runtimecontract.py | 4 +- core/runtime/stopsignals.py | 16 ++++---- core/server/createlistener.py | 2 +- trash/lifecyclemanager.py | 4 +- 8 files changed, 60 insertions(+), 36 deletions(-) diff --git a/core/execution/action/action.py b/core/execution/action/action.py index d336b34..c1a1a23 100644 --- a/core/execution/action/action.py +++ b/core/execution/action/action.py @@ -3,9 +3,9 @@ from core.runtime.runtimecontract import buildRuntimeAttr, buildPreRuntimeAttr from core.runtime.stopsignals import addStopSignal -def buildAction (action, outputs): +def buildAction (action, outputs, process): - outputs, resolved, match, filter = buildPreRuntimeAttr(action, outputs) + outputs, resolved, match, filter = buildPreRuntimeAttr(action, outputs, process) if hasattr(action, "allowaction"): if not action.allowaction: @@ -19,6 +19,7 @@ def buildAction (action, outputs): if response is None: return outputs, None + #outputs["processes"][process.name][action.name]["response"] = response outputs, response = buildRuntimeAttr(action, outputs, resolved, response) return outputs, response diff --git a/core/execution/executioncontract.py b/core/execution/executioncontract.py index d3f700f..16aec92 100644 --- a/core/execution/executioncontract.py +++ b/core/execution/executioncontract.py @@ -4,7 +4,7 @@ from core.execution.monitor import buildMonitor from core.runtime import manageFailure from core.execution.recursive import buildRecursive -def executeContract(module, outputs): +def executeContract(module, outputs, process): #print("DEBUGGING") #print(module.name) if module.kind == "operation": @@ -15,7 +15,7 @@ def executeContract(module, outputs): elif module.kind == "action": - outputs, response = buildAction(module, outputs) + outputs, response = buildAction(module, outputs, process) return outputs, response diff --git a/core/execution/monitor.py b/core/execution/monitor.py index a475cee..61bd435 100644 --- a/core/execution/monitor.py +++ b/core/execution/monitor.py @@ -31,7 +31,7 @@ def buildMonitor(monitor, outputs): module = filter["execute"] if module.kind == "action": - outputs, response = buildAction(module, outputs) + outputs, response = buildAction(module, outputs, None) if module.kind == "operation": outputs, responses = buildOperation(module, outputs) response = responses diff --git a/core/execution/operation/operation.py b/core/execution/operation/operation.py index 65e4c98..ae709e4 100644 --- a/core/execution/operation/operation.py +++ b/core/execution/operation/operation.py @@ -1,46 +1,69 @@ import logging +import pprint from core.runtime.managefailure import manageFailure -from core.execution.action.action import buildAction from core.runtime.stopsignals import checkDependency from core.execution.processregistry import registerProcess -#from core.runtime.skipstep import skipStep -#from core.runtime.recursive import recursiveSet +#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 = [] - outputs["stopsignals"] = [] - for action in actions: - #if action.kind == "action": - # outputs["processes"][definition.name][action.name] = {} - stop = checkDependency(action, outputs) - #print(f"STOP SIGNAL DEBUGGING during {action.name}") - #print(outputs["stopsignals"]) + #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: - outputs["processes"][definition.name]["stopsignals"].append(action.alias) continue + #Register action before its execution if action.kind == "action": outputs["processes"][definition.name][action.name] = {} - outputs, response = executeContract(action, outputs) - - #if hasattr(action, recursive) + #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 - - outputs["processes"][definition.name]["completed"].append(action.alias) - #print(outputs["processes"]) + #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) diff --git a/core/runtime/runtimecontract.py b/core/runtime/runtimecontract.py index dc80dae..fe5f8d5 100644 --- a/core/runtime/runtimecontract.py +++ b/core/runtime/runtimecontract.py @@ -7,7 +7,7 @@ from core.runtime.applyconditions import applyConditions from core.runtime.responsepolicy import responsePolicy from core.runtime.stopsignals import addStopSignal -def buildPreRuntimeAttr(action, outputs): +def buildPreRuntimeAttr(action, outputs, process): outputs = loadSave(action, outputs) resolved = resolveItem(action, outputs) @@ -17,7 +17,7 @@ def buildPreRuntimeAttr(action, outputs): match, filter = applyConditions(action, resolved, outputs) if match: - outputs = addStopSignal(action, outputs) + outputs = addStopSignal(action, outputs, process) return outputs, resolved, match, filter diff --git a/core/runtime/stopsignals.py b/core/runtime/stopsignals.py index b0f7dc4..4ad5502 100644 --- a/core/runtime/stopsignals.py +++ b/core/runtime/stopsignals.py @@ -1,9 +1,9 @@ -def checkDependency(action, outputs): -#def checkDependency(action, operation, outputs): +#def checkDependency(action, outputs): +def checkDependency(action, outputs, operation): if hasattr(action, "depends"): stop = any( - #dependency in outputs["processes"][operation.name]["stopsignals"] - dependency in outputs["stopsignals"] + dependency in outputs["processes"][operation.name]["stopsignals"] + #dependency in outputs["stopsignals"] for dependency in action.depends ) @@ -12,9 +12,9 @@ def checkDependency(action, outputs): return False -def addStopSignal(action, outputs): -#def addStopSignal(action, operation, outputs): +#def addStopSignal(action, outputs): +def addStopSignal(action, outputs, operation): if hasattr(action, "depends"): - #outputs["processes"][operation.name]["stopsignals"].append(action.alias) - outputs["stopsignals"].append(action.alias) + outputs["processes"][operation.name]["stopsignals"].append(action.alias) + #outputs["stopsignals"].append(action.alias) return outputs \ No newline at end of file diff --git a/core/server/createlistener.py b/core/server/createlistener.py index 39f1148..0acde01 100644 --- a/core/server/createlistener.py +++ b/core/server/createlistener.py @@ -48,7 +48,7 @@ def buildListener(listener, self): #Process and forward to RMASS #thread, lifecycles = buildThread(listener.execute, lifecycles) - outputs, responses = executeContract(listener.execute, outputs) + outputs, responses = executeContract(listener.execute, outputs, None) diff --git a/trash/lifecyclemanager.py b/trash/lifecyclemanager.py index d956d9e..21054db 100644 --- a/trash/lifecyclemanager.py +++ b/trash/lifecyclemanager.py @@ -11,7 +11,7 @@ def manageLifecycle(module, lifecycles): #lifecycles, state): while lifecycles[module.name]["mode"] == "continuous": print(lifecycles) - outputs = executeContract(module) + outputs = executeContract(module, None, None) #print(lifecycles) @@ -19,7 +19,7 @@ def manageLifecycle(module, lifecycles): #lifecycles, state): elif lifecycles[module.name]["mode"] == "oneshot": print(lifecycles) - outputs = executeContract(module) + outputs = executeContract(module, None, None) #print(lifecycles) return