From 1b038b4e4e0e16ab916b7f678a6825934721f4cc Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 5 Aug 2026 09:56:10 +0200 Subject: [PATCH 01/11] feat(Controller): events for viewer --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index 4c26f327..14948549 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -32,6 +32,7 @@ def setMeshPointsVisibility(self, rpc_params: RpcParams) -> None: ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) + return { **params } @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["color"]["rpc"]) def setMeshPointsColor(self, rpc_params: RpcParams) -> None: From 731ea161d4fd9b589594b332979ea2bdffde57f1 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 5 Aug 2026 16:56:23 +0200 Subject: [PATCH 02/11] save wip [skip ci] --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index 14948549..ad957e08 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -32,7 +32,7 @@ def setMeshPointsVisibility(self, rpc_params: RpcParams) -> None: ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) - return { **params } + return params.to_dict() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["color"]["rpc"]) def setMeshPointsColor(self, rpc_params: RpcParams) -> None: From 477631f1b6ddf580f6e6f04a6ddbf9c1d4c9de68 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 10 Aug 2026 11:03:34 +0200 Subject: [PATCH 03/11] feat(Rpc): publish event on stream true --- .../rpc/mesh/points/points_protocols.py | 2 +- .../rpc/viewer/viewer_protocols.py | 3 ++- src/opengeodeweb_viewer/utils_functions.py | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index ad957e08..7a9e70e1 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -2,7 +2,7 @@ import os # Third party imports -from wslink import register as exportRpc # type: ignore +from opengeodeweb_viewer.utils_functions import exportRpc from opengeodeweb_microservice.schemas import get_schemas_dict # Local application imports diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index 7450b2bd..a5149d4d 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -4,7 +4,6 @@ from typing import cast, Any # Third party imports -from wslink import register as exportRpc # type: ignore from vtkmodules.vtkIOImage import vtkPNGWriter, vtkJPEGWriter from vtkmodules.vtkRenderingAnnotation import vtkCubeAxesActor, vtkAxesActor from vtkmodules.vtkRenderingCore import ( @@ -27,9 +26,11 @@ # Local application imports from opengeodeweb_viewer.utils_functions import ( + exportRpc, validate_schema, RpcParams, ) + from opengeodeweb_viewer.vtk_protocol import VtkView from opengeodeweb_viewer.rpc.viewer import schemas diff --git a/src/opengeodeweb_viewer/utils_functions.py b/src/opengeodeweb_viewer/utils_functions.py index cf7697fe..6f647c09 100644 --- a/src/opengeodeweb_viewer/utils_functions.py +++ b/src/opengeodeweb_viewer/utils_functions.py @@ -2,12 +2,28 @@ # Third party imports import fastjsonschema # type: ignore +import functools import math +from typing import Any, Callable, TypeVar +from wslink import register # type: ignore from opengeodeweb_microservice.schemas import SchemaDict type RpcParams = dict[str, str] +R = TypeVar("R") + +def exportRpc(rpc_id: str) -> Callable[[Callable[..., R]], Callable[..., R]]: + def decorator(function: Callable[..., R]) -> Callable[..., R]: + def wrapper(self: Any, *args: Any, **kwargs: Any) -> R: + do_stream = bool(kwargs.pop("stream", False)) + print("do_stream", do_stream, flush=True) + result = function(self, *args, **kwargs) + if do_stream: + self.publish(rpc_id, result) + return result + return register(rpc_id)(wrapper) # type: ignore[no-any-return] + return decorator def validate_schema( rpc_params: RpcParams, schema: SchemaDict, prefix: str = "" From c570af9f0eea7834b0d73b5a1260c00a924b0348 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Mon, 10 Aug 2026 09:08:15 +0000 Subject: [PATCH 04/11] Apply prepare changes --- requirements.txt | 1 - src/opengeodeweb_viewer/utils_functions.py | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b2d15c04..86373ac9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -63,4 +63,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.2.0 diff --git a/src/opengeodeweb_viewer/utils_functions.py b/src/opengeodeweb_viewer/utils_functions.py index 04625f7e..38ce9b32 100644 --- a/src/opengeodeweb_viewer/utils_functions.py +++ b/src/opengeodeweb_viewer/utils_functions.py @@ -14,6 +14,7 @@ R = TypeVar("R") + def exportRpc(rpc_id: str) -> Callable[[Callable[..., R]], Callable[..., R]]: def decorator(function: Callable[..., R]) -> Callable[..., R]: def wrapper(self: Any, *args: Any, **kwargs: Any) -> R: @@ -23,9 +24,12 @@ def wrapper(self: Any, *args: Any, **kwargs: Any) -> R: if do_stream: self.publish(rpc_id, result) return result + return register(rpc_id)(wrapper) # type: ignore[no-any-return] + return decorator + def validate_schema( rpc_params: RpcParams, schema: SchemaDict, prefix: str = "" ) -> None: From 8a2ec7138fbcd55506d130485d28fe0510198ca9 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 10 Aug 2026 11:14:11 +0200 Subject: [PATCH 05/11] mypy --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index 7a9e70e1..f8bb6da6 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -24,7 +24,7 @@ def __init__(self) -> None: super().__init__() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["visibility"]["rpc"]) - def setMeshPointsVisibility(self, rpc_params: RpcParams) -> None: + def setMeshPointsVisibility(self, rpc_params: RpcParams) -> RpcParams: validate_schema( rpc_params, self.mesh_points_schemas_dict["visibility"], From 7eac56534d5de37f78f340f434ec99135525cba1 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 10 Aug 2026 11:19:02 +0200 Subject: [PATCH 06/11] mypy --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index f8bb6da6..f58df055 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -24,7 +24,7 @@ def __init__(self) -> None: super().__init__() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["visibility"]["rpc"]) - def setMeshPointsVisibility(self, rpc_params: RpcParams) -> RpcParams: + def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, str]: validate_schema( rpc_params, self.mesh_points_schemas_dict["visibility"], From 3bfb84ca6e2ca6f87db87db6d4c8efa69245d25d Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 10 Aug 2026 11:24:19 +0200 Subject: [PATCH 07/11] mypy --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index f58df055..bf83ffa0 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -1,4 +1,5 @@ # Standard library imports +from typing import Any import os # Third party imports @@ -24,7 +25,7 @@ def __init__(self) -> None: super().__init__() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["visibility"]["rpc"]) - def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, str]: + def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, dict[Any, Any]]: validate_schema( rpc_params, self.mesh_points_schemas_dict["visibility"], From ee74f852167b7b4d3769077748ced5a550ee5139 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Mon, 10 Aug 2026 09:25:26 +0000 Subject: [PATCH 08/11] Apply prepare changes --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index bf83ffa0..8a9446e7 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -25,7 +25,9 @@ def __init__(self) -> None: super().__init__() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["visibility"]["rpc"]) - def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, dict[Any, Any]]: + def setMeshPointsVisibility( + self, rpc_params: RpcParams + ) -> dict[str, dict[Any, Any]]: validate_schema( rpc_params, self.mesh_points_schemas_dict["visibility"], From d2b8b6a57a1dd8ecd708176c8b0ef20ebb32c12f Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 10 Aug 2026 11:31:13 +0200 Subject: [PATCH 09/11] mypy again --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index bf83ffa0..68827439 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -25,7 +25,7 @@ def __init__(self) -> None: super().__init__() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["visibility"]["rpc"]) - def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, dict[Any, Any]]: + def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, Any]: validate_schema( rpc_params, self.mesh_points_schemas_dict["visibility"], From 768cd64529647e18e300a78c80c587a7b999e652 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 12 Aug 2026 16:47:31 +0200 Subject: [PATCH 10/11] publish rpc_params automatically --- src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py | 3 +-- src/opengeodeweb_viewer/utils_functions.py | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index 68827439..63a8dbb5 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -25,7 +25,7 @@ def __init__(self) -> None: super().__init__() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["visibility"]["rpc"]) - def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, Any]: + def setMeshPointsVisibility(self, rpc_params: RpcParams) -> None: validate_schema( rpc_params, self.mesh_points_schemas_dict["visibility"], @@ -33,7 +33,6 @@ def setMeshPointsVisibility(self, rpc_params: RpcParams) -> dict[str, Any]: ) params = schemas.Visibility.from_dict(rpc_params) self.SetPointsVisibility(params.id, params.visibility) - return params.to_dict() @exportRpc(mesh_points_prefix + mesh_points_schemas_dict["color"]["rpc"]) def setMeshPointsColor(self, rpc_params: RpcParams) -> None: diff --git a/src/opengeodeweb_viewer/utils_functions.py b/src/opengeodeweb_viewer/utils_functions.py index 38ce9b32..ec923946 100644 --- a/src/opengeodeweb_viewer/utils_functions.py +++ b/src/opengeodeweb_viewer/utils_functions.py @@ -22,11 +22,10 @@ def wrapper(self: Any, *args: Any, **kwargs: Any) -> R: print("do_stream", do_stream, flush=True) result = function(self, *args, **kwargs) if do_stream: - self.publish(rpc_id, result) + rpc_params = args[0] if args else None + self.publish(rpc_id, rpc_params) return result - return register(rpc_id)(wrapper) # type: ignore[no-any-return] - return decorator From e600184b642545c6ea2823f6fd42aa0cb5ff1ead Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Wed, 12 Aug 2026 14:48:20 +0000 Subject: [PATCH 11/11] Apply prepare changes --- src/opengeodeweb_viewer/utils_functions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/opengeodeweb_viewer/utils_functions.py b/src/opengeodeweb_viewer/utils_functions.py index ec923946..aae8573e 100644 --- a/src/opengeodeweb_viewer/utils_functions.py +++ b/src/opengeodeweb_viewer/utils_functions.py @@ -25,7 +25,9 @@ def wrapper(self: Any, *args: Any, **kwargs: Any) -> R: rpc_params = args[0] if args else None self.publish(rpc_id, rpc_params) return result + return register(rpc_id)(wrapper) # type: ignore[no-any-return] + return decorator