Skip to content

Commit 4b8e3ac

Browse files
soxofaanPeter Van Bouwel
authored and
Peter Van Bouwel
committed
Issue Open-EO#346/Open-EO#347 minor ProcessArgs implementation tweaks
1 parent b6e8937 commit 4b8e3ac

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

openeo_driver/processes.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pathlib import Path
66
from typing import Any, Callable, Collection, Dict, List, Optional, Tuple, Union
77

8+
from openeo_driver.datacube import DriverDataCube
89
from openeo_driver.errors import (
910
OpenEOApiException,
1011
ProcessParameterInvalidException,
@@ -332,6 +333,8 @@ def _check_value(
332333
):
333334
if expected_type:
334335
if not isinstance(value, expected_type):
336+
if expected_type is DriverDataCube:
337+
expected_type = "raster cube"
335338
raise ProcessParameterInvalidException(
336339
parameter=name, process=self.process_id, reason=f"Expected {expected_type} but got {type(value)}."
337340
)
@@ -430,13 +433,19 @@ def get_subset(self, names: List[str], aliases: Optional[Dict[str, str]] = None)
430433
kwargs[key] = self[alias]
431434
return kwargs
432435

433-
def get_enum(self, name: str, options: Collection[ArgumentValue]) -> ArgumentValue:
436+
def get_enum(
437+
self, name: str, options: Collection[ArgumentValue], default: Optional[ArgumentValue] = None
438+
) -> ArgumentValue:
434439
"""
435440
Get argument by name and check if it belongs to given set of (enum) values.
436441
437442
Originally: `extract_arg_enum`
438443
"""
439-
value = self.get_required(name=name)
444+
# TODO: use an "unset" sentinel value instead of None for default?
445+
if default is None:
446+
value = self.get_required(name=name)
447+
else:
448+
value = self.get_optional(name=name, default=default)
440449
if value not in options:
441450
raise ProcessParameterInvalidException(
442451
parameter=name,

tests/test_processes.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ def test_get_required_with_type(self):
458458
with pytest.raises(
459459
ProcessParameterInvalidException,
460460
match=re.escape(
461-
"The value passed for parameter 'color' in process 'wibble' is invalid: Expected <class 'openeo_driver.datacube.DriverDataCube'> but got <class 'str'>."
461+
"The value passed for parameter 'color' in process 'wibble' is invalid: Expected raster cube but got <class 'str'>."
462462
),
463463
):
464464
_ = args.get_required("color", expected_type=DriverDataCube)
@@ -521,7 +521,7 @@ def test_get_optional_with_type(self):
521521
with pytest.raises(
522522
ProcessParameterInvalidException,
523523
match=re.escape(
524-
"The value passed for parameter 'foo' in process 'wibble' is invalid: Expected <class 'openeo_driver.datacube.DriverDataCube'> but got <class 'str'>."
524+
"The value passed for parameter 'foo' in process 'wibble' is invalid: Expected raster cube but got <class 'str'>."
525525
),
526526
):
527527
_ = args.get_optional("foo", expected_type=DriverDataCube)
@@ -615,6 +615,15 @@ def test_get_enum(self):
615615
):
616616
_ = args.get_enum("color", options=["R", "G", "B"])
617617

618+
def test_get_enum_optional(self):
619+
args = ProcessArgs({"size": 3, "color": "red"}, process_id="wibble")
620+
assert args.get_enum("color", options=["red", "green", "blue"], default="green") == "red"
621+
assert args.get_enum("colour", options=["red", "green", "blue"], default="green") == "green"
622+
623+
assert args.get_enum("size", options=[0, 1, 2, 3], default=0) == 3
624+
assert args.get_enum("dim", options=[0, 1, 2, 3], default=0) == 0
625+
assert args.get_enum("dim", options=[0, 1, 2, 3], default=2) == 2
626+
618627
def test_validator_generic(self):
619628
args = ProcessArgs({"size": 11}, process_id="wibble")
620629

0 commit comments

Comments
 (0)