This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 7f7590d951 [Fix #4024] Allowing multiple parameters on python
invocation (#4026)
7f7590d951 is described below
commit 7f7590d951ecc2677085722777312736794ad62c
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Thu Aug 14 20:36:31 2025 +0200
[Fix #4024] Allowing multiple parameters on python invocation (#4026)
In order to specify multiple positional parameters, user should pass an
array.
Note that keyword parameters was already supported
---
.../python/PythonServiceWorkItemHandler.java | 20 +++++++++----
.../src/main/resources/PythonService.sw.json | 34 ++++++++++++++++++++--
.../kie/kogito/quarkus/workflows/PythonFlowIT.java | 4 +--
3 files changed, 48 insertions(+), 10 deletions(-)
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-python-runtime/src/main/java/org/kie/kogito/serverless/workflow/python/PythonServiceWorkItemHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-python-runtime/src/main/java/org/kie/kogito/serverless/workflow/python/PythonServiceWorkItemHandler.java
index f523b538ac..4c6a7e6e1e 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-python-runtime/src/main/java/org/kie/kogito/serverless/workflow/python/PythonServiceWorkItemHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-python-runtime/src/main/java/org/kie/kogito/serverless/workflow/python/PythonServiceWorkItemHandler.java
@@ -18,6 +18,7 @@
*/
package org.kie.kogito.serverless.workflow.python;
+import java.util.Collection;
import java.util.Map;
import org.kie.kogito.jackson.utils.JsonObjectUtils;
@@ -49,12 +50,21 @@ public class PythonServiceWorkItemHandler extends
ServiceWorkItemHandler {
// make sure module is imported
py.exec("import " + moduleName);
final String funcName = moduleName + "." + methodName;
- if (parameters instanceof Map) {
- return py.invoke(funcName, (Map<String, Object>) parameters);
- }
+ Object result;
+
if (parameters instanceof JsonNode) {
- return py.invoke(funcName, JsonObjectUtils.convertValue((JsonNode)
parameters, Map.class));
+ parameters = JsonObjectUtils.toJavaValue((JsonNode) parameters);
+ }
+ if (parameters instanceof Map) {
+ // keyword args call
+ result = py.invoke(funcName, (Map<String, Object>) parameters);
+ } else if (parameters instanceof Collection) {
+ // multiple unnamed parameters call
+ result = py.invoke(funcName, ((Collection) parameters).toArray());
+ } else {
+ //single parameter call
+ result = py.invoke(funcName, parameters);
}
- return py.invoke(funcName, parameters);
+ return result;
}
}
diff --git
a/quarkus/addons/python/integration-tests/src/main/resources/PythonService.sw.json
b/quarkus/addons/python/integration-tests/src/main/resources/PythonService.sw.json
index fc7bc5e4cf..3b88e73dd2 100644
---
a/quarkus/addons/python/integration-tests/src/main/resources/PythonService.sw.json
+++
b/quarkus/addons/python/integration-tests/src/main/resources/PythonService.sw.json
@@ -5,7 +5,17 @@
"name" : "factorial",
"operation" : "service:python:math::factorial",
"type" : "custom"
- } ],
+ },
+ {
+ "name" : "module",
+ "operation" : "service:python:math::fmod",
+ "type" : "custom"
+ },
+ {
+ "name" : "isClose",
+ "operation" : "service:python:math::isclose",
+ "type" : "custom"
+ } ],
"states" : [ {
"actions" : [ {
"functionRef" : {
@@ -13,9 +23,27 @@
"arguments" : ".x"
},
"actionDataFilter" : {
- "toStateData" : ".result"
+ "toStateData" : ".factorial"
}
- } ],
+ },
+ {
+ "functionRef" : {
+ "refName": "module",
+ "arguments" : [".x",".y"]
+ },
+ "actionDataFilter" : {
+ "toStateData" : ".module"
+ }
+ },
+ {
+ "functionRef" : {
+ "refName": "isClose",
+ "arguments" : {"a": ".x", "b":".y", "abs_tol": 2.1}
+ },
+ "actionDataFilter" : {
+ "toStateData" : ".isClose"
+ }
+ }],
"name" : "operation_1",
"type" : "operation",
"end" : true
diff --git
a/quarkus/addons/python/integration-tests/src/test/java/org/kie/kogito/quarkus/workflows/PythonFlowIT.java
b/quarkus/addons/python/integration-tests/src/test/java/org/kie/kogito/quarkus/workflows/PythonFlowIT.java
index 4cde4a2753..795f7db0ac 100644
---
a/quarkus/addons/python/integration-tests/src/test/java/org/kie/kogito/quarkus/workflows/PythonFlowIT.java
+++
b/quarkus/addons/python/integration-tests/src/test/java/org/kie/kogito/quarkus/workflows/PythonFlowIT.java
@@ -40,8 +40,8 @@ class PythonFlowIT {
@Test
void testPythonService() {
-
given().contentType(ContentType.JSON).accept(ContentType.JSON).body("{\"x\" :
5}").post("/Factorial")
- .then().statusCode(201).body("workflowdata.result", is(120));
+
given().contentType(ContentType.JSON).accept(ContentType.JSON).body("{\"x\" :
5, \"y\":3}").post("/Factorial")
+ .then().statusCode(201).body("workflowdata.factorial",
is(120)).body("workflowdata.module", is(2.0f)).body("workflowdata.isClose",
is(true));
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]