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/rpc/mesh/points/points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py index 4c26f327..63a8dbb5 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/points_protocols.py @@ -1,8 +1,9 @@ # Standard library imports +from typing import Any 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 3a3aade4..aae8573e 100644 --- a/src/opengeodeweb_viewer/utils_functions.py +++ b/src/opengeodeweb_viewer/utils_functions.py @@ -2,13 +2,34 @@ # Third party imports import fastjsonschema # type: ignore +import functools import math +from typing import Any, Callable, TypeVar +from wslink import register # type: ignore from vtkmodules.vtkRenderingCore import vtkColorTransferFunction 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: + 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 + def validate_schema( rpc_params: RpcParams, schema: SchemaDict, prefix: str = ""