Skip to content

Commit

Permalink
Issue#550/#551 fine-tuning: do param sniffing for correct "target" pa…
Browse files Browse the repository at this point in the history
…ram name

Also avoid local import

ref: Open-EO/openeo-python-driver#274
  • Loading branch information
soxofaan committed Mar 18, 2024
1 parent d1c68f8 commit 2eea6dc
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 8 deletions.
27 changes: 21 additions & 6 deletions openeo/rest/vectorcube.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import shapely.geometry.base

import openeo.rest.datacube
from openeo.api.process import Parameter
from openeo.internal.documentation import openeo_process
from openeo.internal.graph_building import PGNode
Expand Down Expand Up @@ -59,7 +60,7 @@ def process(
**kwargs,
) -> VectorCube:
"""
Generic helper to create a new DataCube by applying a process.
Generic helper to create a new VectorCube by applying a process.
:param process_id: process id of the process.
:param args: argument dictionary for the process.
Expand Down Expand Up @@ -559,7 +560,7 @@ def apply_dimension(
)
return self.process(process_id="apply_dimension", arguments=arguments)

def vector_to_raster(self, target_data_cube):
def vector_to_raster(self, target) -> openeo.rest.datacube.DataCube:
"""
Converts this vector cube into a :py:class:`~openeo.rest.datacube.DataCube`.
The bounding polygon of homogenous areas of pixels is constructed.
Expand All @@ -570,7 +571,21 @@ def vector_to_raster(self, target_data_cube):
.. versionadded:: 0.28.0
"""
from openeo.rest.datacube import DataCube

pg_node = PGNode(process_id="vector_to_raster", arguments={"data": self, "target_data_cube": target_data_cube})
return DataCube(pg_node, connection=self._connection, metadata=self.metadata)
# TODO: this parameter sniffing is a temporary workaround until
# the `target` parameter name rename has fully settled
# https://github.com/Open-EO/openeo-python-driver/issues/274
# After that has settled, it is still useful to verify assumptions about this non-standard process.
try:
process_spec = self.connection.describe_process("vector_to_raster")
target_parameter = process_spec["parameters"][1]["name"]
assert "target" in target_parameter
except Exception:
target_parameter = "target"

pg_node = PGNode(
process_id="vector_to_raster",
arguments={"data": self, target_parameter: target},
)
# TODO: the correct metadata has to be passed here:
# replace "geometry" dimension with spatial dimensions of the target cube
return openeo.rest.datacube.DataCube(pg_node, connection=self._connection, metadata=self.metadata)
30 changes: 28 additions & 2 deletions tests/rest/datacube/test_vectorcube.py
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,30 @@ def test_vectorcube_execute_batch_validation(
assert caplog.messages == []


def test_vector_to_raster(s2cube, vector_cube):
@pytest.mark.parametrize(
["target_parameter", "expected_target_parameter"],
[
(None, "target"),
("target_data_cube", "target_data_cube"),
("target", "target"),
],
)
def test_vector_to_raster(s2cube, vector_cube, requests_mock, target_parameter, expected_target_parameter):
if target_parameter:
requests_mock.get(
API_URL + "/processes",
json={
"processes": [
{
"id": "vector_to_raster",
"parameters": [
{"name": "data"},
{"name": target_parameter},
],
}
]
},
)
raster_cube = vector_cube.vector_to_raster(s2cube)
assert raster_cube.flat_graph() == {
"loadgeojson1": {
Expand All @@ -659,7 +682,10 @@ def test_vector_to_raster(s2cube, vector_cube):
},
"vectortoraster1": {
"process_id": "vector_to_raster",
"arguments": {"data": {"from_node": "loadgeojson1"}, "target_data_cube": {"from_node": "loadcollection1"}},
"arguments": {
"data": {"from_node": "loadgeojson1"},
expected_target_parameter: {"from_node": "loadcollection1"},
},
"result": True,
},
}

0 comments on commit 2eea6dc

Please sign in to comment.