Skip to content

Commit 68e9286

Browse files
committed
refactor database : integrate sqlite database for object management
- Replace file_name parameter with database lookup in registerObject - Add database connection methods to VtkView base class
1 parent 2eebac3 commit 68e9286

File tree

6 files changed

+58
-16
lines changed

6 files changed

+58
-16
lines changed

src/opengeodeweb_viewer/config.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
def default_config():
88
os.environ["DEFAULT_HOST"] = "localhost"
99
os.environ["DEFAULT_PORT"] = "1234"
10+
os.environ["DATABASE_PATH"] = os.path.join(os.environ.get("DATA_FOLDER_PATH", "/data/"), "project.db")
1011

1112

1213
def prod_config():
1314
default_config()
1415
os.environ["DATA_FOLDER_PATH"] = "/data/"
16+
os.environ["DATABASE_PATH"] = os.path.join("/data/", "project.db")
1517

1618

1719
def dev_config():
@@ -24,6 +26,7 @@ def dev_config():
2426
)
2527
if not os.path.exists(os.environ.get("DATA_FOLDER_PATH")):
2628
os.mkdir(os.environ.get("DATA_FOLDER_PATH"))
29+
os.environ["DATABASE_PATH"] = os.path.join(os.environ.get("DATA_FOLDER_PATH"), "project.db")
2730

2831

2932
def test_config(path):
@@ -48,7 +51,7 @@ def test_config(path):
4851
*test_ids,
4952
uploads_directory,
5053
structure_directory,
51-
]: # create directories for tests
54+
]:
5255
os.makedirs(
5356
(
5457
os.path.join(tmp_data_root, directory)

src/opengeodeweb_viewer/object/object_methods.py

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

16-
def registerObject(self, id, file_name, reader, filter, mapper):
16+
def registerObject(self, id):
17+
data = self.get_data_by_id(id)
18+
if not data:
19+
raise Exception(f"Données avec l'ID {id} non trouvées dans la base de données")
20+
21+
reader = vtk.vtkXMLGenericDataObjectReader()
22+
mapper = vtk.vtkDataSetMapper()
23+
mapper.SetInputConnection(reader.GetOutputPort())
1724
actor = vtk.vtkActor()
18-
self.register_object(id, reader, filter, actor, mapper, {})
19-
reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, id, file_name))
25+
26+
self.register_object(id, reader, {}, actor, mapper, {})
27+
28+
reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, id, data["viewable_file_name"]))
29+
2030
actor.SetMapper(mapper)
2131
mapper.SetColorModeToMapScalars()
2232
mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1)

src/opengeodeweb_viewer/rpc/mesh/mesh_protocols.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,11 @@ 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, file_name = params["id"], params["file_name"]
25+
id = params["id"]
2626
try:
27-
reader = vtk.vtkXMLGenericDataObjectReader()
28-
filter = {}
29-
mapper = vtk.vtkDataSetMapper()
30-
mapper.SetInputConnection(reader.GetOutputPort())
31-
self.registerObject(id, file_name, reader, filter, mapper)
27+
self.registerObject(id)
3228

29+
reader = self.get_object(id)["reader"]
3330
data_object = reader.GetOutput()
3431
data_set = vtk.vtkDataSet.SafeDownCast(data_object)
3532
cell_types = vtk.vtkCellTypes()
@@ -52,6 +49,7 @@ def registerMesh(self, params):
5249
self.get_data_base()[id]["max_dimension"] = max_dimension
5350
except Exception as e:
5451
print("error : ", str(e), flush=True)
52+
raise
5553

5654
@exportRpc(mesh_prefix + mesh_schemas_dict["deregister"]["rpc"])
5755
def deregisterMesh(self, params):

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,10 @@
55
"id": {
66
"type": "string",
77
"minLength": 1
8-
},
9-
"file_name": {
10-
"type": "string",
11-
"minLength": 1
128
}
139
},
1410
"required": [
15-
"id",
16-
"file_name"
11+
"id"
1712
],
1813
"additionalProperties": false
1914
}

src/opengeodeweb_viewer/vtk_protocol.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Standard library imports
22
import os
3+
import sqlite3
34

45
# Third party imports
56
import vtk
@@ -12,11 +13,37 @@ class VtkView(vtk_protocols.vtkWebProtocol):
1213
def __init__(self):
1314
super().__init__()
1415
self.DATA_FOLDER_PATH = os.getenv("DATA_FOLDER_PATH")
16+
self.DATABASE_PATH = os.getenv("DATABASE_PATH")
1517
self.DataReader = vtk.vtkXMLPolyDataReader()
1618
self.ImageReader = vtk.vtkXMLImageDataReader()
1719

1820
def get_data_base(self):
1921
return self.getSharedObject("db")
22+
23+
def get_db_connection(self):
24+
conn = sqlite3.connect(self.DATABASE_PATH)
25+
conn.row_factory = sqlite3.Row
26+
return conn
27+
28+
def get_data_by_id(self, data_id):
29+
conn = self.get_db_connection()
30+
try:
31+
cursor = conn.cursor()
32+
cursor.execute("SELECT * FROM data WHERE id = ?", (data_id,))
33+
data = cursor.fetchone()
34+
return dict(data) if data else None
35+
finally:
36+
conn.close()
37+
38+
def get_all_data(self):
39+
conn = self.get_db_connection()
40+
try:
41+
cursor = conn.cursor()
42+
cursor.execute("SELECT * FROM data")
43+
data = cursor.fetchall()
44+
return [dict(row) for row in data]
45+
finally:
46+
conn.close()
2047

2148
def get_renderer(self):
2249
return self.getSharedObject("renderer")

src/opengeodeweb_viewer/vtkw_server.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,20 @@ def add_arguments(parser):
5757
default=os.environ.get("DATA_FOLDER_PATH"),
5858
help="Path to the folder where data is stored",
5959
)
60+
parser.add_argument(
61+
"--database_path",
62+
default=os.environ.get("DATABASE_PATH"),
63+
help="Path to the SQLite database file",
64+
)
6065

6166
@staticmethod
6267
def configure(args):
6368
# Standard args
6469
_Server.authKey = args.authKey
70+
if args.data_folder_path:
71+
os.environ["DATA_FOLDER_PATH"] = args.data_folder_path
72+
if args.database_path:
73+
os.environ["DATABASE_PATH"] = args.database_path
6574

6675
def initialize(self):
6776
# Bring used components

0 commit comments

Comments
 (0)