Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions opengeodeweb_viewer_schemas.json
Original file line number Diff line number Diff line change
Expand Up @@ -1143,6 +1143,14 @@
"required": [],
"additionalProperties": false
},
"import_project": {
"$id": "opengeodeweb_viewer.import_project",
"rpc": "import_project",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"viewer": {
"update_data": {
"$id": "opengeodeweb_viewer.viewer.update_data",
Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,3 @@ wslink==1.12.4
yarl>=1
# via aiohttp

opengeodeweb-microservice==1.*,>=1.0.6rc1
1 change: 1 addition & 0 deletions src/opengeodeweb_viewer/rpc/schemas/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from .kill import *
from .import_project import *
7 changes: 7 additions & 0 deletions src/opengeodeweb_viewer/rpc/schemas/import_project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"rpc": "import_project",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}
7 changes: 7 additions & 0 deletions src/opengeodeweb_viewer/rpc/schemas/import_project.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from dataclasses_json import DataClassJsonMixin
from dataclasses import dataclass


@dataclass
class ImportProject(DataClassJsonMixin):
pass
41 changes: 41 additions & 0 deletions src/opengeodeweb_viewer/rpc/utils_protocols.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# Standard library imports
import os
from typing import cast

# Third party imports
from wslink import register as exportRpc # type: ignore

# Local application imports
from opengeodeweb_microservice.schemas import get_schemas_dict
from opengeodeweb_viewer.vtk_protocol import VtkView
from opengeodeweb_microservice.database import connection
from opengeodeweb_viewer.utils_functions import validate_schema
from opengeodeweb_viewer.rpc.schemas.import_project import ImportProject


class VtkUtilsView(VtkView):
Expand All @@ -25,3 +29,40 @@ def kill(self) -> None:
)
print("Manual viewer kill, shutting down...", flush=True)
os._exit(0)

@exportRpc(utils_prefix + utils_schemas_dict["import_project"]["rpc"])
def importProject(self, rpc_params: ImportProject) -> None:
print(
f"{self.utils_prefix + self.utils_schemas_dict['import_project']['rpc']}",
flush=True,
)
validate_schema(
cast(dict[str, str], rpc_params),
self.utils_schemas_dict["import_project"],
self.utils_prefix,
)

widget = self.get_widget()
if widget is not None:
try:
widget.EnabledOff()
except Exception:
pass
self.coreServer.setSharedObject("widget", None)
self.coreServer.setSharedObject("grid_scale", None)
self.coreServer.setSharedObject("axes", None)

self.get_data_base().clear()

# Clean up any existing database session
if connection.scoped_session_registry is not None:
connection.scoped_session_registry.remove()
if connection.engine is not None:
connection.engine.dispose()
# Reset all connection attributes to None
connection.engine = connection.session_factory = (
connection.scoped_session_registry
) = None

db_full_path = os.path.join(self.DATA_FOLDER_PATH, "project.db")
connection.init_database(db_full_path, create_tables=False)
Binary file added tests/data/images/viewer/import_project.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions tests/test_utils_protocols.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from typing import Callable
from opengeodeweb_viewer.rpc.utils_protocols import VtkUtilsView
from opengeodeweb_viewer.rpc.viewer.viewer_protocols import VtkViewerView
from opengeodeweb_viewer.rpc.mesh.mesh_protocols import VtkMeshView
from opengeodeweb_microservice.database.connection import get_session
from opengeodeweb_microservice.database.data import Data
from tests.conftest import ServerMonitor


def test_reset_project_after_import(
server: ServerMonitor, dataset_factory: Callable[..., str]
) -> None:
# Mock
pre_id = "123456789"
dataset_factory(id=pre_id, viewable_file_name="hat.vtp")
server.call(
VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"],
[{"id": pre_id}],
)
assert server.compare_image(3, "mesh/register.jpeg") is True

# Import
with get_session() as session:
session.query(Data).delete()
session.commit()

post_id = "987654321"
dataset_factory(id=post_id, viewable_file_name="hat.vtp")

server.call(
VtkUtilsView.utils_prefix
+ VtkUtilsView.utils_schemas_dict["import_project"]["rpc"]
)
server.get_response()

server.call(
VtkViewerView.viewer_prefix
+ VtkViewerView.viewer_schemas_dict["reset_visualization"]["rpc"]
)
assert server.compare_image(3, "viewer/reset_visualization.jpeg") is True

server.call(
VtkMeshView.mesh_prefix + VtkMeshView.mesh_schemas_dict["register"]["rpc"],
[{"id": post_id}],
)
assert server.compare_image(3, "viewer/import_project.jpeg") is True