Working resolver integration with buildSelect3 exception

This commit is contained in:
Lyncoln
2026-10-13 15:03:24 -04:00
parent db26a74754
commit a7cd75cc25
22 changed files with 132 additions and 70 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -4,8 +4,8 @@ from .request import buildRequest
session = requests.Session() session = requests.Session()
def executeRequest(action, outputs): def executeRequest(action, outputs, resolved):
request, outputs = buildRequest(action, outputs) request, outputs = buildRequest(action, outputs, resolved)
response = session.request( response = session.request(
method=request["method"], method=request["method"],
+1 -1
View File
@@ -1,4 +1,4 @@
def buildKey(key, outputs): def buildKey(key, outputs, resolved):
value = key["keyvalue"] value = key["keyvalue"]
if isinstance(value, dict) and "output" in value: if isinstance(value, dict) and "output" in value:
+2 -2
View File
@@ -1,11 +1,11 @@
from .key import buildKey from .key import buildKey
def buildObject(keys, outputs): def buildObject(keys, outputs, resolved):
object = {} object = {}
for key in keys: for key in keys:
object.update( object.update(
buildKey(key, outputs), buildKey(key, outputs, resolved),
) )
return object return object
+26 -4
View File
@@ -1,4 +1,4 @@
def buildPath(path, outputs): def buildPath(path, outputs, resolved):
if isinstance(path, str): if isinstance(path, str):
return path return path
@@ -6,9 +6,10 @@ def buildPath(path, outputs):
for part in path: for part in path:
if isinstance(part, dict): if isinstance(part, dict):
value = outputs[part["output"]][part["keys"]] for key, val in part.items():
#value = outputs[part["output"]][part["keys"]]
value = outputs[val]
#print("DEBUG path", value)
#for key in part.get("keys", []): #for key in part.get("keys", []):
#value = value[key] #value = value[key]
@@ -16,5 +17,26 @@ def buildPath(path, outputs):
result += str(value) result += str(value)
else: else:
result += part result += part
#print(result)
return result
def buildPath2(path, outputs, resolved):
if isinstance(path, str):
return path
result = ""
for part in path:
if isinstance(part, dict):
#value = outputs[part["output"]][part["keys"]]
value = outputs["path"]
#print("DEBUG path", value)
#for key in part.get("keys", []):
#value = value[key]
result += str(value)
else:
result += part
#print(result)
return result return result
+3 -3
View File
@@ -1,8 +1,8 @@
from .object import buildObject from .object import buildObject
from .path import buildPath from .path import buildPath
def buildRequest(definition, outputs): def buildRequest(definition, outputs, resolved):
path = buildPath(definition.path, outputs) path = buildPath(definition.path, outputs, resolved)
request = { request = {
"method": definition.method, "method": definition.method,
@@ -10,7 +10,7 @@ def buildRequest(definition, outputs):
} }
if hasattr(definition, "keys"): if hasattr(definition, "keys"):
request["object"] = buildObject(definition.keys, outputs) request["object"] = buildObject(definition.keys, outputs, resolved)
if hasattr(definition, "headers"): if hasattr(definition, "headers"):
headers = {} headers = {}
+9 -2
View File
@@ -3,15 +3,22 @@ from core.runtime.savedata import loadSave, buildSave
from core.runtime.outputs import buildOutput from core.runtime.outputs import buildOutput
from core.runtime.logs import buildLog from core.runtime.logs import buildLog
from core.runtime.runtimecontract import buildRuntimeAttr from core.runtime.runtimecontract import buildRuntimeAttr
from core.runtime.resolver import resolveItem
def buildAction (action, outputs): #resolved ={}
def buildAction (action, outputs):#, resolved):
if hasattr(action, "loaddata"): if hasattr(action, "loaddata"):
outputs = loadSave(outputs, action) outputs = loadSave(outputs, action)
response, outputs = executeRequest(action, outputs) resolved = {}
if hasattr(action, "resolve"):
resolved = resolveItem(action, outputs)
response, outputs = executeRequest(action, outputs, resolved)
#print("DEBUG:", outputs) #print("DEBUG:", outputs)
#print(resolved)
outputs, response = buildRuntimeAttr(action, outputs, response) outputs, response = buildRuntimeAttr(action, outputs, response)
+16 -9
View File
@@ -6,32 +6,39 @@ from core.runtime.outputs import buildOutput
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 .skipstep import skipStep from .skipstep import skipStep
from core.runtime.resolver import resolveItem from core.runtime.resolver import resolveItem2
from core.apirequest import executeRequest
def buildOperation(definition): def buildOperation(definition):
actions = definition.actions actions = definition.actions
#print("DEBUG", actions) #print("DEBUG", actions)
responses = [] responses = []
outputs = {} outputs = {}
#resolved = {}
for action in actions: for action in actions:
#try: #try:
if hasattr(definition, "skipstep"): if hasattr(definition, "skipstep"):
if skipStep(definition, action, outputs): if skipStep(definition, action, outputs):
continue continue
#if hasattr(definition, "resolve"):
#resolved = {}
#if hasattr(action, "resolve"):
#print(outputs)
#resolved = resolveItem(action, outputs)
#print(resolved)
if hasattr(action, "recursive"): if hasattr(action, "recursive"):
outputs[action.recursive["target"]] = {} #outputs[action.recursive["target"]] = {}
for item in outputs[action.recursive["source"]]: for item in outputs[action.recursive["source"]]:
resolved = resolveItem(action, item) outputs = resolveItem2(action, item, outputs)#, resolved)
print("Resolved value:", resolved) #print("Resolved value:", outputs)
#outputs[action.recursive["target"]] = outputs[action.recursive["source"]][][action.recursive["target"]] #outputs[action.recursive["target"]] = outputs[action.recursive["source"]][][action.recursive["target"]]
#print(outputs[action.recursive["target"]]) #print(outputs[action.recursive["target"]])
outputs[action.recursive["target"]] = item outputs[action.recursive["target"]] = item
print(outputs[action.recursive["target"]]) #print(outputs[action.recursive["target"]])
#target = outputs[action.recursive["source"]["target"] #target = outputs[action.recursive["source"]["target"]
outputs, response = buildAction(action, outputs) outputs, response = buildAction(action, outputs)#, resolved)
#print(item) #print(outputs)
#return outputs #return outputs
else: else:
outputs, response = buildAction(action, outputs) outputs, response = buildAction(action, outputs)
@@ -39,5 +46,5 @@ def buildOperation(definition):
#except Exception as error: #except Exception as error:
#outputs = manageFailure(error, action, outputs) #outputs = manageFailure(error, action, outputs)
print(outputs["message"]) #print(outputs["message"])
return outputs return outputs
Binary file not shown.
Binary file not shown.
+28 -1
View File
@@ -2,8 +2,9 @@ def resolveItem(action, item):
resolved = {} resolved = {}
label = action.resolve["label"] label = action.resolve["label"]
targetkeys = action.resolve["targetkeys"] targetkeys = action.resolve["targetkeys"]
#print(item)
target = item target = item
for key in targetkeys: for key in targetkeys:
target = target[key] target = target[key]
@@ -20,3 +21,29 @@ def resolveItem(action, item):
#print(resolved[label]) #print(resolved[label])
return resolved return resolved
def resolveItem2(action, item, outputs):
#resolved = {}
label = action.resolve["label"]
targetkeys = action.resolve["targetkeys"]
#print(item)
target = item
for key in targetkeys:
target = target[key]
#resolved[label] = target
#for label, keys in action.resolve.items():
#target = item
#print(target)
#for key in keys:
#target = target[key]
#resolved[label] = target
#print(resolved[label])
outputs[label] = target
#print("Resolver DEBUG", target, outputs[label])
return outputs
+33
View File
@@ -66,8 +66,41 @@ def buildSelect2(action, outputs):
#select_data.append(item) #select_data.append(item)
def buildSelect3(action, outputs): def buildSelect3(action, outputs):
#print(outputs)
try:
select_data = []
target = outputs[action.select["source"]]
includekey = action.select["include"]["key"]
includevalue = action.select["include"]["value"]
excludekey = action.select["exclude"]["key"]
excludevalue = action.select["exclude"]["value"]
for item in target:
include_match = True
exclude_match = True
if includekey:
include_match = item[includekey] == includevalue
if excludekey:
exclude_match = item[excludekey] != excludevalue
if include_match and exclude_match:
select_data.append(item)
outputs[action.select["source"]] = select_data
print(select_data)
return select_data, action, outputs
except (KeyError, TypeError):
return select_data, action, outputs
def buildSelect4(action, outputs):
#print(outputs) #print(outputs)
select_data = [] select_data = []
target = outputs[action.select["source"]] target = outputs[action.select["source"]]
#selectmethod = action.select["selectmethod"] #selectmethod = action.select["selectmethod"]
includekey = action.select["include"]["key"] includekey = action.select["include"]["key"]
+9 -13
View File
@@ -1,6 +1,5 @@
import os import os
#getoutputs = {"emails": [0, "id"]}
name = "Get message" name = "Get message"
@@ -12,12 +11,6 @@ showstatus = True
method = "GET" method = "GET"
#path = f"https://rentmasseur.com/api/v1/mailbox/{messageid}"
#path = [
# "https://rentmasseur.com/api/v1/mailbox/",
# {"output": "[messageid][0].id"}
#]
resolve = { resolve = {
"targetkeys": ["id"], "targetkeys": ["id"],
"label": "path", "label": "path",
@@ -25,11 +18,12 @@ resolve = {
path = [ path = [
"https://rentmasseur.com/api/v1/mailbox/", "https://rentmasseur.com/api/v1/mailbox/",
{ {"suffix": "path"}
"output": "id", #{
#"keys": [0, "id"] # "output": "id",
"keys": "id" # #"keys": [0, "id"]
} # "keys": "id"
#}
] ]
#path = os.path.join(baseurl.messageid) #path = os.path.join(baseurl.messageid)
@@ -43,12 +37,14 @@ headers = {
recursive = { recursive = {
"source": "emails", "source": "emails",
#Transformation target. dynamic target to be resolved in each iteration
"target": "id" "target": "id"
} }
outputs = { outputs = {
"message": "messages" "message": "messages",
"profile": "profileData",
} }
select = { select = {
-30
View File
@@ -6,33 +6,3 @@ from core.execution.action import buildAction
outputs = buildOperation(rmass.operations.pullmessagelist) outputs = buildOperation(rmass.operations.pullmessagelist)
#print(outputs)
#print(messageid)
#user_list = []
#for item in outputs["message_list"]:
# sender = item["userCard"]
# user_list.append(sender["id"])
#print(user_list)
#conversations = []
#for item in outputs["message_list"]:
# conversation = item["id"]
# conversations.append(conversation)
#print(conversations)
#for messageid in conversations:
#outputs = buildAction(rmass.actions.getmessage, outputs)
#print(outputs)
#for messageid in user_list
#outputs = buildOperation(rmass.operations.getmessage)
#id_list = []
#for user in user_list
# id_list.append
# print
#ime.sleep(rmass.operations.setavailable.sleeptime)
+1 -1
View File
@@ -1 +1 @@
{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTE5MDM5MDEsIm5iZiI6MTc5MTkwMzcyMSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTkwMzc4MX0.dwJ10VfIyUSANbKlG0UqzoRqWfZpU0vdUh44IoEbwKeaNPk6d_J6yvrLQy_uY18IfQR_3t4PEp7Qrwa9Eqtyig", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ0OTU3ODEsIm5iZiI6MTc5MTkwMzcyMSwianRpIjoiK3pMamtvVlhnN1ZhZmd1OGtib21CQkhxR0R5QmZVdVMxeTgzb0NmQWttcz0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTkwMzc4MSwic3ViIjoiMjM4MzAyIn0.q_Bjzys1sCFe29BewT3Ez6cTMvL6vmAwvspSafOmPV980W5Rh2RuytxHnz8JiYj8zGKbi-oM5pNfrOG3gS5Heg"} {"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTE5MTgyMDEsIm5iZiI6MTc5MTkxODAyMSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTkxODA4MX0.Y5Ej40c3Ji_-WLShpJkRSl3wF4XGxrLhE_rYMWxQmeDPHK03mv8bWX_7A7zmjjk3cYrwlBM5odn_eJWSaCI_Lg", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ1MTAwODEsIm5iZiI6MTc5MTkxODAyMSwianRpIjoiQ0NmdW9xTFdsUmZpais1c1VxU2FudFRVb0xZVkd3ZG9NQkRYY1ZnV0pzdz0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTkxODA4MSwic3ViIjoiMjM4MzAyIn0.oWa2PwSyh110MOJ8ypsRCtiXNQWosNv4T_UZ9m0shUjsFTX0Qtr-bSnc7mS8-5TSW-szEnLHT89-T8KzNZApYg"}