Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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 @@ -1135,6 +1135,14 @@
}
}
},
"reset_project": {
"$id": "opengeodeweb_viewer.reset_project",
"rpc": "reset_project",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"kill": {
"$id": "opengeodeweb_viewer.kill",
"rpc": "kill",
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 .reset_project import *
from .kill import *
7 changes: 7 additions & 0 deletions src/opengeodeweb_viewer/rpc/schemas/reset_project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"rpc": "reset_project",
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}
7 changes: 7 additions & 0 deletions src/opengeodeweb_viewer/rpc/schemas/reset_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 ResetProject(DataClassJsonMixin):
pass
37 changes: 37 additions & 0 deletions src/opengeodeweb_viewer/rpc/utils_protocols.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# Local application imports
from opengeodeweb_microservice.schemas import get_schemas_dict
from opengeodeweb_viewer.vtk_protocol import VtkView
from opengeodeweb_microservice.database import connection


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

@exportRpc(utils_prefix + utils_schemas_dict["reset_project"]["rpc"])
def resetProject(self, rpc_params: dict | None = None) -> None:
print(
f"{self.utils_prefix + self.utils_schemas_dict['reset_project']['rpc']}",
flush=True,
)
renderWindow = self.getView("-1")
renderer = renderWindow.GetRenderers().GetFirstRenderer()

renderer.RemoveAllViewProps()

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["reset_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
Loading