diff --git a/requirements.txt b/requirements.txt index 62eb4a7..065674a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.0.11 diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 14b04a6..876fc69 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -21,8 +21,9 @@ def dev_config() -> None: os.environ["DATA_FOLDER_PATH"] = os.path.join( "C:/Users", os.getlogin(), "OpenGeodeWeb_Data" ) - if not os.path.exists(os.environ.get("DATA_FOLDER_PATH")): - os.mkdir(os.environ.get("DATA_FOLDER_PATH")) + data_folder_path = os.environ.get("DATA_FOLDER_PATH") + if data_folder_path and not os.path.exists(data_folder_path): + os.mkdir(data_folder_path) def _copy_test_assets( diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index d00ecac..dcc7768 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -4,8 +4,13 @@ # Third party imports from vtkmodules.vtkIOXML import vtkXMLDataReader, vtkXMLImageDataReader from vtkmodules.vtkCommonExecutionModel import vtkAlgorithm -from vtkmodules.vtkRenderingCore import vtkMapper, vtkActor, vtkTexture -from vtkmodules.vtkCommonDataModel import vtkDataObject +from vtkmodules.vtkRenderingCore import ( + vtkMapper, + vtkActor, + vtkTexture, + vtkCompositePolyDataMapper, +) +from vtkmodules.vtkCommonDataModel import vtkDataObject, vtkDataSet # Local application imports from opengeodeweb_viewer.vtk_protocol import VtkView, vtkData @@ -32,8 +37,10 @@ def registerObject( renderWindow = self.getView("-1") renderer = renderWindow.GetRenderers().GetFirstRenderer() resetCamara = True - for registered_actor in renderer.GetActors(): - if registered_actor.visibility == True: + actors = renderer.GetActors() + actors.InitTraversal() + while actor := actors.GetNextItem(): + if actor.visibility == True: resetCamara = False renderer.AddActor(data.actor) if resetCamara: @@ -104,6 +111,8 @@ def SetBlocksVisibility( self, data_id: str, block_ids: list[int], visibility: bool ) -> None: mapper = self.get_object(data_id).mapper + if not isinstance(mapper, vtkCompositePolyDataMapper): + raise Exception("Mapper is not a vtkCompositePolyDataMapper") for block_id in block_ids: mapper.SetBlockVisibility(block_id, visibility) @@ -111,13 +120,17 @@ def SetBlocksColor( self, data_id: str, block_ids: list[int], red: int, green: int, blue: int ) -> None: mapper = self.get_object(data_id).mapper + if not isinstance(mapper, vtkCompositePolyDataMapper): + raise Exception("Mapper is not a vtkCompositePolyDataMapper") for block_id in block_ids: mapper.SetBlockColor(block_id, [red / 255, green / 255, blue / 255]) def clearColors(self, data_id: str) -> None: db = self.get_object(data_id) - mapper = db["mapper"] - reader = db["reader"] - reader.GetOutput().GetPointData().SetActiveScalars("") - reader.GetOutput().GetCellData().SetActiveScalars("") + mapper = db.mapper + reader = db.reader + output = reader.GetOutputDataObject(0) + if isinstance(output, vtkDataSet): + output.GetPointData().SetActiveScalars("") + output.GetCellData().SetActiveScalars("") mapper.ScalarVisibilityOff() diff --git a/src/opengeodeweb_viewer/py.typed b/src/opengeodeweb_viewer/py.typed index b648ac9..e69de29 100644 --- a/src/opengeodeweb_viewer/py.typed +++ b/src/opengeodeweb_viewer/py.typed @@ -1 +0,0 @@ -partial diff --git a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py index 697d54f..0b54166 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py @@ -109,7 +109,7 @@ def meshApplyTextures(self, rpc_params: RpcParams) -> None: if texture_data is None: continue texture_file = texture_data.viewable_file - if not texture_file.lower().endswith(".vti"): + if texture_file is None or not texture_file.lower().endswith(".vti"): continue texture_file_path = self.get_data_file_path(texture_id) texture_reader = vtkXMLImageDataReader() @@ -119,7 +119,7 @@ def meshApplyTextures(self, rpc_params: RpcParams) -> None: texture.SetInputConnection(texture_reader.GetOutputPort()) texture.InterpolateOn() reader = self.get_object(mesh_id).reader - output = reader.GetOutput() + output = reader.GetOutputAsDataSet() point_data = output.GetPointData() for i in range(point_data.GetNumberOfArrays()): array = point_data.GetArray(i) @@ -131,7 +131,7 @@ def meshApplyTextures(self, rpc_params: RpcParams) -> None: def displayAttributeOnVertices(self, data_id: str, name: str) -> None: reader = self.get_object(data_id).reader - points = reader.GetOutput().GetPointData() + points = reader.GetOutputAsDataSet().GetPointData() points.SetActiveScalars(name) mapper = self.get_object(data_id).mapper mapper.ScalarVisibilityOn() @@ -140,7 +140,7 @@ def displayAttributeOnVertices(self, data_id: str, name: str) -> None: def displayAttributeOnCells(self, data_id: str, name: str) -> None: reader = self.get_object(data_id).reader - cells = reader.GetOutput().GetCellData() + cells = reader.GetOutputAsDataSet().GetCellData() cells.SetActiveScalars(name) mapper = self.get_object(data_id).mapper mapper.ScalarVisibilityOn() diff --git a/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py index 1c79b3f..81ed131 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/points/mesh_points_protocols.py @@ -2,7 +2,7 @@ import os # Third party imports -from wslink import register as exportRpc +from wslink import register as exportRpc # type: ignore from opengeodeweb_microservice.schemas import get_schemas_dict # Local application imports diff --git a/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py index 8ca9eec..78c5660 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/polygons/polygons_protocols.py @@ -20,7 +20,7 @@ class VtkMeshPolygonsView(VtkMeshView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(mesh_polygons_prefix + mesh_polygons_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py index 4931b35..1d87bfd 100644 --- a/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py +++ b/src/opengeodeweb_viewer/rpc/mesh/polyhedra/polyhedra_protocols.py @@ -20,7 +20,7 @@ class VtkMeshPolyhedraView(VtkMeshView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(mesh_polyhedra_prefix + mesh_polyhedra_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py b/src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py index 6db1208..692e9ec 100644 --- a/src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/blocks/model_blocks_protocols.py @@ -20,7 +20,7 @@ class VtkModelBlocksView(VtkModelView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_blocks_prefix + model_blocks_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py index 3e6a3ee..ef37689 100644 --- a/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/corners/model_corners_protocols.py @@ -20,7 +20,7 @@ class VtkModelCornersView(VtkModelView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_corners_prefix + model_corners_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py b/src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py index 2ed35a3..8558d32 100644 --- a/src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/edges/model_edges_protocols.py @@ -20,7 +20,7 @@ class VtkModelEdgesView(VtkModelView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_edges_prefix + model_edges_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py b/src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py index 76e18d4..60c1192 100644 --- a/src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/lines/model_lines_protocols.py @@ -20,7 +20,7 @@ class VtkModelLinesView(VtkModelView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_lines_prefix + model_lines_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/model_protocols.py b/src/opengeodeweb_viewer/rpc/model/model_protocols.py index e651d4b..61c762a 100644 --- a/src/opengeodeweb_viewer/rpc/model/model_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/model_protocols.py @@ -27,7 +27,7 @@ class VtkModelView(VtkObjectView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_prefix + model_schemas_dict["register"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py b/src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py index 5a71046..3285c27 100644 --- a/src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/points/model_points_protocols.py @@ -20,7 +20,7 @@ class VtkModelPointsView(VtkModelView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_points_prefix + model_points_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py index 20a985d..aaa3a81 100644 --- a/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py +++ b/src/opengeodeweb_viewer/rpc/model/surfaces/model_surfaces_protocols.py @@ -20,7 +20,7 @@ class VtkModelSurfacesView(VtkModelView): os.path.join(os.path.dirname(__file__), "schemas") ) - def __init__(self): + def __init__(self) -> None: super().__init__() @exportRpc(model_surfaces_prefix + model_surfaces_schemas_dict["visibility"]["rpc"]) diff --git a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py index 5039632..8e98f2a 100644 --- a/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py +++ b/src/opengeodeweb_viewer/rpc/viewer/viewer_protocols.py @@ -1,6 +1,7 @@ # Standard library imports import math import os +from typing import cast, Any # Third party imports from wslink import register as exportRpc # type: ignore @@ -15,7 +16,7 @@ ) from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackball from vtkmodules.vtkCommonCore import reference -from vtkmodules.vtkCommonDataModel import vtkBoundingBox +from vtkmodules.vtkCommonDataModel import vtkBoundingBox, vtkDataSet from vtkmodules.vtkCommonTransforms import vtkTransform from vtkmodules.vtkInteractionWidgets import vtkOrientationMarkerWidget from opengeodeweb_microservice.schemas import get_schemas_dict @@ -140,6 +141,7 @@ def takeScreenshot(self, rpc_params: RpcParams) -> dict[str, str | bytes]: w2if.ReadFrontBufferOff() w2if.Update() output_extension = params.output_extension + writer: vtkPNGWriter | vtkJPEGWriter if output_extension == schemas.OutputExtension.PNG: writer = vtkPNGWriter() elif output_extension == schemas.OutputExtension.JPG: @@ -167,12 +169,16 @@ def updateData(self, rpc_params: RpcParams) -> None: ) params = schemas.UpdateData.from_dict(rpc_params) data = self.get_object(params.id) - reader = data["reader"] + reader = data.reader reader.Update() - mapper = data["mapper"] - tag = reference(0) + mapper = data.mapper + tag: Any = reference(0) + output = reader.GetOutputDataObject(0) + if not isinstance(output, vtkDataSet): + raise Exception("Output is not a vtkDataSet") + scalars = vtkAbstractMapper.GetAbstractScalars( - reader.GetOutput(), + output, mapper.GetScalarMode(), mapper.GetArrayAccessMode(), mapper.GetArrayId(), @@ -203,7 +209,7 @@ def computeEpsilon(self, renderer: vtkRenderer, z: float) -> float: renderer.SetDisplayPoint(size[0], size[1], z) renderer.DisplayToWorld() windowUpperRight = renderer.GetWorldPoint() - epsilon = 0 + epsilon: float = 0.0 for i in range(3): epsilon += (windowUpperRight[i] - windowLowerLeft[i]) * ( windowUpperRight[i] - windowLowerLeft[i] @@ -229,7 +235,8 @@ def pickedIds(self, rpc_params: RpcParams) -> dict[str, list[str]]: array_ids = [] for id in params.ids: bounds = self.get_object(id).actor.GetBounds() - if bbox.Intersects(bounds): + bounds_box = vtkBoundingBox(bounds) + if bbox.Intersects(bounds_box): array_ids.append(id) return {"array_ids": array_ids} diff --git a/src/opengeodeweb_viewer/vtk_protocol.py b/src/opengeodeweb_viewer/vtk_protocol.py index 2ec6ed0..fc16e30 100644 --- a/src/opengeodeweb_viewer/vtk_protocol.py +++ b/src/opengeodeweb_viewer/vtk_protocol.py @@ -9,11 +9,14 @@ from vtkmodules.vtkIOXML import ( vtkXMLReader, ) +from vtkmodules.vtkWebCore import vtkWebApplication from vtkmodules.vtkCommonExecutionModel import vtkAlgorithm from vtkmodules.vtkRenderingCore import ( vtkActor, vtkMapper, vtkRenderer, + vtkRenderWindow, + vtkCompositePolyDataMapper, ) from vtkmodules.vtkRenderingAnnotation import vtkCubeAxesActor, vtkAxesActor from vtkmodules.vtkInteractionWidgets import vtkOrientationMarkerWidget @@ -34,7 +37,18 @@ class vtkData: ) -class VtkView(vtk_protocols.vtkWebProtocol): +class VtkTypingMixin: + def getView(self, view_id: str) -> vtkRenderWindow: + return cast(vtkRenderWindow, super().getView(view_id)) # type: ignore + + def registerVtkWebProtocol(self, protocol: Any) -> None: + super().registerVtkWebProtocol(protocol) # type: ignore + + def getApplication(self) -> vtkWebApplication: + return cast(vtkWebApplication, super().getApplication()) # type: ignore + + +class VtkView(VtkTypingMixin, vtk_protocols.vtkWebProtocol): def __init__(self) -> None: super().__init__() self.DATA_FOLDER_PATH = os.getenv("DATA_FOLDER_PATH", ".") diff --git a/src/opengeodeweb_viewer/vtkw_server.py b/src/opengeodeweb_viewer/vtkw_server.py index c75ec52..12d0765 100644 --- a/src/opengeodeweb_viewer/vtkw_server.py +++ b/src/opengeodeweb_viewer/vtkw_server.py @@ -1,18 +1,20 @@ # Standard library imports import argparse import os +from typing import Any, cast, Protocol, runtime_checkable # Third party imports -from vtkmodules.web import wslink as vtk_wslink +from vtkmodules.web.wslink import ServerProtocol from vtkmodules.web import protocols as vtk_protocols from wslink import server # type: ignore +from vtkmodules.vtkWebCore import vtkWebApplication from vtkmodules.vtkRenderingCore import vtkRenderer, vtkRenderWindow from vtkmodules.vtkCommonCore import vtkFileOutputWindow, vtkOutputWindow from opengeodeweb_microservice.database import connection # Local application imports from .config import * -from .vtk_protocol import VtkView +from .vtk_protocol import VtkView, VtkTypingMixin from .rpc.viewer.viewer_protocols import VtkViewerView from .rpc.mesh.mesh_protocols import VtkMeshView from .rpc.mesh.points.mesh_points_protocols import VtkMeshPointsView @@ -48,14 +50,14 @@ # ============================================================================= -class _Server(vtk_wslink.ServerProtocol): +class _Server(VtkTypingMixin, ServerProtocol): # Defaults authKey = "wslink-secret" view = None debug = False @staticmethod - def add_arguments(parser): + def add_arguments(parser: argparse.ArgumentParser) -> None: parser.add_argument( "--data_folder_path", default=os.environ.get("DATA_FOLDER_PATH"), @@ -63,15 +65,15 @@ def add_arguments(parser): ) @staticmethod - def configure(args): + def configure(args: argparse.Namespace) -> None: # Standard args _Server.authKey = args.authKey - def initialize(self): + def initialize(self) -> None: # Bring used components self.registerVtkWebProtocol(vtk_protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(vtk_protocols.vtkWebViewPort()) - publisher = vtk_protocols.vtkWebPublishImageDelivery(decode=False) + publisher = vtk_protocols.vtkWebPublishImageDelivery(decode=False) # type: ignore publisher.deltaStaleTimeBeforeRender = 0.1 self.registerVtkWebProtocol(publisher) self.setSharedObject("db", dict()) @@ -87,7 +89,7 @@ def initialize(self): self.registerVtkWebProtocol(mesh_protocols) self.registerVtkWebProtocol(VtkMeshPointsView()) self.registerVtkWebProtocol(VtkMeshEdgesView()) - self.registerVtkWebProtocol(VtkMeshCellsView()) # type: ignore + self.registerVtkWebProtocol(VtkMeshCellsView()) self.registerVtkWebProtocol(VtkMeshPolygonsView()) self.registerVtkWebProtocol(VtkMeshPolyhedraView()) self.registerVtkWebProtocol(model_protocols) @@ -126,7 +128,7 @@ def initialize(self): # ============================================================================= -def run_server(Server=_Server): +def run_server(Server: type[ServerProtocol] = _Server) -> None: PYTHON_ENV = os.environ.get("PYTHON_ENV", default="prod").strip().lower() if PYTHON_ENV == "prod": prod_config() diff --git a/tests/conftest.py b/tests/conftest.py index 7d4895b..b4f1373 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,21 +2,19 @@ from pathlib import Path from websocket import create_connection, WebSocketTimeoutException import json -from xprocess import ProcessStarter +from xprocess import ProcessStarter, XProcess from vtkmodules.vtkIOImage import vtkImageReader2, vtkPNGReader, vtkJPEGReader from vtkmodules.vtkImagingCore import vtkImageDifference import os import shutil import xml.etree.ElementTree as ET -from typing import Callable, Generator +from typing import Callable, Generator, Any, cast from opengeodeweb_viewer import config from opengeodeweb_microservice.database.connection import get_session, init_database from opengeodeweb_microservice.database.data import Data from opengeodeweb_viewer.rpc.viewer.viewer_protocols import VtkViewerView -type RpcTestParams = list[ - dict[str, str | int | float | bool | dict[str, int] | list[str]] | int -] | None +type RpcTestParams = list[dict[str, Any] | int] | None class ServerMonitor: @@ -81,15 +79,19 @@ def _reader_for_file(path: str) -> vtkImageReader2: def images_diff(self, first_image_path: str, second_image_path: str) -> float: if ".png" in first_image_path: - first_reader = vtkPNGReader() + first_reader: vtkImageReader2 = vtkPNGReader() elif (".jpg" in first_image_path) or (".jpeg" in first_image_path): first_reader = vtkJPEGReader() + else: + raise Exception(f"Unsupported image format for file: {first_image_path}") first_reader.SetFileName(first_image_path) if ".png" in second_image_path: - second_reader = vtkPNGReader() + second_reader: vtkImageReader2 = vtkPNGReader() elif (".jpg" in second_image_path) or (".jpeg" in second_image_path): second_reader = vtkJPEGReader() + else: + raise Exception(f"Unsupported image format for file: {second_image_path}") second_reader.SetFileName(second_image_path) images_diff = vtkImageDifference() @@ -175,7 +177,7 @@ class Starter(ProcessStarter): @pytest.fixture -def server(xprocess: object) -> Generator[ServerMonitor, None, None]: +def server(xprocess: XProcess) -> Generator[ServerMonitor, None, None]: name, Starter, Monitor = HELPER.get_xprocess_args() os.environ["PYTHON_ENV"] = "test" _, log = xprocess.ensure(name, Starter) diff --git a/tests/mesh/points/test_mesh_points_protocols.py b/tests/mesh/points/test_mesh_points_protocols.py index 564950d..8cca6ec 100644 --- a/tests/mesh/points/test_mesh_points_protocols.py +++ b/tests/mesh/points/test_mesh_points_protocols.py @@ -1,5 +1,5 @@ # Standard library imports -from typing import Callable, cast +from typing import Callable # Third party imports from opengeodeweb_viewer.rpc.mesh.mesh_protocols import VtkMeshView @@ -20,7 +20,7 @@ def test_points_visibility( server.call( VtkMeshPointsView.mesh_points_prefix - + cast(str, VtkMeshPointsView.mesh_points_schemas_dict["visibility"]["rpc"]), + + VtkMeshPointsView.mesh_points_schemas_dict["visibility"]["rpc"], [{"id": mesh_id, "visibility": True}], ) assert server.compare_image("mesh/points/visibility.jpeg") == True @@ -34,7 +34,7 @@ def test_points_size( server.call( VtkMeshPointsView.mesh_points_prefix - + cast(str, VtkMeshPointsView.mesh_points_schemas_dict["size"]["rpc"]), + + VtkMeshPointsView.mesh_points_schemas_dict["size"]["rpc"], [{"id": mesh_id, "size": 15}], ) assert server.compare_image("mesh/points/size.jpeg") == True @@ -48,7 +48,7 @@ def test_points_color( server.call( VtkMeshPointsView.mesh_points_prefix - + cast(str, VtkMeshPointsView.mesh_points_schemas_dict["color"]["rpc"]), + + VtkMeshPointsView.mesh_points_schemas_dict["color"]["rpc"], [{"id": mesh_id, "color": {"r": 255, "g": 0, "b": 0}}], ) assert server.compare_image("mesh/points/color.jpeg") == True @@ -61,29 +61,28 @@ def test_points_with_point_set( dataset_factory(id=mesh_id, viewable_file="points.vtp") server.call( - VtkMeshView.mesh_prefix - + cast(str, VtkMeshView.mesh_schemas_dict["register"]["rpc"]), + VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"], [{"id": mesh_id}], ) assert server.compare_image("mesh/points/register_point_set.jpeg") == True server.call( VtkMeshPointsView.mesh_points_prefix - + cast(str, VtkMeshPointsView.mesh_points_schemas_dict["size"]["rpc"]), + + VtkMeshPointsView.mesh_points_schemas_dict["size"]["rpc"], [{"id": mesh_id, "size": 10}], ) assert server.compare_image("mesh/points/point_set_size.jpeg") == True server.call( VtkMeshPointsView.mesh_points_prefix - + cast(str, VtkMeshPointsView.mesh_points_schemas_dict["color"]["rpc"]), + + VtkMeshPointsView.mesh_points_schemas_dict["color"]["rpc"], [{"id": mesh_id, "color": {"r": 255, "g": 0, "b": 0}}], ) assert server.compare_image("mesh/points/point_set_color.jpeg") == True server.call( VtkMeshPointsView.mesh_points_prefix - + cast(str, VtkMeshPointsView.mesh_points_schemas_dict["visibility"]["rpc"]), + + VtkMeshPointsView.mesh_points_schemas_dict["visibility"]["rpc"], [{"id": mesh_id, "visibility": False}], ) assert server.compare_image("mesh/points/point_set_visibility.jpeg") == True diff --git a/tests/py.typed b/tests/py.typed deleted file mode 100644 index b648ac9..0000000 --- a/tests/py.typed +++ /dev/null @@ -1 +0,0 @@ -partial