Udated runtime contract to stop doing unnecessary imports and introduced dedicated process registry. Confirmed working.

This commit is contained in:
Lyncoln
2026-10-29 15:44:45 -04:00
parent c66d139cca
commit 1a3caa1022
5 changed files with 60 additions and 61 deletions
+17 -16
View File
@@ -5,7 +5,7 @@ from rich.console import Console
from core.runtime.managefailure import manageFailure from core.runtime.managefailure import manageFailure
from core.runtime.stopsignals import checkDependency from core.runtime.stopsignals import checkDependency
from core.execution.processregistry import registerProcess from core.execution import processregistry
from core.console import console from core.console import console
outputs = {} outputs = {}
@@ -16,7 +16,8 @@ def buildOperation(definition, outputs):
from core.execution.executioncontract import executeContract from core.execution.executioncontract import executeContract
actions = definition.actions actions = definition.actions
registerProcess(definition, outputs) currentOp = processregistry.registerProcess(definition)
responses = [] responses = []
if getattr(definition, "track", False): if getattr(definition, "track", False):
@@ -27,44 +28,44 @@ def buildOperation(definition, outputs):
) )
for action in actions: for action in actions:
processregistry.registeredOp = currentOp
stop = checkDependency(action, outputs, definition) stop = checkDependency(action)
if stop: if stop:
continue continue
if action.kind == "action": 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) responses.append(response)
if action.kind == "action": if action.kind == "action":
outputs["processes"][definition.name][action.name]["response"] = response currentOp[action.name]["response"] = response
##Append completed process to process registry if action.alias in currentOp["stopsignals"]:
outputs["processes"][definition.name]["completed"].append(action.alias) continue
currentOp["completed"].append(action.alias)
#Temporarily disabled manageFailure functions #Temporarily disabled manageFailure functions
#except Exception as error: #except Exception as error:
#outputs = manageFailure(error, action, outputs) #outputs = manageFailure(error, action, outputs)
#Print completion status after runtime processes
if process_log: if process_log:
stopsignal_count = len(outputs["processes"][definition.name]["stopsignals"]) completed_count = len(currentOp["completed"])
completed_count = len(outputs["processes"][definition.name]["completed"])
if completed_count == 1 and stopsignal_count == 1: if completed_count == 0:
logging.info(f"{definition.name} bypassed") logging.info(f"{definition.name} bypassed")
else: else:
logging.info(f"{definition.name} completed") logging.info(f"{definition.name} completed")
#For debugging purposes only
process_registry_logs = False process_registry_logs = False
if process_registry_logs: if process_registry_logs:
pprint.pprint(outputs["processes"]) import pprint
pprint.pprint(processregistry.processes)
return responses return responses
+11 -9
View File
@@ -1,12 +1,14 @@
def registerProcess(module, outputs): processes = {}
if not "processes" in outputs: registeredOp = {}
outputs["processes"] = {}
if not module.name in outputs["processes"]: def registerProcess(module):
outputs["processes"][module.name] = {} global registeredOp
#outputs["processes"][module.name] = {} processes[module.name] = {}
outputs["processes"][module.name]["stopsignals"] = []
outputs["processes"][module.name]["completed"] = []
return registeredOp = processes[module.name]
processes[module.name]["stopsignals"] = []
processes[module.name]["completed"] = []
return registeredOp
+18 -24
View File
@@ -2,7 +2,7 @@ import logging
import os import os
from core.runtime.stopsignals import checkDependency from core.runtime.stopsignals import checkDependency
from core.execution.processregistry import registerProcess from core.execution import processregistry
from rich.progress import track from rich.progress import track
from core.console import console from core.console import console
@@ -10,8 +10,6 @@ def buildRecursive(definition, outputs):
process_log = True process_log = True
recursive_log = os.environ.get("LOGS_RECURSIVE", "false").lower() == "true" recursive_log = os.environ.get("LOGS_RECURSIVE", "false").lower() == "true"
#print(outputs[definition.recursiveset["source"]])
source = outputs.get(definition.recursiveset["source"]) source = outputs.get(definition.recursiveset["source"])
if source is None or 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}") logging.debug(f"No items available in {source} for {definition.name}")
return outputs, [] return outputs, []
registerProcess(definition, outputs) currentOp = processregistry.registerProcess(definition)
responses = [] responses = []
from core.execution.executioncontract import executeContract from core.execution.executioncontract import executeContract
@@ -32,7 +30,6 @@ def buildRecursive(definition, outputs):
reverse = definition.recursiveset.get("reverse", False) reverse = definition.recursiveset.get("reverse", False)
if reverse: if reverse:
#print("reversing")
items = reversed(items) items = reversed(items)
for item in track( for item in track(
@@ -46,37 +43,28 @@ def buildRecursive(definition, outputs):
outputs["stopsignals"] = [] outputs["stopsignals"] = []
for job in recursiveset: for job in recursiveset:
processregistry.registeredOp = currentOp
stop = checkDependency(job, outputs, definition) stop = checkDependency(job)
#print(f"STOP SIGNAL DEBUGGING during {job.name}")
#print(outputs["stopsignals"])
#print(stop)
if stop: if stop:
#outputs["processes"][definition.name]["stopsignals"].append(job.alias)
#print("STOP SIGNAL DETECTED")
#print(f"Stopping {job.name} due to stop signal")
continue continue
#print(f"RECURSIVE DEBUG DURING {job.name}")
#print(item)
#outputs, response = buildAction(job, outputs)
if job.kind == "action": 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) 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: if process_log:
stopsignal_count = len(outputs["processes"][definition.name]["stopsignals"]) completed_count = len(currentOp["completed"])
completed_count = len(outputs["processes"][definition.name]["completed"])
if completed_count == 1 and stopsignal_count == 1: if completed_count == 0:
logging.info(f"{definition.name} bypassed") logging.info(f"{definition.name} bypassed")
else: else:
logging.info(f"{definition.name} completed") logging.info(f"{definition.name} completed")
@@ -88,4 +76,10 @@ def buildRecursive(definition, outputs):
outputs.pop("stopsignals", None) outputs.pop("stopsignals", None)
process_registry_logs = False
if process_registry_logs:
import pprint
pprint.pprint(processregistry.processes)
return responses return responses
+4 -4
View File
@@ -2,7 +2,7 @@ import logging
from core.runtime.stopsignals import addStopSignal from core.runtime.stopsignals import addStopSignal
def buildPreRuntimeAttr(action, outputs, process): def buildPreRuntimeAttr(action, outputs):
from core.runtime import loadSave, readRow from core.runtime import loadSave, readRow
from core.runtime.applyconditions import applyConditions from core.runtime.applyconditions import applyConditions
from core.runtime.resolver import resolveItem from core.runtime.resolver import resolveItem
@@ -17,12 +17,12 @@ def buildPreRuntimeAttr(action, outputs, process):
if match: if match:
logging.info(filter.get("print")) logging.info(filter.get("print"))
addStopSignal(action, outputs, process) addStopSignal(action)
return resolved, match, filter 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.resolver import extractItem
from core.runtime.responsepolicy import responsePolicy from core.runtime.responsepolicy import responsePolicy
from core.runtime.image import buildImage from core.runtime.image import buildImage
@@ -33,7 +33,7 @@ def buildRuntimeAttr(action, outputs, resolved, response, process):
buildOutput(response, action, outputs) buildOutput(response, action, outputs)
if not response.ok: if not response.ok:
addStopSignal(action, outputs, process) addStopSignal(action)
return outputs, response return outputs, response
extractItem(action, outputs, resolved) extractItem(action, outputs, resolved)
+10 -8
View File
@@ -1,9 +1,10 @@
#def checkDependency(action, outputs): #from core.execution.processregistry import registeredOp
def checkDependency(action, outputs, operation):
def checkDependency(action):
from core.execution.processregistry import registeredOp
if hasattr(action, "depends"): if hasattr(action, "depends"):
stop = any( stop = any(
dependency in outputs["processes"][operation.name]["stopsignals"] dependency in registeredOp["stopsignals"]
#dependency in outputs["stopsignals"]
for dependency in action.depends for dependency in action.depends
) )
@@ -12,9 +13,10 @@ def checkDependency(action, outputs, operation):
return False return False
#def addStopSignal(action, outputs): def addStopSignal(action):
def addStopSignal(action, outputs, operation): from core.execution.processregistry import registeredOp
if hasattr(action, "depends"): if hasattr(action, "depends"):
outputs["processes"][operation.name]["stopsignals"].append(action.alias)
#outputs["stopsignals"].append(action.alias) registeredOp["stopsignals"].append(action.alias)
return return