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