Created the canonical recursive execution handler buildRecursive that now lives in the execution layer instead of the runtime. the previous recursive handlers are depreciated

This commit is contained in:
Lyncoln
2026-10-24 10:00:13 -04:00
parent 2140468030
commit 59894cfb2c
10 changed files with 135 additions and 57 deletions
+23 -23
View File
@@ -4,34 +4,34 @@ from core.runtime.runtimecontract import buildRuntimeAttr, buildPreRuntimeAttr
def buildAction (action, outputs): def buildAction (action, outputs):
if hasattr(action, "recursive"): #if hasattr(action, "recursive"):
recursiveresponses = [] # recursiveresponses = []
items = outputs[action.recursive["source"]] # items = outputs[action.recursive["source"]]
reverse = action.recursive.get("reverse", False) # reverse = action.recursive.get("reverse", False)
#
if reverse: # if reverse:
items = reversed(items) # items = reversed(items)
for item in items: # for item in items:
outputs[action.recursive["label"]] = item # outputs[action.recursive["label"]] = item
outputs, resolved, match, filter = buildPreRuntimeAttr(action, outputs) # outputs, resolved, match, filter = buildPreRuntimeAttr(action, outputs)
if match: # if match:
continue # continue
response, outputs = executeRequest(action, outputs, resolved) # response, outputs = executeRequest(action, outputs, resolved)
recursiveresponses.append(response) # recursiveresponses.append(response)
outputs, response = buildRuntimeAttr(action, outputs, resolved, response) # outputs, response = buildRuntimeAttr(action, outputs, resolved, response)
return outputs, recursiveresponses # return outputs, recursiveresponses
else: #else:
outputs, resolved, match, filter = buildPreRuntimeAttr(action, outputs) outputs, resolved, match, filter = buildPreRuntimeAttr(action, outputs)
if match: if match:
return outputs, resolved return outputs, resolved
response, outputs = executeRequest(action, outputs, resolved) response, outputs = executeRequest(action, outputs, resolved)
outputs, response = buildRuntimeAttr(action, outputs, resolved, response) outputs, response = buildRuntimeAttr(action, outputs, resolved, response)
return outputs, response return outputs, response
+8 -1
View File
@@ -2,9 +2,11 @@ from core.execution.action import buildAction
from core.execution.operation import buildOperation from core.execution.operation import buildOperation
from core.execution.monitor import buildMonitor from core.execution.monitor import buildMonitor
from core.runtime import manageFailure from core.runtime import manageFailure
from core.execution.recursive import buildRecursive
def executeContract(module, outputs): def executeContract(module, outputs):
#print("DEBUGGING")
#print(module.name)
if module.kind == "operation": if module.kind == "operation":
outputs, responses = buildOperation(module, outputs) outputs, responses = buildOperation(module, outputs)
@@ -22,5 +24,10 @@ def executeContract(module, outputs):
return outputs, response return outputs, response
elif module.kind == "recursiveset":
outputs, response = buildRecursive(module, outputs)
return outputs, response
#except Exception as error: #except Exception as error:
#outputs = manageFailure(error, module) #outputs = manageFailure(error, module)
+13 -7
View File
@@ -1,23 +1,29 @@
import logging import logging
from core.runtime.managefailure import manageFailure from core.runtime.managefailure import manageFailure
from core.execution.action.action import buildAction from core.execution.action.action import buildAction
from core.runtime.skipstep import skipStep #from core.runtime.skipstep import skipStep
from core.runtime.recursive import recursiveSet #from core.runtime.recursive import recursiveSet
outputs = {} outputs = {}
def buildOperation(definition, outputs): def buildOperation(definition, outputs):
from core.execution.executioncontract import executeContract
actions = definition.actions actions = definition.actions
responses = [] responses = []
for action in actions: for action in actions:
if action == "recursiveset": #if action == "recursiveset":
outputs, responses = recursiveSet(definition, outputs, responses) #if hasattr(action, "recursiveset"):
# from core.runtime.recursive import recursiveSet
# outputs, responses = recursiveSet(action, outputs, responses)
else: #else:
outputs, response = buildAction(action, outputs) #outputs, response = buildAction(action, outputs)
outputs, response = executeContract(action, outputs)
#if hasattr(action, recursive)
responses.append(response) responses.append(response)
#except Exception as error: #except Exception as error:
+45
View File
@@ -0,0 +1,45 @@
from core.execution.action.action import buildAction
from core.runtime.runtimecontract import buildPreRuntimeAttr, buildRuntimeAttr
from core.apirequest import executeRequest
#def recursiveSet(definition, outputs, responses):
# from core.execution.executioncontract import executeContract
# recursiveset = definition.recursiveset["actions"]
# for item in outputs[definition.recursiveset["source"]]:
# outputs[definition.recursiveset["outputlabel"]] = item
#
# for job in recursiveset:
# #outputs, response = buildAction(job, outputs)
# outputs, response = executeContract(job, outputs)
# responses.append(response)
#
# return outputs, responses
def buildRecursive(definition, outputs):
responses = []
from core.execution.executioncontract import executeContract
recursiveset = definition.recursiveset["actions"]
source = definition.recursiveset["source"]
items = outputs.get(source)
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
for job in recursiveset:
#outputs, response = buildAction(job, outputs)
outputs, response = executeContract(job, outputs)
responses.append(response)
return outputs, responses
@@ -1,14 +1,17 @@
from core.execution.action.action import buildAction from core.execution.action.action import buildAction
from core.runtime.runtimecontract import buildPreRuntimeAttr, buildRuntimeAttr from core.runtime.runtimecontract import buildPreRuntimeAttr, buildRuntimeAttr
from core.apirequest import executeRequest from core.apirequest import executeRequest
#from core.execution.executioncontract import executeContract
def recursiveSet(definition, outputs, responses): def recursiveSet(definition, outputs, responses):
from core.execution.executioncontract import executeContract
recursiveset = definition.recursiveset["actions"] recursiveset = definition.recursiveset["actions"]
for item in outputs[definition.recursiveset["source"]]: for item in outputs[definition.recursiveset["source"]]:
outputs[definition.recursiveset["outputlabel"]] = item outputs[definition.recursiveset["outputlabel"]] = item
for job in recursiveset: for job in recursiveset:
outputs, response = buildAction(job, outputs) #outputs, response = buildAction(job, outputs)
outputs, response = executeContract(job, outputs)
responses.append(response) responses.append(response)
return outputs, responses return outputs, responses
+2 -1
View File
@@ -2,6 +2,7 @@ import json
from core.runtime.outputs import buildOutput from core.runtime.outputs import buildOutput
from core.runtime.applyconditions import applyConditions from core.runtime.applyconditions import applyConditions
from core.execution.operation import buildOperation from core.execution.operation import buildOperation
from core.execution.executioncontract import executeContract
def buildListener(listener, self): def buildListener(listener, self):
@@ -39,7 +40,7 @@ def buildListener(listener, self):
print(item) print(item)
#Process and forward to RMASS #Process and forward to RMASS
outputs, responses = buildOperation(listener.execute, outputs) outputs, responses = executeContract(listener.execute, outputs)
continue continue
+5 -5
View File
@@ -6,11 +6,11 @@ kind = "action"
showstatus = True showstatus = True
recursive = { #recursive = {
"source": "getmessage_select", # "source": "getmessage_select",
"reverse": True, # "reverse": True,
"label": "messageitem", # "label": "messageitem",
} #}
resolve = { resolve = {
"get": { "get": {
+21 -19
View File
@@ -1,4 +1,6 @@
from plugins.rmass.actions import pullmessagelist, refresh_tokens, getmessage, synapseregister, synapseassignusername, getrmassuseravatar, rmassavatartosynapse, synapseassignavatar, synapsecreatespace, synapsegetspaceid, synapsecreatedmroom, synapseassigndmavatar, synapsegetroomid, synapseassignspace, synapsepushmessages from plugins.rmass.actions import pullmessagelist, refresh_tokens, getmessage, synapseregister, synapseassignusername, getrmassuseravatar, rmassavatartosynapse, synapseassignavatar, synapsecreatespace, synapsegetspaceid, synapsecreatedmroom, synapseassigndmavatar, synapsegetroomid, synapseassignspace#, synapsepushmessages
from plugins.rmass.operations import getrmassconversations, synapsepushmessages
name = "Get Message List" name = "Get Message List"
@@ -7,26 +9,26 @@ kind = "operation"
actions = [ actions = [
refresh_tokens, refresh_tokens,
pullmessagelist, pullmessagelist,
#Recursiveset is used to reference a nested operation inside an operation whose actions are listed in the recursiveset action list getrmassconversations,
"recursiveset", synapsepushmessages,
] ]
recursiveset = { #recursiveset = {
"source": "pullmessages_select", # "source": "pullmessages_select",
"outputlabel": "messageheaders", # "outputlabel": "messageheaders",
"actions": [ # "actions": [
synapseregister, # synapseregister,
synapseassignusername, # synapseassignusername,
getrmassuseravatar, # getrmassuseravatar,
rmassavatartosynapse, # rmassavatartosynapse,
synapseassignavatar, # synapseassignavatar,
getmessage, # getmessage,
#synapsecreatespace, #synapsecreatespace,
#synapsegetspaceid, #synapsegetspaceid,
synapsecreatedmroom, # synapsecreatedmroom,
synapsegetroomid, # synapsegetroomid,
synapseassigndmavatar, # synapseassigndmavatar,
#synapseassignspace, #synapseassignspace,
synapsepushmessages, # synapsepushmessages,
], # ],
} #}
@@ -0,0 +1,14 @@
from plugins.rmass.actions import synapsepushmessages
kind = "recursiveset"
name = "Synapse Message Push Recursive Set"
recursiveset = {
"source": "getmessage_select",
"reverse": True,
"outputlabel": "messageitem",
"actions": [
synapsepushmessages,
],
}