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]

Reply via email to