Skip to content

Commit 0221ba0

Browse files
committed
adding tests. Need to correct config file to match uuids from test_data_helpers.
Is test_data_helpers needed ?
1 parent 9402b47 commit 0221ba0

File tree

13 files changed

+366
-154
lines changed

13 files changed

+366
-154
lines changed

src/opengeodeweb_viewer/config.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ def test_config(path):
4343
if not os.path.isdir(src_data):
4444
raise FileNotFoundError(f"Test data folder not found: {src_data}")
4545

46-
test_ids = ["123456789", "12345678"]
46+
test_ids = [
47+
"123456789",
48+
"12345678",
49+
] # needs to match IDs in test_data_helpers.py
50+
print(f"Creating test data folders in {tmp_data_root}", flush=True)
4751
valid_exts = {".vtp", ".vti", ".vtu", ".vtm"}
4852

4953
project_uuid = "test-project-uuid"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import os
2+
from typing import Optional
3+
from sqlalchemy import create_engine
4+
from sqlalchemy.orm import sessionmaker, scoped_session
5+
from sqlalchemy.engine import Engine
6+
7+
from opengeodeweb_microservice.database.data import Data
8+
from opengeodeweb_microservice.database.base import Base
9+
10+
11+
class DatabaseManager:
12+
def __init__(self):
13+
self._engine: Optional[Engine] = None
14+
self._session_factory = None
15+
self._scoped_session = None
16+
17+
def initialize(self, database_path: str):
18+
if not database_path:
19+
print("Warning: No database path provided")
20+
return False
21+
22+
try:
23+
self._engine = create_engine(f"sqlite:///{database_path}", echo=False)
24+
self._session_factory = sessionmaker(bind=self._engine)
25+
self._scoped_session = scoped_session(self._session_factory)
26+
print(f"Database initialized at: {database_path}")
27+
return True
28+
29+
except Exception as e:
30+
print(f"Error initializing database: {e}")
31+
return False
32+
33+
def get_session(self):
34+
return self._scoped_session() if self._scoped_session else None
35+
36+
def close(self):
37+
if self._scoped_session:
38+
self._scoped_session.remove()
39+
if self._engine:
40+
self._engine.dispose()
41+
42+
43+
# Global database manager instance
44+
db_manager = DatabaseManager()

src/opengeodeweb_viewer/object/object_methods.py

Lines changed: 48 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,20 @@ class VtkObjectView(VtkView):
1313
def __init__(self):
1414
super().__init__()
1515

16-
def registerObject(self, id):
17-
data = self.get_data_by_id(id)
18-
if not data:
19-
raise Exception(f"Data {id} not found in {self.DATA_FOLDER_PATH}")
16+
def registerObject(self, data_id):
17+
data = self.get_data(data_id)
2018

2119
reader = vtk.vtkXMLGenericDataObjectReader()
2220
mapper = vtk.vtkDataSetMapper()
2321
mapper.SetInputConnection(reader.GetOutputPort())
2422
actor = vtk.vtkActor()
2523

26-
self.register_object(id, reader, {}, actor, mapper, {})
27-
28-
reader.SetFileName(
29-
os.path.join(self.DATA_FOLDER_PATH, id, data["viewable_file_name"])
30-
)
24+
self.register_object(data_id, reader, {}, actor, mapper, {})
3125

26+
file_path = self.get_data_file_path(data_id)
27+
if not os.path.exists(file_path):
28+
raise Exception(f"Viewable file not found: {file_path}")
29+
reader.SetFileName(file_path)
3230
actor.SetMapper(mapper)
3331
mapper.SetColorModeToMapScalars()
3432
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)
@@ -42,19 +40,19 @@ def registerObject(self, id):
4240
renderWindow.Render()
4341
self.render()
4442

45-
def deregisterObject(self, id):
46-
actor = self.get_object(id)["actor"]
43+
def deregisterObject(self, data_id):
44+
actor = self.get_object(data_id)["actor"]
4745
renderWindow = self.getView("-1")
4846
renderer = renderWindow.GetRenderers().GetFirstRenderer()
4947
renderer.RemoveActor(actor)
50-
self.deregister_object(id)
48+
self.deregister_object(data_id)
5149
self.render()
5250

53-
def applyTextures(self, id, textures):
51+
def applyTextures(self, data_id, textures):
5452
textures_array = []
5553
images_reader_array = []
5654

57-
data = self.get_object(id)
55+
data = self.get_object(data_id)
5856
mapper = data["mapper"]
5957
actor = data["actor"]
6058
reader = data["reader"]
@@ -69,9 +67,10 @@ def applyTextures(self, id, textures):
6967

7068
new_texture = vtk.vtkTexture()
7169
image_reader = vtk.vtkXMLImageDataReader()
72-
image_reader.SetFileName(
73-
os.path.join(self.DATA_FOLDER_PATH, id, texture_file_name)
70+
texture_path = os.path.join(
71+
self.DATA_FOLDER_PATH, data_id, texture_file_name
7472
)
73+
image_reader.SetFileName(texture_path)
7574

7675
shader_texture_name = f"VTK_TEXTURE_UNIT_{index}"
7776
polydata_mapper.MapDataArrayToMultiTextureAttribute(
@@ -99,84 +98,84 @@ def applyTextures(self, id, textures):
9998

10099
self.render()
101100

102-
def SetVisibility(self, id, visibility):
103-
actor = self.get_object(id)["actor"]
101+
def SetVisibility(self, data_id, visibility):
102+
actor = self.get_object(data_id)["actor"]
104103
actor.SetVisibility(visibility)
105104
self.render()
106105

107-
def SetOpacity(self, id, opacity):
108-
actor = self.get_object(id)["actor"]
106+
def SetOpacity(self, data_id, opacity):
107+
actor = self.get_object(data_id)["actor"]
109108
actor.GetProperty().SetOpacity(opacity)
110109
self.render()
111110

112-
def SetColor(self, id, red, green, blue):
113-
mapper = self.get_object(id)["mapper"]
111+
def SetColor(self, data_id, red, green, blue):
112+
mapper = self.get_object(data_id)["mapper"]
114113
mapper.ScalarVisibilityOff()
115-
actor = self.get_object(id)["actor"]
114+
actor = self.get_object(data_id)["actor"]
116115
actor.GetProperty().SetColor([red / 255, green / 255, blue / 255])
117116
self.render()
118117

119-
def SetEdgesVisibility(self, id, visibility):
120-
actor = self.get_object(id)["actor"]
121-
max_dimension = self.get_object(id)["max_dimension"]
118+
def SetEdgesVisibility(self, data_id, visibility):
119+
actor = self.get_object(data_id)["actor"]
120+
max_dimension = self.get_object(data_id)["max_dimension"]
122121
if max_dimension == "edges":
123-
self.SetVisibility(id, visibility)
122+
self.SetVisibility(data_id, visibility)
124123
else:
125124
actor.GetProperty().SetEdgeVisibility(visibility)
126125
self.render()
127126

128-
def SetEdgesWidth(self, id, width):
129-
actor = self.get_object(id)["actor"]
127+
def SetEdgesWidth(self, data_id, width):
128+
actor = self.get_object(data_id)["actor"]
130129
actor.GetProperty().SetEdgeWidth(width)
131130
self.render()
132131

133-
def SetEdgesColor(self, id, red, green, blue):
134-
actor = self.get_object(id)["actor"]
135-
max_dimension = self.get_object(id)["max_dimension"]
132+
def SetEdgesColor(self, data_id, red, green, blue):
133+
actor = self.get_object(data_id)["actor"]
134+
max_dimension = self.get_object(data_id)["max_dimension"]
136135
if max_dimension == "edges":
137-
self.SetColor(id, red, green, blue)
136+
self.SetColor(data_id, red, green, blue)
138137
else:
139138
actor.GetProperty().SetEdgeColor([red / 255, green / 255, blue / 255])
140139
self.render()
141140

142-
def SetPointsVisibility(self, id, visibility):
143-
actor = self.get_object(id)["actor"]
144-
max_dimension = self.get_object(id)["max_dimension"]
141+
def SetPointsVisibility(self, data_id, visibility):
142+
actor = self.get_object(data_id)["actor"]
143+
max_dimension = self.get_object(data_id)["max_dimension"]
145144
if max_dimension == "points":
146-
self.SetVisibility(id, visibility)
145+
self.SetVisibility(data_id, visibility)
147146
else:
148147
actor.GetProperty().SetVertexVisibility(visibility)
149148
actor.GetProperty().SetEdgeVisibility(visibility)
150149
self.render()
151150

152-
def SetPointsSize(self, id, size):
153-
actor = self.get_object(id)["actor"]
151+
def SetPointsSize(self, data_id, size):
152+
actor = self.get_object(data_id)["actor"]
154153
actor.GetProperty().SetPointSize(size)
155154
self.render()
156155

157-
def SetPointsColor(self, id, red, green, blue):
158-
actor = self.get_object(id)["actor"]
159-
max_dimension = self.get_object(id)["max_dimension"]
156+
def SetPointsColor(self, data_id, red, green, blue):
157+
actor = self.get_object(data_id)["actor"]
158+
max_dimension = self.get_object(data_id)["max_dimension"]
160159
if max_dimension == "points":
161-
self.SetColor(id, red, green, blue)
160+
self.SetColor(data_id, red, green, blue)
162161
else:
163162
actor.GetProperty().SetVertexColor([red / 255, green / 255, blue / 255])
164163
self.render()
165164

166-
def SetBlocksVisibility(self, id, block_ids, visibility):
167-
mapper = self.get_object(id)["mapper"]
165+
def SetBlocksVisibility(self, data_id, block_ids, visibility):
166+
mapper = self.get_object(data_id)["mapper"]
168167
for block_id in block_ids:
169168
mapper.SetBlockVisibility(block_id, visibility)
170169
self.render()
171170

172-
def SetBlocksColor(self, id, block_ids, red, green, blue):
173-
mapper = self.get_object(id)["mapper"]
171+
def SetBlocksColor(self, data_id, block_ids, red, green, blue):
172+
mapper = self.get_object(data_id)["mapper"]
174173
for block_id in block_ids:
175174
mapper.SetBlockColor(block_id, [red / 255, green / 255, blue / 255])
176175
self.render()
177176

178-
def clearColors(self, id):
179-
db = self.get_object(id)
177+
def clearColors(self, data_id):
178+
db = self.get_object(data_id)
180179
mapper = db["mapper"]
181180
reader = db["reader"]
182181
reader.GetOutput().GetPointData().SetActiveScalars("")

src/opengeodeweb_viewer/rpc/generic/schemas/register.json

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,11 @@
1313
"id": {
1414
"type": "string",
1515
"minLength": 1
16-
},
17-
"file_name": {
18-
"type": "string",
19-
"minLength": 1
2016
}
2117
},
2218
"required": [
2319
"viewer_object",
24-
"id",
25-
"file_name"
20+
"id"
2621
],
2722
"additionalProperties": false
2823
}

src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ def __init__(self):
2222
@exportRpc(mesh_prefix + mesh_schemas_dict["register"]["rpc"])
2323
def registerMesh(self, params):
2424
validate_schema(params, self.mesh_schemas_dict["register"], self.mesh_prefix)
25-
id = params["id"]
25+
data_id = params["id"]
2626
try:
27-
self.registerObject(id)
28-
reader = self.get_object(id)["reader"]
27+
self.registerObject(data_id)
28+
reader = self.get_object(data_id)["reader"]
2929
data_object = reader.GetOutput()
3030
data_set = vtk.vtkDataSet.SafeDownCast(data_object)
3131
cell_types = vtk.vtkCellTypes()
@@ -45,63 +45,63 @@ def registerMesh(self, params):
4545
max_dimension = "polygons"
4646
elif max_id >= 7:
4747
max_dimension = "polyhedra"
48-
self.get_data_base()[id]["max_dimension"] = max_dimension
48+
self.get_data_base()[data_id]["max_dimension"] = max_dimension
4949
except Exception as e:
50-
print("error : ", str(e), flush=True)
50+
print(f"Error registering mesh {data_id}: {str(e)}", flush=True)
5151
raise
5252

5353
@exportRpc(mesh_prefix + mesh_schemas_dict["deregister"]["rpc"])
5454
def deregisterMesh(self, params):
5555
validate_schema(params, self.mesh_schemas_dict["deregister"], self.mesh_prefix)
56-
id = params["id"]
57-
self.deregisterObject(id)
56+
data_id = params["id"]
57+
self.deregisterObject(data_id)
5858

5959
@exportRpc(mesh_prefix + mesh_schemas_dict["visibility"]["rpc"])
6060
def SetMeshVisibility(self, params):
6161
validate_schema(params, self.mesh_schemas_dict["visibility"], self.mesh_prefix)
62-
id, visibility = params["id"], params["visibility"]
63-
self.SetVisibility(id, visibility)
62+
data_id, visibility = params["id"], params["visibility"]
63+
self.SetVisibility(data_id, visibility)
6464

6565
@exportRpc(mesh_prefix + mesh_schemas_dict["opacity"]["rpc"])
6666
def setMeshOpacity(self, params):
6767
validate_schema(params, self.mesh_schemas_dict["opacity"], self.mesh_prefix)
68-
id, opacity = params["id"], params["opacity"]
69-
self.SetOpacity(id, opacity)
68+
data_id, opacity = params["id"], params["opacity"]
69+
self.SetOpacity(data_id, opacity)
7070

7171
@exportRpc(mesh_prefix + mesh_schemas_dict["color"]["rpc"])
7272
def setMeshColor(self, params):
7373
validate_schema(params, self.mesh_schemas_dict["color"], self.mesh_prefix)
74-
id, red, green, blue = (
74+
data_id, red, green, blue = (
7575
params["id"],
7676
params["color"]["r"],
7777
params["color"]["g"],
7878
params["color"]["b"],
7979
)
80-
self.SetColor(id, red, green, blue)
80+
self.SetColor(data_id, red, green, blue)
8181

8282
@exportRpc(mesh_prefix + mesh_schemas_dict["apply_textures"]["rpc"])
8383
def meshApplyTextures(self, params):
8484
validate_schema(
8585
params, self.mesh_schemas_dict["apply_textures"], self.mesh_prefix
8686
)
87-
id, textures = params["id"], params["textures"]
88-
self.applyTextures(id, textures)
87+
data_id, textures = params["id"], params["textures"]
88+
self.applyTextures(data_id, textures)
8989

90-
def displayAttributeOnVertices(self, id, name):
91-
reader = self.get_object(id)["reader"]
90+
def displayAttributeOnVertices(self, data_id, name):
91+
reader = self.get_object(data_id)["reader"]
9292
points = reader.GetOutput().GetPointData()
9393
points.SetActiveScalars(name)
94-
mapper = self.get_object(id)["mapper"]
94+
mapper = self.get_object(data_id)["mapper"]
9595
mapper.ScalarVisibilityOn()
9696
mapper.SetScalarModeToUsePointData()
9797
mapper.SetScalarRange(points.GetScalars().GetRange())
9898
self.render()
9999

100-
def displayAttributeOnCells(self, id, name):
101-
reader = self.get_object(id)["reader"]
100+
def displayAttributeOnCells(self, data_id, name):
101+
reader = self.get_object(data_id)["reader"]
102102
cells = reader.GetOutput().GetCellData()
103103
cells.SetActiveScalars(name)
104-
mapper = self.get_object(id)["mapper"]
104+
mapper = self.get_object(data_id)["mapper"]
105105
mapper.ScalarVisibilityOn()
106106
mapper.SetScalarModeToUseCellData()
107107
mapper.SetScalarRange(cells.GetScalars().GetRange())

0 commit comments

Comments
 (0)