Skip to content

Commit 9ccf891

Browse files
committed
Fix #431 fix UDP param conversion issue in run_udf context
1 parent 9cb5376 commit 9ccf891

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1919

2020
### Fixed
2121

22+
- Fixed UDP parameter conversion issue in `build_process_dict` when using parameter in `context` of `run_udf`
23+
[#431](https://github.com/Open-EO/openeo-python-client/issues/431)
24+
2225

2326
## [0.17.0] and [0.17.1] - 2023-05-16
2427

openeo/internal/graph_building.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,8 @@ def _flatten_argument(self, value):
358358
raise ValueError(pg)
359359
else:
360360
value = {k: self._flatten_argument(v) for k, v in value.items()}
361+
elif isinstance(value, Parameter):
362+
value = {"from_parameter": value.name}
361363
return value
362364

363365
def leaveArgument(self, argument_id: str, value):

tests/rest/test_udp.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,3 +460,101 @@ def test_build_process_dict_from_datacube(con100):
460460
"returns": {"schema": {"type": "number"}},
461461
}
462462
assert actual == expected
463+
464+
465+
def test_build_process_dict_udf_context_param_field(con100):
466+
"""https://github.com/Open-EO/openeo-python-client/issues/431"""
467+
udf_param = Parameter.number("udf_param")
468+
cube = con100.datacube_from_process("add", x=3, y=5)
469+
udf = openeo.UDF(code="print(123)", runtime="Python", context={"foo": udf_param})
470+
cube = cube.apply(process=udf)
471+
472+
actual = build_process_dict(
473+
process_graph=cube,
474+
process_id="do_udf",
475+
summary="do_udf value",
476+
description="do_udf",
477+
parameters=[udf_param],
478+
returns={"schema": {"type": "number"}},
479+
)
480+
expected = {
481+
"id": "do_udf",
482+
"description": "do_udf",
483+
"parameters": [{"name": "udf_param", "description": "udf_param", "schema": {"type": "number"}}],
484+
"process_graph": {
485+
"add1": {"arguments": {"x": 3, "y": 5}, "process_id": "add"},
486+
"apply1": {
487+
"arguments": {
488+
"data": {"from_node": "add1"},
489+
"process": {
490+
"process_graph": {
491+
"runudf1": {
492+
"process_id": "run_udf",
493+
"arguments": {
494+
"data": {"from_parameter": "x"},
495+
"udf": "print(123)",
496+
"runtime": "Python",
497+
"context": {"foo": {"from_parameter": "udf_param"}},
498+
},
499+
"result": True,
500+
}
501+
}
502+
},
503+
},
504+
"process_id": "apply",
505+
"result": True,
506+
},
507+
},
508+
"returns": {"schema": {"type": "number"}},
509+
"summary": "do_udf value",
510+
}
511+
assert actual == expected
512+
513+
514+
def test_build_process_dict_udf_context_param_direct(con100):
515+
"""https://github.com/Open-EO/openeo-python-client/issues/431"""
516+
udf_param = Parameter.number("udf_param")
517+
cube = con100.datacube_from_process("add", x=3, y=5)
518+
udf = openeo.UDF(code="print(123)", runtime="Python", context=udf_param)
519+
cube = cube.apply(process=udf)
520+
521+
actual = build_process_dict(
522+
process_graph=cube,
523+
process_id="do_udf",
524+
summary="do_udf value",
525+
description="do_udf",
526+
parameters=[udf_param],
527+
returns={"schema": {"type": "number"}},
528+
)
529+
expected = {
530+
"id": "do_udf",
531+
"description": "do_udf",
532+
"parameters": [{"name": "udf_param", "description": "udf_param", "schema": {"type": "number"}}],
533+
"process_graph": {
534+
"add1": {"arguments": {"x": 3, "y": 5}, "process_id": "add"},
535+
"apply1": {
536+
"arguments": {
537+
"data": {"from_node": "add1"},
538+
"process": {
539+
"process_graph": {
540+
"runudf1": {
541+
"process_id": "run_udf",
542+
"arguments": {
543+
"data": {"from_parameter": "x"},
544+
"udf": "print(123)",
545+
"runtime": "Python",
546+
"context": {"from_parameter": "udf_param"},
547+
},
548+
"result": True,
549+
}
550+
}
551+
},
552+
},
553+
"process_id": "apply",
554+
"result": True,
555+
},
556+
},
557+
"returns": {"schema": {"type": "number"}},
558+
"summary": "do_udf value",
559+
}
560+
assert actual == expected

0 commit comments

Comments
 (0)