UPDATE
This commit is contained in:
@@ -16,6 +16,7 @@ from location_data.openeo_service import (
|
||||
OpenEOExecutionError,
|
||||
_log_raw_payload_summary,
|
||||
_load_first_json_payload,
|
||||
_load_job_result_payload,
|
||||
_resolve_openeo_proxy_url_from_env,
|
||||
_run_aggregate_spatial_job,
|
||||
log_openeo_request_summary,
|
||||
@@ -58,10 +59,10 @@ class OpenEOServiceParsingTests(SimpleTestCase):
|
||||
"cell-2": {"mean": 15.1},
|
||||
}
|
||||
|
||||
result = parse_aggregate_spatial_response(payload, "lst_c")
|
||||
result = parse_aggregate_spatial_response(payload, "ndwi")
|
||||
|
||||
self.assertEqual(result["cell-1"]["lst_c"], 12.4)
|
||||
self.assertEqual(result["cell-2"]["lst_c"], 15.1)
|
||||
self.assertEqual(result["cell-1"]["ndwi"], 12.4)
|
||||
self.assertEqual(result["cell-2"]["ndwi"], 15.1)
|
||||
|
||||
def test_parse_mapping_results_maps_numeric_keys_to_expected_feature_ids(self):
|
||||
payload = {
|
||||
@@ -71,12 +72,12 @@ class OpenEOServiceParsingTests(SimpleTestCase):
|
||||
|
||||
result = parse_aggregate_spatial_response(
|
||||
payload,
|
||||
"lst_c",
|
||||
"ndwi",
|
||||
expected_feature_ids=["cell-1", "cell-2"],
|
||||
)
|
||||
|
||||
self.assertEqual(result["cell-1"]["lst_c"], 12.4)
|
||||
self.assertEqual(result["cell-2"]["lst_c"], 15.1)
|
||||
self.assertEqual(result["cell-1"]["ndwi"], 12.4)
|
||||
self.assertEqual(result["cell-2"]["ndwi"], 15.1)
|
||||
|
||||
def test_parse_list_results_maps_positional_payload_to_expected_feature_ids(self):
|
||||
payload = [{"mean": 0.61}, {"mean": 0.47}]
|
||||
@@ -90,6 +91,18 @@ class OpenEOServiceParsingTests(SimpleTestCase):
|
||||
self.assertEqual(result["cell-1"]["ndvi"], 0.61)
|
||||
self.assertEqual(result["cell-2"]["ndvi"], 0.47)
|
||||
|
||||
def test_parse_list_results_extracts_scalar_from_nested_list_payloads(self):
|
||||
payload = [[0.61], [0.47]]
|
||||
|
||||
result = parse_aggregate_spatial_response(
|
||||
payload,
|
||||
"ndvi",
|
||||
expected_feature_ids=["cell-1", "cell-2"],
|
||||
)
|
||||
|
||||
self.assertEqual(result["cell-1"]["ndvi"], 0.61)
|
||||
self.assertEqual(result["cell-2"]["ndvi"], 0.47)
|
||||
|
||||
def test_log_raw_payload_summary_warns_for_empty_payload(self):
|
||||
with self.assertLogs("location_data.openeo_service", level="WARNING") as captured:
|
||||
summary = _log_raw_payload_summary({}, metric_name="ndvi", job_ref="job-1")
|
||||
@@ -101,9 +114,9 @@ class OpenEOServiceParsingTests(SimpleTestCase):
|
||||
payload = {"cell-1": {"foo": 12.4}}
|
||||
|
||||
with self.assertLogs("location_data.openeo_service", level="WARNING") as captured:
|
||||
result = parse_aggregate_spatial_response(payload, "lst_c", job_ref="job-2")
|
||||
result = parse_aggregate_spatial_response(payload, "ndwi", job_ref="job-2")
|
||||
|
||||
self.assertEqual(result["cell-1"]["lst_c"], 12.4)
|
||||
self.assertEqual(result["cell-1"]["ndwi"], 12.4)
|
||||
self.assertIn("Feature mismatch for cell=cell-1, available_keys=['foo']", "\n".join(captured.output))
|
||||
|
||||
def test_linear_to_db(self):
|
||||
@@ -347,6 +360,26 @@ class OpenEOConnectionTests(SimpleTestCase):
|
||||
self.assertEqual(job_ref, "job-123")
|
||||
process.execute.assert_not_called()
|
||||
|
||||
def test_load_job_result_payload_archives_exact_raw_json_file(self):
|
||||
job = Mock(job_id="job-123")
|
||||
results = Mock()
|
||||
job.get_results.return_value = results
|
||||
raw_json = '{\n "cell-1": {"mean": 0.5}\n}\n'
|
||||
|
||||
def write_json(target_dir):
|
||||
Path(target_dir, "timeseries.json").write_text(raw_json, encoding="utf-8")
|
||||
|
||||
results.download_files.side_effect = write_json
|
||||
|
||||
with TemporaryDirectory() as archive_dir:
|
||||
with patch.dict(os.environ, {"OPENEO_PAYLOAD_ARCHIVE_DIR": archive_dir}, clear=False):
|
||||
payload = _load_job_result_payload(job, metric_name="ndvi")
|
||||
archive_path = Path(archive_dir) / "job-123__ndvi__timeseries.json"
|
||||
self.assertTrue(archive_path.exists())
|
||||
self.assertEqual(archive_path.read_text(encoding="utf-8"), raw_json)
|
||||
|
||||
self.assertEqual(payload, {"cell-1": {"mean": 0.5}})
|
||||
|
||||
def test_load_first_json_payload_prefers_stac_asset_data_over_metadata(self):
|
||||
with TemporaryDirectory() as temp_dir:
|
||||
Path(temp_dir, "item.json").write_text(
|
||||
|
||||
Reference in New Issue
Block a user