Skip to content

Commit 4215641

Browse files
committed
Better error messages for UDF from URL loading situations
Based on PR #290, related to Open-EO/openeo-api#515
1 parent 6e422f2 commit 4215641

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

openeo_driver/ProcessGraphDeserializer.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -1853,6 +1853,7 @@ def evaluate_udp(process_id: str, udp: UserDefinedProcessMetadata, args: dict, e
18531853
def evaluate_process_from_url(process_id: str, namespace: str, args: dict, env: EvalEnv):
18541854
if namespace.endswith("/"):
18551855
# Assume namespace is a folder possibly containing multiple processes
1856+
# TODO: these "candidates" are probably not going to be in the spec, so start warning about these? https://github.com/Open-EO/openeo-api/issues/515
18561857
candidates = [
18571858
f"{namespace}{process_id}",
18581859
f"{namespace}{process_id}.json",
@@ -1871,12 +1872,23 @@ def evaluate_process_from_url(process_id: str, namespace: str, args: dict, env:
18711872

18721873
try:
18731874
spec = res.json()
1874-
assert spec["id"].lower() == process_id.lower()
1875+
if spec["id"].lower() != process_id.lower():
1876+
raise OpenEOApiException(
1877+
status_code=400,
1878+
code="ProcessIdMismatch",
1879+
message=f"Mismatch between expected process {process_id!r} and process {spec['id']!r} defined at {candidate!r}.",
1880+
)
18751881
process_graph = spec["process_graph"]
18761882
parameters = spec.get("parameters", [])
1883+
except OpenEOApiException:
1884+
raise
18771885
except Exception as e:
1878-
_log.error(f"Failed to load process {process_id!r} from {candidate!r}", exc_info=True)
1879-
raise ProcessGraphInvalidException() from e
1886+
_log.error(f"Failed to load process {process_id=} from {candidate=}: {e=}", exc_info=True)
1887+
raise OpenEOApiException(
1888+
status_code=400,
1889+
code="ProcessResourceInvalid",
1890+
message=f"Failed to load process {process_id!r} from {candidate!r}: {e!r}",
1891+
) from e
18801892

18811893
return _evaluate_process_graph_process(
18821894
process_id=process_id, process_graph=process_graph, parameters=parameters, args=args, env=env

tests/test_views_execute.py

+17-5
Original file line numberDiff line numberDiff line change
@@ -2739,12 +2739,20 @@ def test_discard_result(api):
27392739
(
27402740
"https://oeo.test/u/42/udp/bbox_mol",
27412741
{"https://oeo.test/u/42/udp/bbox_mol": {"foo": "bar"}},
2742-
(400, "ProcessGraphInvalid", "Invalid process graph specified."),
2743-
),
2744-
(
2742+
(
2743+
400,
2744+
"ProcessResourceInvalid",
2745+
"Failed to load process 'bbox_mol' from 'https://oeo.test/u/42/udp/bbox_mol': KeyError('id')",
2746+
),
2747+
),
2748+
(
27452749
"https://oeo.test/u/42/udp/bbox_mol",
27462750
{"https://oeo.test/u/42/udp/bbox_mol": '{"foo": invalid json'},
2747-
(400, "ProcessGraphInvalid", "Invalid process graph specified."),
2751+
(
2752+
400,
2753+
"ProcessResourceInvalid",
2754+
"Failed to load process 'bbox_mol' from 'https://oeo.test/u/42/udp/bbox_mol': JSONDecodeError",
2755+
),
27482756
),
27492757
(
27502758
"https://share.example/u42/bbox_mol.json",
@@ -2762,7 +2770,11 @@ def test_discard_result(api):
27622770
"pg/1.0/udp/bbox_mol.json", preprocess=lambda t: t.replace("bbox_mol", "BoundingBox-Mol")
27632771
)
27642772
},
2765-
(400, "ProcessGraphInvalid", "Invalid process graph specified."),
2773+
(
2774+
400,
2775+
"ProcessIdMismatch",
2776+
"Mismatch between expected process 'bbox_mol' and process 'BoundingBox-Mol' defined at 'https://share.example/u42/bbox_mol.json'.",
2777+
),
27662778
),
27672779
],
27682780
)

0 commit comments

Comments
 (0)