Skip to content

Commit 1cd1cd2

Browse files
committed
Issue #678/#682 finetune TestDataCube tests
1 parent 0b486a4 commit 1cd1cd2

File tree

3 files changed

+128
-24
lines changed

3 files changed

+128
-24
lines changed

openeo/rest/datacube.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def load_disk_collection(cls, connection: Connection, file_format: str, glob_pat
282282
def load_stac(
283283
cls,
284284
url: str,
285-
spatial_extent: Union[Dict[str, float], Parameter, None] = None,
285+
spatial_extent: Union[dict, Parameter, shapely.geometry.base.BaseGeometry, str, pathlib.Path, None] = None,
286286
temporal_extent: Union[Sequence[InputDate], Parameter, str, None] = None,
287287
bands: Union[Iterable[str], Parameter, str, None] = None,
288288
properties: Optional[Dict[str, Union[str, PGNode, Callable]]] = None,

tests/rest/datacube/test_datacube.py

Lines changed: 122 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -137,31 +137,70 @@ def test_load_collection_connectionless_temporal_extent_shortcut(self):
137137
}
138138
}
139139

140-
def test_load_collection_connectionless_shapely_spatial_extent(self):
141-
polygon = shapely.geometry.Polygon(((0.0, 1.0), (2.0, 1.0), (3.0, 2.0), (1.5, 0.0), (0.0, 1.0)))
142-
cube = DataCube.load_collection("T3", spatial_extent=polygon)
143-
assert cube.flat_graph() == {
144-
"loadcollection1": {
145-
"arguments": {"id": "T3", "spatial_extent":
146-
{'coordinates': (((0.0,1.0),(2.0,1.0),(3.0,2.0),(1.5,0.0),(0.0,1.0)),),'type': 'Polygon'},
147-
"temporal_extent": None},
148-
"process_id": "load_collection",
149-
"result": True,
150-
}
140+
def test_load_collection_spatial_extent_bbox(self, dummy_backend):
141+
spatial_extent = {"west": 1, "south": 2, "east": 3, "north": 4}
142+
cube = DataCube.load_collection("S2", spatial_extent=spatial_extent, connection=dummy_backend.connection)
143+
cube.execute()
144+
assert dummy_backend.get_sync_pg()["loadcollection1"]["arguments"] == {
145+
"id": "S2",
146+
"spatial_extent": {"west": 1, "south": 2, "east": 3, "north": 4},
147+
"temporal_extent": None,
148+
}
149+
150+
def test_load_collection_spatial_extent_shapely(self, dummy_backend):
151+
polygon = shapely.geometry.Polygon([(3, 51), (4, 51), (4, 52), (3, 52)])
152+
cube = DataCube.load_collection("S2", spatial_extent=polygon, connection=dummy_backend.connection)
153+
cube.execute()
154+
assert dummy_backend.get_sync_pg()["loadcollection1"]["arguments"] == {
155+
"id": "S2",
156+
"spatial_extent": {
157+
"type": "Polygon",
158+
"coordinates": [[[3, 51], [4, 51], [4, 52], [3, 52], [3, 51]]],
159+
},
160+
"temporal_extent": None,
151161
}
152162

153163
@pytest.mark.parametrize("path_factory", [str, pathlib.Path])
154-
def test_load_collection_connectionless_local_path_spatial_extent(self, path_factory, test_data):
164+
def test_load_collection_spatial_extent_local_path(self, dummy_backend, path_factory, test_data):
155165
path = path_factory(test_data.get_path("geojson/polygon02.json"))
156-
cube = DataCube.load_collection("T3", spatial_extent=path)
157-
assert cube.flat_graph() == {
166+
cube = DataCube.load_collection("S2", spatial_extent=path, connection=dummy_backend.connection)
167+
cube.execute()
168+
assert dummy_backend.get_sync_pg()["loadcollection1"]["arguments"] == {
169+
"id": "S2",
170+
"spatial_extent": {"type": "Polygon", "coordinates": [[[3, 50], [4, 50], [4, 51], [3, 50]]]},
171+
"temporal_extent": None,
172+
}
173+
174+
def test_load_collection_spatial_extent_url(self, dummy_backend):
175+
cube = DataCube.load_collection(
176+
"S2", spatial_extent="https://geo.test/geometry.json", connection=dummy_backend.connection
177+
)
178+
cube.execute()
179+
assert dummy_backend.get_sync_pg() == {
180+
"loadurl1": {
181+
"process_id": "load_url",
182+
"arguments": {"format": "GeoJSON", "url": "https://geo.test/geometry.json"},
183+
},
158184
"loadcollection1": {
159-
"arguments": {"id": "T3", "spatial_extent":
160-
{"type": "Polygon", "coordinates": [[[3, 50], [4, 50], [4, 51], [3, 50]]]},
161-
"temporal_extent": None},
162185
"process_id": "load_collection",
186+
"arguments": {
187+
"id": "S2",
188+
"spatial_extent": {"from_node": "loadurl1"},
189+
"temporal_extent": None,
190+
},
163191
"result": True,
164-
}
192+
},
193+
}
194+
195+
def test_load_collection_spatial_extent_parameter(self, dummy_backend):
196+
cube = DataCube.load_collection(
197+
"S2", spatial_extent=Parameter.geojson("zpatial_extent"), connection=dummy_backend.connection
198+
)
199+
cube.execute()
200+
assert dummy_backend.get_sync_pg()["loadcollection1"]["arguments"] == {
201+
"id": "S2",
202+
"spatial_extent": {"from_parameter": "zpatial_extent"},
203+
"temporal_extent": None,
165204
}
166205

167206
def test_load_collection_connectionless_save_result(self):
@@ -206,6 +245,71 @@ def test_load_stac_connectionless_save_result(self):
206245
},
207246
}
208247

248+
def test_load_stac_spatial_extent_bbox(self, dummy_backend):
249+
spatial_extent = {"west": 1, "south": 2, "east": 3, "north": 4}
250+
cube = DataCube.load_stac(
251+
"https://stac.test/data", spatial_extent=spatial_extent, connection=dummy_backend.connection
252+
)
253+
cube.execute()
254+
assert dummy_backend.get_sync_pg()["loadstac1"]["arguments"] == {
255+
"url": "https://stac.test/data",
256+
"spatial_extent": {"west": 1, "south": 2, "east": 3, "north": 4},
257+
}
258+
259+
def test_load_stac_spatial_extent_shapely(self, dummy_backend):
260+
polygon = shapely.geometry.Polygon([(3, 51), (4, 51), (4, 52), (3, 52)])
261+
cube = DataCube.load_stac("https://stac.test/data", spatial_extent=polygon, connection=dummy_backend.connection)
262+
cube.execute()
263+
assert dummy_backend.get_sync_pg()["loadstac1"]["arguments"] == {
264+
"url": "https://stac.test/data",
265+
"spatial_extent": {
266+
"type": "Polygon",
267+
"coordinates": [[[3, 51], [4, 51], [4, 52], [3, 52], [3, 51]]],
268+
},
269+
}
270+
271+
@pytest.mark.parametrize("path_factory", [str, pathlib.Path])
272+
def test_load_stac_spatial_extent_local_path(self, dummy_backend, path_factory, test_data):
273+
path = path_factory(test_data.get_path("geojson/polygon02.json"))
274+
cube = DataCube.load_stac("https://stac.test/data", spatial_extent=path, connection=dummy_backend.connection)
275+
cube.execute()
276+
assert dummy_backend.get_sync_pg()["loadstac1"]["arguments"] == {
277+
"url": "https://stac.test/data",
278+
"spatial_extent": {"type": "Polygon", "coordinates": [[[3, 50], [4, 50], [4, 51], [3, 50]]]},
279+
}
280+
281+
def test_load_stac_spatial_extent_url(self, dummy_backend):
282+
cube = DataCube.load_stac(
283+
"https://stac.test/data",
284+
spatial_extent="https://geo.test/geometry.json",
285+
connection=dummy_backend.connection,
286+
)
287+
cube.execute()
288+
assert dummy_backend.get_sync_pg() == {
289+
"loadurl1": {
290+
"process_id": "load_url",
291+
"arguments": {"format": "GeoJSON", "url": "https://geo.test/geometry.json"},
292+
},
293+
"loadstac1": {
294+
"process_id": "load_stac",
295+
"arguments": {
296+
"url": "https://stac.test/data",
297+
"spatial_extent": {"from_node": "loadurl1"},
298+
},
299+
"result": True,
300+
},
301+
}
302+
303+
def test_load_stac_spatial_extent_parameter(self, dummy_backend):
304+
spatial_extent = Parameter.geojson("zpatial_extent")
305+
cube = DataCube.load_stac(
306+
"https://stac.test/data", spatial_extent=spatial_extent, connection=dummy_backend.connection
307+
)
308+
cube.execute()
309+
assert dummy_backend.get_sync_pg()["loadstac1"]["arguments"] == {
310+
"url": "https://stac.test/data",
311+
"spatial_extent": {"from_parameter": "zpatial_extent"},
312+
}
209313

210314
def test_filter_temporal_basic_positional_args(s2cube):
211315
im = s2cube.filter_temporal("2016-01-01", "2016-03-10")

tests/rest/test_connection.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2460,7 +2460,7 @@ def test_load_collection_spatial_extent_bbox(self, dummy_backend):
24602460
cube.execute()
24612461
assert dummy_backend.get_sync_pg()["loadcollection1"]["arguments"] == {
24622462
"id": "S2",
2463-
"spatial_extent": {"east": 3, "north": 4, "south": 2, "west": 1},
2463+
"spatial_extent": {"west": 1, "south": 2, "east": 3, "north": 4},
24642464
"temporal_extent": None,
24652465
}
24662466

@@ -2527,7 +2527,7 @@ def test_load_collection_spatial_extent_shapely_wrong_type(self, geojson, dummy_
25272527
],
25282528
)
25292529
@pytest.mark.parametrize("path_factory", [str, Path])
2530-
def test_load_collection_spatial_extent_path(self, geojson, dummy_backend, tmp_path, path_factory):
2530+
def test_load_collection_spatial_extent_local_path(self, geojson, dummy_backend, tmp_path, path_factory):
25312531
path = tmp_path / "geometry.json"
25322532
with path.open("w") as f:
25332533
json.dump(geojson, f)
@@ -2935,8 +2935,8 @@ def test_load_stac_spatial_extent_bbox(self, dummy_backend):
29352935
cube = dummy_backend.connection.load_stac("https://stac.test/data", spatial_extent=spatial_extent)
29362936
cube.execute()
29372937
assert dummy_backend.get_sync_pg()["loadstac1"]["arguments"] == {
2938-
"spatial_extent": {"east": 3, "north": 4, "south": 2, "west": 1},
29392938
"url": "https://stac.test/data",
2939+
"spatial_extent": {"west": 1, "south": 2, "east": 3, "north": 4},
29402940
}
29412941

29422942
@pytest.mark.parametrize(
@@ -2953,8 +2953,8 @@ def test_load_stac_spatial_extent_geojson(self, dummy_backend, spatial_extent):
29532953
cube = dummy_backend.connection.load_stac("https://stac.test/data", spatial_extent=spatial_extent)
29542954
cube.execute()
29552955
assert dummy_backend.get_sync_pg()["loadstac1"]["arguments"] == {
2956-
"spatial_extent": spatial_extent,
29572956
"url": "https://stac.test/data",
2957+
"spatial_extent": spatial_extent,
29582958
}
29592959

29602960
@pytest.mark.parametrize(
@@ -3008,7 +3008,7 @@ def test_load_stac_spatial_extent_shapely_wront_type(self, dummy_backend, geojso
30083008
],
30093009
)
30103010
@pytest.mark.parametrize("path_factory", [str, Path])
3011-
def test_load_stac_spatial_extent_path(self, geojson, dummy_backend, tmp_path, path_factory):
3011+
def test_load_stac_spatial_extent_local_path(self, geojson, dummy_backend, tmp_path, path_factory):
30123012
path = tmp_path / "geometry.json"
30133013
with path.open("w") as f:
30143014
json.dump(geojson, f)

0 commit comments

Comments
 (0)