From 1a3caa10221f0a9e0ed25c6b67ba83777002e1d3 Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Thu, 29 Oct 2026 15:44:45 -0400 Subject: [PATCH] Udated runtime contract to stop doing unnecessary imports and introduced dedicated process registry. Confirmed working. --- core/execution/operation/operation.py | 33 +++++++++++---------- core/execution/processregistry.py | 20 +++++++------ core/execution/recursive.py | 42 ++++++++++++--------------- core/runtime/runtimecontract.py | 8 ++--- core/runtime/stopsignals.py | 18 +++++++----- 5 files changed, 60 insertions(+), 61 deletions(-) diff --git a/core/execution/operation/operation.py b/core/execution/operation/operation.py index ca48bab..85421fa 100644 --- a/core/execution/operation/operation.py +++ b/core/execution/operation/operation.py @@ -5,7 +5,7 @@ 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.execution import processregistry from core.console import console outputs = {} @@ -16,7 +16,8 @@ def buildOperation(definition, outputs): from core.execution.executioncontract import executeContract actions = definition.actions - registerProcess(definition, outputs) + currentOp = processregistry.registerProcess(definition) + responses = [] if getattr(definition, "track", False): @@ -27,44 +28,44 @@ def buildOperation(definition, outputs): ) for action in actions: + processregistry.registeredOp = currentOp - stop = checkDependency(action, outputs, definition) + stop = checkDependency(action) if stop: continue if action.kind == "action": - outputs["processes"][definition.name][action.name] = {} + currentOp[action.name] = {} - response = executeContract(action, outputs, definition) + response = executeContract(action, outputs) responses.append(response) if action.kind == "action": - outputs["processes"][definition.name][action.name]["response"] = response + currentOp[action.name]["response"] = response - ##Append completed process to process registry - outputs["processes"][definition.name]["completed"].append(action.alias) + if action.alias in currentOp["stopsignals"]: + continue + currentOp["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"]) + completed_count = len(currentOp["completed"]) - if completed_count == 1 and stopsignal_count == 1: + if completed_count == 0: 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"]) - - + import pprint + pprint.pprint(processregistry.processes) return responses diff --git a/core/execution/processregistry.py b/core/execution/processregistry.py index 4558654..d663d83 100644 --- a/core/execution/processregistry.py +++ b/core/execution/processregistry.py @@ -1,12 +1,14 @@ -def registerProcess(module, outputs): - if not "processes" in outputs: - outputs["processes"] = {} +processes = {} +registeredOp = {} - if not module.name in outputs["processes"]: - outputs["processes"][module.name] = {} +def registerProcess(module): + global registeredOp - #outputs["processes"][module.name] = {} - outputs["processes"][module.name]["stopsignals"] = [] - outputs["processes"][module.name]["completed"] = [] + processes[module.name] = {} - return \ No newline at end of file + registeredOp = processes[module.name] + + processes[module.name]["stopsignals"] = [] + processes[module.name]["completed"] = [] + + return registeredOp \ No newline at end of file diff --git a/core/execution/recursive.py b/core/execution/recursive.py index cd2b7b5..141d7b1 100644 --- a/core/execution/recursive.py +++ b/core/execution/recursive.py @@ -2,7 +2,7 @@ import logging import os from core.runtime.stopsignals import checkDependency -from core.execution.processregistry import registerProcess +from core.execution import processregistry from rich.progress import track from core.console import console @@ -10,8 +10,6 @@ def buildRecursive(definition, outputs): process_log = True recursive_log = os.environ.get("LOGS_RECURSIVE", "false").lower() == "true" - #print(outputs[definition.recursiveset["source"]]) - source = outputs.get(definition.recursiveset["source"]) if source is None or source == []: @@ -19,7 +17,7 @@ def buildRecursive(definition, outputs): logging.debug(f"No items available in {source} for {definition.name}") return outputs, [] - registerProcess(definition, outputs) + currentOp = processregistry.registerProcess(definition) responses = [] from core.execution.executioncontract import executeContract @@ -32,7 +30,6 @@ def buildRecursive(definition, outputs): reverse = definition.recursiveset.get("reverse", False) if reverse: - #print("reversing") items = reversed(items) for item in track( @@ -46,37 +43,28 @@ def buildRecursive(definition, outputs): outputs["stopsignals"] = [] for job in recursiveset: + processregistry.registeredOp = currentOp - stop = checkDependency(job, outputs, definition) - - #print(f"STOP SIGNAL DEBUGGING during {job.name}") - #print(outputs["stopsignals"]) - #print(stop) + stop = checkDependency(job) if stop: - #outputs["processes"][definition.name]["stopsignals"].append(job.alias) - #print("STOP SIGNAL DETECTED") - #print(f"Stopping {job.name} due to stop signal") continue - #print(f"RECURSIVE DEBUG DURING {job.name}") - #print(item) - #outputs, response = buildAction(job, outputs) if job.kind == "action": - outputs["processes"][definition.name][job.name] = {} + currentOp[job.name] = {} - response = executeContract(job, outputs, definition) + response = executeContract(job, outputs) responses.append(response) - if job.kind == "action": - outputs["processes"][definition.name][job.name]["response"] = response - outputs["processes"][definition.name]["completed"].append(job.alias) + if job.kind == "action": + currentOp[job.name]["response"] = response + + currentOp["completed"].append(job.alias) if process_log: - stopsignal_count = len(outputs["processes"][definition.name]["stopsignals"]) - completed_count = len(outputs["processes"][definition.name]["completed"]) + completed_count = len(currentOp["completed"]) - if completed_count == 1 and stopsignal_count == 1: + if completed_count == 0: logging.info(f"{definition.name} bypassed") else: logging.info(f"{definition.name} completed") @@ -88,4 +76,10 @@ def buildRecursive(definition, outputs): outputs.pop("stopsignals", None) + process_registry_logs = False + + if process_registry_logs: + import pprint + pprint.pprint(processregistry.processes) + return responses diff --git a/core/runtime/runtimecontract.py b/core/runtime/runtimecontract.py index efccc4c..d78ce96 100644 --- a/core/runtime/runtimecontract.py +++ b/core/runtime/runtimecontract.py @@ -2,7 +2,7 @@ import logging from core.runtime.stopsignals import addStopSignal -def buildPreRuntimeAttr(action, outputs, process): +def buildPreRuntimeAttr(action, outputs): from core.runtime import loadSave, readRow from core.runtime.applyconditions import applyConditions from core.runtime.resolver import resolveItem @@ -17,12 +17,12 @@ def buildPreRuntimeAttr(action, outputs, process): if match: logging.info(filter.get("print")) - addStopSignal(action, outputs, process) + addStopSignal(action) return resolved, match, filter -def buildRuntimeAttr(action, outputs, resolved, response, process): +def buildRuntimeAttr(action, outputs, resolved, response): from core.runtime.resolver import extractItem from core.runtime.responsepolicy import responsePolicy from core.runtime.image import buildImage @@ -33,7 +33,7 @@ def buildRuntimeAttr(action, outputs, resolved, response, process): buildOutput(response, action, outputs) if not response.ok: - addStopSignal(action, outputs, process) + addStopSignal(action) return outputs, response extractItem(action, outputs, resolved) diff --git a/core/runtime/stopsignals.py b/core/runtime/stopsignals.py index 37d501e..e7ef5ae 100644 --- a/core/runtime/stopsignals.py +++ b/core/runtime/stopsignals.py @@ -1,9 +1,10 @@ -#def checkDependency(action, outputs): -def checkDependency(action, outputs, operation): +#from core.execution.processregistry import registeredOp + +def checkDependency(action): + from core.execution.processregistry import registeredOp if hasattr(action, "depends"): stop = any( - dependency in outputs["processes"][operation.name]["stopsignals"] - #dependency in outputs["stopsignals"] + dependency in registeredOp["stopsignals"] for dependency in action.depends ) @@ -12,9 +13,10 @@ def checkDependency(action, outputs, operation): return False -#def addStopSignal(action, outputs): -def addStopSignal(action, outputs, operation): +def addStopSignal(action): + from core.execution.processregistry import registeredOp + if hasattr(action, "depends"): - outputs["processes"][operation.name]["stopsignals"].append(action.alias) - #outputs["stopsignals"].append(action.alias) + + registeredOp["stopsignals"].append(action.alias) return \ No newline at end of file