63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from core.execution import action
|
|
from core.execution.action.action import buildAction
|
|
from core.runtime.runtimecontract import buildPreRuntimeAttr, buildRuntimeAttr
|
|
from core.apirequest import executeRequest
|
|
|
|
def buildRecursive(definition, outputs):
|
|
responses = []
|
|
from core.execution.executioncontract import executeContract
|
|
recursiveset = definition.recursiveset["actions"]
|
|
|
|
source = definition.recursiveset["source"]
|
|
|
|
items = outputs.get(source)
|
|
#print(f"RECURSIVE DEBUG DURING {definition.name}")
|
|
#print(items)
|
|
|
|
if items is None:
|
|
print(f"No items available in {source} for {definition.name}")
|
|
return outputs, None
|
|
|
|
reverse = definition.recursiveset.get("reverse", False)
|
|
|
|
if reverse:
|
|
#print("reversing")
|
|
items = reversed(items)
|
|
|
|
for item in items:
|
|
outputs[definition.recursiveset["outputlabel"]] = item
|
|
|
|
outputs["stopsignals"] = []
|
|
for job in recursiveset:
|
|
if hasattr(job, "depends"):
|
|
stop =any(
|
|
dependency in outputs["stopsignals"]
|
|
for dependency in job.depends
|
|
)
|
|
|
|
#print(f"STOP SIGNAL DEBUGGING during {job.name}")
|
|
#print(outputs["stopsignals"])
|
|
#stop = True
|
|
#break
|
|
|
|
if stop:
|
|
#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)
|
|
|
|
outputs, response = executeContract(job, outputs)
|
|
responses.append(response)
|
|
|
|
retain = definition.recursiveset.get("retain", True)
|
|
|
|
if not retain:
|
|
outputs.pop(source, None)
|
|
|
|
outputs.pop("stopsignals", None)
|
|
|
|
return outputs, responses
|