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 ) #stop = True #break if stop: 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