Skip to content

Commit 17ddfe8

Browse files
committed
fix(database): adding database integration. stable version
1 parent 0221ba0 commit 17ddfe8

File tree

12 files changed

+374
-310
lines changed

12 files changed

+374
-310
lines changed

src/opengeodeweb_viewer/config.py

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,37 @@
77
def default_config():
88
os.environ["DEFAULT_HOST"] = "localhost"
99
os.environ["DEFAULT_PORT"] = "1234"
10-
os.environ["DATABASE_PATH"] = os.path.join(
11-
os.environ.get("DATA_FOLDER_PATH", "/data/"), "project.db"
12-
)
1310

1411

1512
def prod_config():
1613
default_config()
1714
os.environ["DATA_FOLDER_PATH"] = "/data/"
18-
os.environ["DATABASE_PATH"] = os.path.join("/data/", "project.db")
1915

2016

2117
def dev_config():
2218
default_config()
2319
if platform == "linux":
2420
os.environ["DATA_FOLDER_PATH"] = "/temp/OpenGeodeWeb_Data/"
2521
elif platform == "win32":
26-
os.environ["DATA_FOLDER_PATH"] = os.path.join(
27-
"C:/Users", os.getlogin(), "OpenGeodeWeb_Data"
28-
)
22+
user_home = os.path.expanduser("~")
23+
os.environ["DATA_FOLDER_PATH"] = os.path.join(user_home, "OpenGeodeWeb_Data")
2924
if not os.path.exists(os.environ.get("DATA_FOLDER_PATH")):
3025
os.mkdir(os.environ.get("DATA_FOLDER_PATH"))
31-
os.environ["DATABASE_PATH"] = os.path.join(
32-
os.environ.get("DATA_FOLDER_PATH"), "project.db"
33-
)
3426

27+
def _copy_test_assets(src_data: str, tmp_data_root: str, test_ids: list[str], valid_exts: set[str], uploads_directory: str, structure_directory: str):
28+
for root, directories, files in os.walk(src_data):
29+
for directory in directories:
30+
for test_id in test_ids:
31+
dst = os.path.join(tmp_data_root, test_id, directory)
32+
copytree(os.path.join(root, directory), dst, dirs_exist_ok=True)
33+
for file in files:
34+
if os.path.splitext(file)[1].lower() not in valid_exts:
35+
continue
36+
src = os.path.join(root, file)
37+
for test_id in test_ids:
38+
copyfile(src, os.path.join(tmp_data_root, test_id, file))
39+
copyfile(src, os.path.join(structure_directory, file))
40+
copyfile(src, os.path.join(uploads_directory, file))
3541

3642
def test_config(path):
3743
default_config()
@@ -43,11 +49,7 @@ def test_config(path):
4349
if not os.path.isdir(src_data):
4450
raise FileNotFoundError(f"Test data folder not found: {src_data}")
4551

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)
52+
test_ids = ["123456789", "12345678", "44556677", "22334455", "11223344", "33445566", "33445577"]
5153
valid_exts = {".vtp", ".vti", ".vtu", ".vtm"}
5254

5355
project_uuid = "test-project-uuid"
@@ -69,19 +71,13 @@ def test_config(path):
6971
exist_ok=True,
7072
)
7173

72-
for root, directories, files in os.walk(src_data):
73-
for directory in directories:
74-
dst = os.path.join(tmp_data_root, test_ids[0], directory)
75-
copytree(os.path.join(root, directory), dst, dirs_exist_ok=True)
76-
77-
for file in files:
78-
if os.path.splitext(file)[1].lower() not in valid_exts:
79-
continue
80-
81-
src = os.path.join(root, file)
82-
for test_id in test_ids:
83-
copyfile(src, os.path.join(tmp_data_root, test_id, file))
84-
copyfile(src, os.path.join(structure_directory, file))
85-
copyfile(src, os.path.join(uploads_directory, file))
74+
_copy_test_assets(
75+
src_data=src_data,
76+
tmp_data_root=tmp_data_root,
77+
test_ids=test_ids,
78+
valid_exts=valid_exts,
79+
uploads_directory=uploads_directory,
80+
structure_directory=structure_directory,
81+
)
8682

87-
print(f"\nDATA_FOLDER_PATH set to: {tmp_data_root}", flush=True)
83+
print(f"\nDATA_FOLDER_PATH set to: {tmp_data_root}", flush=True)

src/opengeodeweb_viewer/database/connection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def initialize(self, database_path: str):
2121

2222
try:
2323
self._engine = create_engine(f"sqlite:///{database_path}", echo=False)
24+
Base.metadata.create_all(self._engine)
2425
self._session_factory = sessionmaker(bind=self._engine)
2526
self._scoped_session = scoped_session(self._session_factory)
2627
print(f"Database initialized at: {database_path}")

src/opengeodeweb_viewer/rpc/model/model_protocols.py

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,43 @@ class VtkModelView(VtkObjectView):
2020
def __init__(self):
2121
super().__init__()
2222

23+
def _resolve_model_file_path(self, data_id: str, params):
24+
file_name = params.get("file_name")
25+
if file_name:
26+
return os.path.join(self.DATA_FOLDER_PATH, data_id, file_name)
27+
return self.get_data_file_path(data_id)
28+
29+
def _build_model_pipeline(self, file_path: str):
30+
reader = vtk.vtkXMLMultiBlockDataReader()
31+
reader.SetFileName(file_path)
32+
geometry = vtk.vtkGeometryFilter()
33+
geometry.SetInputConnection(reader.GetOutputPort())
34+
mapper = vtk.vtkCompositePolyDataMapper()
35+
mapper.SetInputConnection(geometry.GetOutputPort())
36+
attributes = vtkCompositeDataDisplayAttributes()
37+
mapper.SetCompositeDataDisplayAttributes(attributes)
38+
actor = vtk.vtkActor()
39+
actor.SetMapper(mapper)
40+
41+
return reader, geometry, mapper, actor
42+
2343
@exportRpc(model_prefix + model_schemas_dict["register"]["rpc"])
2444
def registerModel(self, params):
2545
validate_schema(params, self.model_schemas_dict["register"], self.model_prefix)
2646
data_id = params["id"]
2747
try:
28-
data = self.get_data(data_id)
29-
reader = vtk.vtkXMLMultiBlockDataReader()
30-
filter = vtk.vtkGeometryFilter()
31-
filter.SetInputConnection(reader.GetOutputPort())
32-
mapper = vtk.vtkCompositePolyDataMapper()
33-
mapper.SetInputConnection(filter.GetOutputPort())
34-
attributes = vtkCompositeDataDisplayAttributes()
35-
mapper.SetCompositeDataDisplayAttributes(attributes)
36-
37-
file_path = self.get_data_file_path(data_id)
38-
reader.SetFileName(file_path)
39-
40-
actor = vtk.vtkActor()
41-
actor.SetMapper(mapper)
42-
48+
_ = self.get_data(data_id)
49+
file_path = self._resolve_model_file_path(data_id, params)
50+
reader, geometry, mapper, actor = self._build_model_pipeline(file_path)
4351
renderer = self.get_renderer()
4452
renderer.AddActor(actor)
4553

46-
self.register_object(data_id, reader, filter, actor, mapper, {})
54+
self.register_object(data_id, reader, geometry, actor, mapper, {})
4755
self.get_object(data_id)["max_dimension"] = "default"
48-
56+
renderWindow = self.getView("-1")
57+
renderer.ResetCamera()
58+
renderWindow.Render()
59+
self.render()
4960
except Exception as e:
5061
print(f"Error registering model {data_id}: {str(e)}", flush=True)
5162
raise

0 commit comments

Comments
 (0)