From 0a6fde7f3c127125f3ea2baef6cb86ebf13582a5 Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Thu, 8 Jan 2026 08:26:11 +0100 Subject: [PATCH 1/5] build: use openapi client 0.0.30 --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 085b0d1e..60119032 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ readme = { file = "README.md", content-type = "text/markdown" } license-files = ["LICENSE"] requires-python = ">=3.10" dependencies = [ - "geoengine-openapi-client == 0.0.28", + "geoengine-openapi-client @ git+ssh://git@github.com/geo-engine/openapi-client.git@openapi-7.18.0#subdirectory=python", "geopandas >=1.0,<2.0", "matplotlib >=3.5,<3.11", "numpy >=1.21,<2.4", @@ -27,7 +27,7 @@ dependencies = [ "rasterio >=1.3,<2", "requests >= 2.26,<3", "rioxarray >=0.9.1, <0.21", - "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` + "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` "vega >= 3.5,<4.2", "websockets >= 14.2,<16", "xarray >=0.19,<2025.10", From 40f07b611e385e5dfd5ce5ce786a04360ad5acbd Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Thu, 8 Jan 2026 08:26:48 +0100 Subject: [PATCH 2/5] build: use openapi client 0.0.30 --- .github/.backend_git_ref | 2 +- pyproject.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/.backend_git_ref b/.github/.backend_git_ref index 8b8539d5..c398e0a1 100644 --- a/.github/.backend_git_ref +++ b/.github/.backend_git_ref @@ -1 +1 @@ -9fcd0e8d520b3e7679d29c969263345ea190ec46 +8de4ad7e8efa267b528d71caa74b90aac2b43403 diff --git a/pyproject.toml b/pyproject.toml index 085b0d1e..60119032 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ readme = { file = "README.md", content-type = "text/markdown" } license-files = ["LICENSE"] requires-python = ">=3.10" dependencies = [ - "geoengine-openapi-client == 0.0.28", + "geoengine-openapi-client @ git+ssh://git@github.com/geo-engine/openapi-client.git@openapi-7.18.0#subdirectory=python", "geopandas >=1.0,<2.0", "matplotlib >=3.5,<3.11", "numpy >=1.21,<2.4", @@ -27,7 +27,7 @@ dependencies = [ "rasterio >=1.3,<2", "requests >= 2.26,<3", "rioxarray >=0.9.1, <0.21", - "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` + "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` "vega >= 3.5,<4.2", "websockets >= 14.2,<16", "xarray >=0.19,<2025.10", From 22602fbaca3096cc3bb2366442d662869334f416 Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Thu, 8 Jan 2026 08:33:43 +0100 Subject: [PATCH 3/5] dependency from http rather than ssh --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 60119032..d0234b25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ readme = { file = "README.md", content-type = "text/markdown" } license-files = ["LICENSE"] requires-python = ">=3.10" dependencies = [ - "geoengine-openapi-client @ git+ssh://git@github.com/geo-engine/openapi-client.git@openapi-7.18.0#subdirectory=python", + "geoengine-openapi-client @ git+https://github.com/geo-engine/openapi-client@openapi-7.18.0#subdirectory=python", # TODO update when merged", "geopandas >=1.0,<2.0", "matplotlib >=3.5,<3.11", "numpy >=1.21,<2.4", @@ -27,7 +27,7 @@ dependencies = [ "rasterio >=1.3,<2", "requests >= 2.26,<3", "rioxarray >=0.9.1, <0.21", - "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` + "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` "vega >= 3.5,<4.2", "websockets >= 14.2,<16", "xarray >=0.19,<2025.10", From e9d00add10334f893f8eb01942eceadc49bcd542 Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Thu, 8 Jan 2026 10:47:09 +0100 Subject: [PATCH 4/5] fix: permission response --- geoengine/permissions.py | 7 +-- geoengine/tasks.py | 1 - tests/test_workflow_storage.py | 81 +++++++--------------------------- 3 files changed, 16 insertions(+), 73 deletions(-) diff --git a/geoengine/permissions.py b/geoengine/permissions.py index 23e0a746..2de9c4fe 100644 --- a/geoengine/permissions.py +++ b/geoengine/permissions.py @@ -4,7 +4,6 @@ from __future__ import annotations -import ast from enum import Enum from uuid import UUID @@ -255,11 +254,7 @@ def add_role(name: str, timeout: int = 60) -> RoleId: user_api = geoengine_openapi_client.UserApi(api_client) response = user_api.add_role_handler(geoengine_openapi_client.AddRole(name=name, _request_timeout=timeout)) - # TODO: find out why JSON string is faulty - # parsed_response = json.loads(response) - parsed_response: dict[str, str] = ast.literal_eval(response) - - return RoleId.from_response(parsed_response) + return RoleId(response.id) def remove_role(role: RoleId, timeout: int = 60): diff --git a/geoengine/tasks.py b/geoengine/tasks.py index 6669e7ba..b917ca89 100644 --- a/geoengine/tasks.py +++ b/geoengine/tasks.py @@ -267,7 +267,6 @@ def get_status(self, timeout: int = 3600) -> TaskStatusInfo: with geoengine_openapi_client.ApiClient(session.configuration) as api_client: tasks_api = geoengine_openapi_client.TasksApi(api_client) - print(task_id) response = tasks_api.status_handler(task_id, _request_timeout=timeout) return TaskStatusInfo.from_response(response) diff --git a/tests/test_workflow_storage.py b/tests/test_workflow_storage.py index a3eaa564..bb97d935 100644 --- a/tests/test_workflow_storage.py +++ b/tests/test_workflow_storage.py @@ -1,15 +1,13 @@ """Tests for WMS calls""" import unittest -from uuid import UUID import geoengine_openapi_client import geoengine as ge from geoengine.datasets import DatasetName, StoredDataset -from geoengine.resource_identifier import UploadId - -from . import UrllibMocker +from geoengine.tasks import TaskStatus +from tests.ge_test import GeoEngineTestInstance class WorkflowStorageTests(unittest.TestCase): @@ -19,63 +17,11 @@ def setUp(self) -> None: ge.reset(False) def test_storing_workflow(self): - expected_request_text = { - "asCog": True, - "description": "Bar", - "displayName": "Foo", - "query": { - "spatialBounds": { - "lowerRightCoordinate": {"x": 180, "y": -90}, - "upperLeftCoordinate": {"x": -180, "y": 90}, - }, - "spatialResolution": {"x": 1.8, "y": 1.8}, - "timeInterval": {"end": 1396353600000, "start": 1396353600000}, - }, - } - - with UrllibMocker() as m: - m.post( - "http://mock-instance/anonymous", - json={"id": "c4983c3e-9b53-47ae-bda9-382223bd5081", "project": None, "view": None}, - ) - - m.post( - "http://mock-instance/workflow", - json={"id": "5b9508a8-bd34-5a1c-acd6-75bb832d2d38"}, - request_headers={"Authorization": "Bearer c4983c3e-9b53-47ae-bda9-382223bd5081"}, - ) - - m.get( - "http://mock-instance/workflow/5b9508a8-bd34-5a1c-acd6-75bb832d2d38/metadata", - json={ - "type": "raster", - "dataType": "U8", - "spatialReference": "EPSG:4326", - "bands": [{"name": "band", "measurement": {"type": "unitless"}}], - }, - request_headers={"Authorization": "Bearer c4983c3e-9b53-47ae-bda9-382223bd5081"}, - ) + # TODO: use `enterContext(cm)` instead of `with cm: ` in Python 3.11 + with GeoEngineTestInstance() as ge_instance: + ge_instance.wait_for_ready() - m.post( - "http://mock-instance/datasetFromWorkflow/5b9508a8-bd34-5a1c-acd6-75bb832d2d38", - expected_request_body=expected_request_text, - json={"taskId": "9ec828ef-c3da-4016-8cc7-79e5556267fc"}, - request_headers={"Authorization": "Bearer c4983c3e-9b53-47ae-bda9-382223bd5081"}, - ) - - m.get( - "http://mock-instance/tasks/9ec828ef-c3da-4016-8cc7-79e5556267fc/status", - json={ - "status": "completed", - "info": {"dataset": "my_new_dataset", "upload": "3086f494-d5a4-4b51-a14b-3b29f8bf7bb0"}, - "timeTotal": "00:00:00", - "taskType": "create-dataset", - "description": "Creating dataset Foo from workflow 5b9508a8-bd34-5a1c-acd6-75bb832d2d38", - "timeStarted": "2023-02-16T15:25:45.390Z", - }, - ) - - ge.initialize("http://mock-instance") + ge.initialize(ge_instance.address()) workflow_definition = {"type": "Raster", "operator": {"type": "GdalSource", "params": {"data": "ndvi"}}} @@ -89,14 +35,17 @@ def test_storing_workflow(self): ) workflow = ge.register_workflow(workflow_definition) + + dataset_name = f"{ge.get_session().user_id}:my_new_dataset" task = workflow.save_as_dataset( query, - None, - "Foo", - "Bar", + name=dataset_name, + display_name="Foo", + description="Bar", ) + task.wait_for_finish() task_status = task.get_status() - stored_dataset = StoredDataset.from_response(task_status.info) + self.assertEqual(task_status.status, TaskStatus.COMPLETED) - self.assertEqual(stored_dataset.dataset_name, DatasetName("my_new_dataset")) - self.assertEqual(stored_dataset.upload_id, UploadId(UUID("3086f494-d5a4-4b51-a14b-3b29f8bf7bb0"))) + stored_dataset = StoredDataset.from_response(task_status.info) + self.assertEqual(stored_dataset.dataset_name, DatasetName(dataset_name)) From 3e99891c30fbf90e5164f1546876253ba4923e11 Mon Sep 17 00:00:00 2001 From: Christian Beilschmidt Date: Thu, 8 Jan 2026 16:52:42 +0100 Subject: [PATCH 5/5] fix version --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d0234b25..84a2604f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ readme = { file = "README.md", content-type = "text/markdown" } license-files = ["LICENSE"] requires-python = ">=3.10" dependencies = [ - "geoengine-openapi-client @ git+https://github.com/geo-engine/openapi-client@openapi-7.18.0#subdirectory=python", # TODO update when merged", + "geoengine-openapi-client == 0.0.30", "geopandas >=1.0,<2.0", "matplotlib >=3.5,<3.11", "numpy >=1.21,<2.4", @@ -27,7 +27,7 @@ dependencies = [ "rasterio >=1.3,<2", "requests >= 2.26,<3", "rioxarray >=0.9.1, <0.21", - "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` + "StrEnum >=0.4.6,<0.5", # TODO: use from stdlib when `python_requires = >=3.11` "vega >= 3.5,<4.2", "websockets >= 14.2,<16", "xarray >=0.19,<2025.10",