from core.execution import action from core.execution.action.action import buildAction from core.runtime.runtimecontract import buildPreRuntimeAttr, buildRuntimeAttr from core.apirequest import executeRequest from core.runtime.stopsignals import checkDependency 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: stop = checkDependency(job, outputs) #print(f"STOP SIGNAL DEBUGGING during {job.name}") #print(outputs["stopsignals"]) #print(stop) 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