Skip to content

Commit 4ee8682

Browse files
committed
saveStitched: handle item instead of file #1111
1 parent 33d626b commit 4ee8682

File tree

2 files changed

+87
-11
lines changed

2 files changed

+87
-11
lines changed

openeogeotrellis/geopysparkdatacube.py

+24-11
Original file line numberDiff line numberDiff line change
@@ -1937,18 +1937,31 @@ def add_gdalinfo_objects(assets_original):
19371937
)
19381938
else:
19391939
_log.info("save_result save_stitched")
1940-
bbox = self._save_stitched(max_level, save_filename, crop_bounds, zlevel=zlevel)
1941-
return add_gdalinfo_objects(
1942-
{
1943-
str(pathlib.Path(filename).name): {
1944-
"href": save_filename,
1945-
"bbox": to_latlng_bbox(bbox),
1946-
"geometry": mapping(Polygon.from_bounds(*to_latlng_bbox(bbox))),
1947-
"type": "image/tiff; application=geotiff",
1948-
"roles": ["data"],
1949-
}
1940+
java_item = self._save_stitched(max_level, save_filename, crop_bounds, zlevel=zlevel)
1941+
1942+
bbox = java_item.bbox()
1943+
assets = {}
1944+
1945+
for asset_key, asset in java_item.assets().items():
1946+
assets[asset_key] = {
1947+
"href": save_filename,
1948+
"bbox": to_latlng_bbox(bbox),
1949+
"geometry": mapping(Polygon.from_bounds(*to_latlng_bbox(bbox))),
1950+
"type": "image/tiff; application=geotiff",
1951+
"roles": ["data"],
19501952
}
1951-
)
1953+
1954+
assets = add_gdalinfo_objects(assets)
1955+
1956+
item = {
1957+
"id": java_item.id(),
1958+
"properties": {"datetime": java_item.datetime()},
1959+
"geometry": mapping(Polygon.from_bounds(*to_latlng_bbox(bbox))),
1960+
"bbox": to_latlng_bbox(bbox),
1961+
"assets": assets,
1962+
}
1963+
1964+
return {java_item.id(): item}
19521965
else:
19531966
_log.info("save_result: saveRDD")
19541967
gtiff_options = get_jvm().org.openeo.geotrellis.geotiff.GTiffOptions()

tests/test_batch_result.py

+63
Original file line numberDiff line numberDiff line change
@@ -2941,3 +2941,66 @@ def test_unified_asset_keys_spatial_geotiff(
29412941
assert job_metadata["end_datetime"] == "2025-04-21T00:00:00Z" # ditto
29422942

29432943
assert set(items[0]["assets"].keys()) == expected_asset_keys
2944+
2945+
2946+
def test_unified_asset_keys_stitch_geotiff(tmp_path):
2947+
process_graph = {
2948+
"load2": {
2949+
"process_id": "load_collection",
2950+
"arguments": {
2951+
"bands": [
2952+
"Flat:0",
2953+
"Flat:1",
2954+
"Flat:2",
2955+
],
2956+
"id": "TestCollection-LonLat16x16",
2957+
"spatial_extent": {
2958+
"west": 0,
2959+
"south": 50,
2960+
"east": 5,
2961+
"north": 55,
2962+
},
2963+
"temporal_extent": ["2025-04-01", "2025-04-21"],
2964+
},
2965+
},
2966+
"save1": {
2967+
"process_id": "save_result",
2968+
"arguments": {
2969+
"data": {"from_node": "load2"},
2970+
"format": "GTIFF",
2971+
"options": {"stitch": True},
2972+
},
2973+
"result": True,
2974+
},
2975+
}
2976+
2977+
process = {
2978+
"process_graph": process_graph,
2979+
}
2980+
2981+
job_dir = tmp_path
2982+
metadata_file = job_dir / "job_metadata.json"
2983+
2984+
run_job(
2985+
process,
2986+
output_file=job_dir / "out",
2987+
metadata_file=metadata_file,
2988+
api_version="2.0.0",
2989+
job_dir=job_dir,
2990+
dependencies=[],
2991+
)
2992+
2993+
assert "out" in os.listdir(job_dir)
2994+
2995+
with open(metadata_file) as f:
2996+
job_metadata = json.load(f)
2997+
2998+
items = job_metadata["items"]
2999+
print(f"items={json.dumps(items, indent=2)}")
3000+
3001+
assert len(items) == 1
3002+
# single item ID can be anything (no spatial or temporal references)
3003+
assert job_metadata["start_datetime"] == "2025-04-01T00:00:00Z" # top-level rather than on Item
3004+
assert job_metadata["end_datetime"] == "2025-04-21T00:00:00Z" # ditto
3005+
3006+
assert set(items[0]["assets"].keys()) == {"openEO"}

0 commit comments

Comments
 (0)