From 98a698fd185fbcee5fb197cc2971177876fe348c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 25 Jul 2025 10:14:57 +0200 Subject: [PATCH 1/9] feat(folder_path): upload files ino upload folder into project folder added --- src/opengeodeweb_viewer/object/object_methods.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 2a55c42..320e2c2 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -16,9 +16,7 @@ def __init__(self): def registerObject(self, id, file_name, reader, filter, mapper): actor = vtk.vtkActor() self.register_object(id, reader, filter, actor, mapper, {}) - - reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, file_name)) - + reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, id, file_name)) actor.SetMapper(mapper) mapper.SetColorModeToMapScalars() mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1) From e63bb5c90b4083541bf417b4ade87b31985a8b12 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 28 Jul 2025 12:25:38 +0200 Subject: [PATCH 2/9] feat(folder_path): temporary fallbackto include both paths --- src/opengeodeweb_viewer/object/object_methods.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 320e2c2..b4114f8 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -16,7 +16,10 @@ def __init__(self): def registerObject(self, id, file_name, reader, filter, mapper): actor = vtk.vtkActor() self.register_object(id, reader, filter, actor, mapper, {}) - reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, id, file_name)) + full_path = os.path.join(self.DATA_FOLDER_PATH, id, file_name) + if not os.path.exists(full_path): + full_path = os.path.join(self.DATA_FOLDER_PATH, file_name) + reader.SetFileName(full_path) actor.SetMapper(mapper) mapper.SetColorModeToMapScalars() mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1) From c090f4f873e0177f9413e72ffef44b4cac70f557 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 28 Jul 2025 16:24:02 +0200 Subject: [PATCH 3/9] hard code logic in config.py to match most of the tests --- src/opengeodeweb_viewer/config.py | 55 ++++++++++++++++++- .../object/object_methods.py | 5 +- src/tests/conftest.py | 12 ++++ 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 76fc3ef..038c5ac 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -1,4 +1,7 @@ import os +from glob import glob +import tempfile +from shutil import copyfile, copytree from sys import platform @@ -26,7 +29,53 @@ def dev_config(): def test_config(path): default_config() - print(f"{os.path.dirname(__file__)=}", flush=True) - os.environ["DATA_FOLDER_PATH"] = os.path.join(path, "data") - print(f"{os.environ.get('DATA_FOLDER_PATH')=}", flush=True) + tmp_data_root = tempfile.mkdtemp(prefix="ogw_test_data_") + os.environ["DATA_FOLDER_PATH"] = tmp_data_root + + original_data_path = os.path.join(path, "data") + if not os.path.exists(original_data_path): + raise FileNotFoundError(f"Test data folder not found: {original_data_path}") + + valid_extensions = {".vtp", ".vti", ".vtu", ".vtm", ".png", ".jpeg", ".jpg"} + + legacy_id = "123456789" + legacy_dir = os.path.join(tmp_data_root, legacy_id) + os.makedirs(legacy_dir, exist_ok=True) + + for root, dirs, files in os.walk(original_data_path): + rel_root = os.path.relpath(root, original_data_path) + + # Copier sous-dossiers (comme cube/) dans leur ensemble + for d in dirs: + src_dir = os.path.join(root, d) + dst_dir = os.path.join(tmp_data_root, legacy_id, d) + if not os.path.exists(dst_dir): + copytree(src_dir, dst_dir, dirs_exist_ok=True) + print(f"šŸ“¦ Copied folder: {src_dir} → {dst_dir}", flush=True) + + for file_name in files: + ext = os.path.splitext(file_name)[1].lower() + if ext not in valid_extensions: + continue + + full_path = os.path.join(root, file_name) + uuid = os.path.splitext(file_name)[0] + + # uuid/filename + dst_dir = os.path.join(tmp_data_root, uuid) + os.makedirs(dst_dir, exist_ok=True) + dst = os.path.join(dst_dir, file_name) + copyfile(full_path, dst) + + # legacy path: 123456789/filename + legacy_dst = os.path.join(legacy_dir, file_name) + copyfile(full_path, legacy_dst) + + # root-level copy + root_level_dst = os.path.join(tmp_data_root, file_name) + copyfile(full_path, root_level_dst) + + print(f"šŸ“„ Copied file: {full_path} → {root_level_dst}", flush=True) + + print(f"\nāœ… DATA_FOLDER_PATH set to: {tmp_data_root}", flush=True) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index b4114f8..320e2c2 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -16,10 +16,7 @@ def __init__(self): def registerObject(self, id, file_name, reader, filter, mapper): actor = vtk.vtkActor() self.register_object(id, reader, filter, actor, mapper, {}) - full_path = os.path.join(self.DATA_FOLDER_PATH, id, file_name) - if not os.path.exists(full_path): - full_path = os.path.join(self.DATA_FOLDER_PATH, file_name) - reader.SetFileName(full_path) + reader.SetFileName(os.path.join(self.DATA_FOLDER_PATH, id, file_name)) actor.SetMapper(mapper) mapper.SetColorModeToMapScalars() mapper.SetResolveCoincidentTopologyLineOffsetParameters(1, -0.1) diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 3a77c6c..4fe6cbb 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -6,6 +6,7 @@ import vtk import os from opengeodeweb_viewer import config +import shutil class ServerMonitor: @@ -155,3 +156,14 @@ def server(xprocess): # clean up whole process tree afterwards xprocess.getinfo(name).terminate() monitor.print_log() + + +@pytest.fixture(scope="session", autouse=True) +def configure_test_environment(): + base_path = os.path.dirname(__file__) + config.test_config(base_path) + yield + tmp_data_path = os.environ.get("DATA_FOLDER_PATH") + if tmp_data_path and "ogw_test_data_" in tmp_data_path: + shutil.rmtree(tmp_data_path, ignore_errors=True) + print(f"Cleaned up test data folder: {tmp_data_path}", flush=True) \ No newline at end of file From d376f8b5781d868d9de5dde4e3cbe7729636e3d5 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Mon, 28 Jul 2025 14:24:23 +0000 Subject: [PATCH 4/9] Apply prepare changes --- src/tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 4fe6cbb..3834e19 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -166,4 +166,4 @@ def configure_test_environment(): tmp_data_path = os.environ.get("DATA_FOLDER_PATH") if tmp_data_path and "ogw_test_data_" in tmp_data_path: shutil.rmtree(tmp_data_path, ignore_errors=True) - print(f"Cleaned up test data folder: {tmp_data_path}", flush=True) \ No newline at end of file + print(f"Cleaned up test data folder: {tmp_data_path}", flush=True) From df4be439651a6ba84272cb3c117b46233a1987f3 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 28 Jul 2025 22:02:44 +0200 Subject: [PATCH 5/9] update test data structure and paths - Replace legacy single ID structure with multiple test IDs and new UUID-based structure - Add support for project/data UUID paths and uploads directory - Update texture path in VtkObjectView to include ID parameter --- src/opengeodeweb_viewer/config.py | 52 +++++++++---------- .../object/object_methods.py | 2 +- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 038c5ac..e53ed9a 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -1,5 +1,4 @@ import os -from glob import glob import tempfile from shutil import copyfile, copytree from sys import platform @@ -38,21 +37,27 @@ def test_config(path): raise FileNotFoundError(f"Test data folder not found: {original_data_path}") valid_extensions = {".vtp", ".vti", ".vtu", ".vtm", ".png", ".jpeg", ".jpg"} - - legacy_id = "123456789" - legacy_dir = os.path.join(tmp_data_root, legacy_id) - os.makedirs(legacy_dir, exist_ok=True) + + test_ids = ["123456789", "12345678"] + + for test_id in test_ids: + test_id_dir = os.path.join(tmp_data_root, test_id) + os.makedirs(test_id_dir, exist_ok=True) + + test_project_uuid = "test-project-uuid" + test_data_uuid = "test-data-uuid" + new_structure_dir = os.path.join(tmp_data_root, test_project_uuid, test_data_uuid) + os.makedirs(new_structure_dir, exist_ok=True) + + uploads_dir = os.path.join(tmp_data_root, test_project_uuid, "uploads") + os.makedirs(uploads_dir, exist_ok=True) for root, dirs, files in os.walk(original_data_path): - rel_root = os.path.relpath(root, original_data_path) - - # Copier sous-dossiers (comme cube/) dans leur ensemble for d in dirs: src_dir = os.path.join(root, d) - dst_dir = os.path.join(tmp_data_root, legacy_id, d) + dst_dir = os.path.join(tmp_data_root, test_ids[0], d) if not os.path.exists(dst_dir): copytree(src_dir, dst_dir, dirs_exist_ok=True) - print(f"šŸ“¦ Copied folder: {src_dir} → {dst_dir}", flush=True) for file_name in files: ext = os.path.splitext(file_name)[1].lower() @@ -60,22 +65,15 @@ def test_config(path): continue full_path = os.path.join(root, file_name) - uuid = os.path.splitext(file_name)[0] - - # uuid/filename - dst_dir = os.path.join(tmp_data_root, uuid) - os.makedirs(dst_dir, exist_ok=True) - dst = os.path.join(dst_dir, file_name) - copyfile(full_path, dst) - - # legacy path: 123456789/filename - legacy_dst = os.path.join(legacy_dir, file_name) - copyfile(full_path, legacy_dst) - - # root-level copy - root_level_dst = os.path.join(tmp_data_root, file_name) - copyfile(full_path, root_level_dst) - - print(f"šŸ“„ Copied file: {full_path} → {root_level_dst}", flush=True) + + for test_id in test_ids: + test_id_dst = os.path.join(tmp_data_root, test_id, file_name) + copyfile(full_path, test_id_dst) + + new_structure_dst = os.path.join(new_structure_dir, file_name) + copyfile(full_path, new_structure_dst) + + uploads_dst = os.path.join(uploads_dir, file_name) + copyfile(full_path, uploads_dst) print(f"\nāœ… DATA_FOLDER_PATH set to: {tmp_data_root}", flush=True) diff --git a/src/opengeodeweb_viewer/object/object_methods.py b/src/opengeodeweb_viewer/object/object_methods.py index 320e2c2..769e2dc 100644 --- a/src/opengeodeweb_viewer/object/object_methods.py +++ b/src/opengeodeweb_viewer/object/object_methods.py @@ -58,7 +58,7 @@ def applyTextures(self, id, textures): new_texture = vtk.vtkTexture() image_reader = vtk.vtkXMLImageDataReader() image_reader.SetFileName( - os.path.join(self.DATA_FOLDER_PATH, texture_file_name) + os.path.join(self.DATA_FOLDER_PATH, id, texture_file_name) ) shader_texture_name = f"VTK_TEXTURE_UNIT_{index}" From 7de595edc30ea0348be37142503e370f94f836d0 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Mon, 28 Jul 2025 20:02:59 +0000 Subject: [PATCH 6/9] Apply prepare changes --- src/opengeodeweb_viewer/config.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index e53ed9a..40b2bb5 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -37,18 +37,18 @@ def test_config(path): raise FileNotFoundError(f"Test data folder not found: {original_data_path}") valid_extensions = {".vtp", ".vti", ".vtu", ".vtm", ".png", ".jpeg", ".jpg"} - + test_ids = ["123456789", "12345678"] - + for test_id in test_ids: test_id_dir = os.path.join(tmp_data_root, test_id) os.makedirs(test_id_dir, exist_ok=True) - + test_project_uuid = "test-project-uuid" test_data_uuid = "test-data-uuid" new_structure_dir = os.path.join(tmp_data_root, test_project_uuid, test_data_uuid) os.makedirs(new_structure_dir, exist_ok=True) - + uploads_dir = os.path.join(tmp_data_root, test_project_uuid, "uploads") os.makedirs(uploads_dir, exist_ok=True) @@ -65,14 +65,14 @@ def test_config(path): continue full_path = os.path.join(root, file_name) - + for test_id in test_ids: test_id_dst = os.path.join(tmp_data_root, test_id, file_name) copyfile(full_path, test_id_dst) - + new_structure_dst = os.path.join(new_structure_dir, file_name) copyfile(full_path, new_structure_dst) - + uploads_dst = os.path.join(uploads_dir, file_name) copyfile(full_path, uploads_dst) From 4e1e732fe98628f0ebcbd6716a9cb2a20caec659 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 30 Jul 2025 13:52:25 +0200 Subject: [PATCH 7/9] refact test_config() --- src/opengeodeweb_viewer/config.py | 56 ++++++++++++------------------- 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 40b2bb5..ab6fc16 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -32,48 +32,34 @@ def test_config(path): tmp_data_root = tempfile.mkdtemp(prefix="ogw_test_data_") os.environ["DATA_FOLDER_PATH"] = tmp_data_root - original_data_path = os.path.join(path, "data") - if not os.path.exists(original_data_path): - raise FileNotFoundError(f"Test data folder not found: {original_data_path}") - - valid_extensions = {".vtp", ".vti", ".vtu", ".vtm", ".png", ".jpeg", ".jpg"} + src_data = os.path.join(path, "data") + if not os.path.isdir(src_data): + raise FileNotFoundError(f"Test data folder not found: {src_data}") test_ids = ["123456789", "12345678"] + valid_exts = {".vtp", ".vti", ".vtu", ".vtm", ".png", ".jpeg", ".jpg"} - for test_id in test_ids: - test_id_dir = os.path.join(tmp_data_root, test_id) - os.makedirs(test_id_dir, exist_ok=True) - - test_project_uuid = "test-project-uuid" - test_data_uuid = "test-data-uuid" - new_structure_dir = os.path.join(tmp_data_root, test_project_uuid, test_data_uuid) - os.makedirs(new_structure_dir, exist_ok=True) + project_uuid = "test-project-uuid" + data_uuid = "test-data-uuid" + uploads_directory = os.path.join(tmp_data_root, project_uuid, "uploads") + structure_directory = os.path.join(tmp_data_root, project_uuid, data_uuid) - uploads_dir = os.path.join(tmp_data_root, test_project_uuid, "uploads") - os.makedirs(uploads_dir, exist_ok=True) + for directory in [*test_ids, uploads_directory, structure_directory]: # create directories for tests + os.makedirs(os.path.join(tmp_data_root, directory) if isinstance(directory, str) else directory, exist_ok=True) - for root, dirs, files in os.walk(original_data_path): - for d in dirs: - src_dir = os.path.join(root, d) - dst_dir = os.path.join(tmp_data_root, test_ids[0], d) - if not os.path.exists(dst_dir): - copytree(src_dir, dst_dir, dirs_exist_ok=True) + for root, directories, files in os.walk(src_data): + for directory in directories: + dst = os.path.join(tmp_data_root, test_ids[0], directory) + copytree(os.path.join(root, directory), dst, dirs_exist_ok=True) - for file_name in files: - ext = os.path.splitext(file_name)[1].lower() - if ext not in valid_extensions: + for file in files: + if os.path.splitext(file)[1].lower() not in valid_exts: continue - full_path = os.path.join(root, file_name) - + src = os.path.join(root, file) for test_id in test_ids: - test_id_dst = os.path.join(tmp_data_root, test_id, file_name) - copyfile(full_path, test_id_dst) - - new_structure_dst = os.path.join(new_structure_dir, file_name) - copyfile(full_path, new_structure_dst) - - uploads_dst = os.path.join(uploads_dir, file_name) - copyfile(full_path, uploads_dst) + copyfile(src, os.path.join(tmp_data_root, test_id, file)) + copyfile(src, os.path.join(structure_directory, file)) + copyfile(src, os.path.join(uploads_directory, file)) - print(f"\nāœ… DATA_FOLDER_PATH set to: {tmp_data_root}", flush=True) + print(f"\nDATA_FOLDER_PATH set to: {tmp_data_root}", flush=True) From 4c8e4341ec662551a5ae22b1029e06bce0c0ef4c Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:52:40 +0000 Subject: [PATCH 8/9] Apply prepare changes --- src/opengeodeweb_viewer/config.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index ab6fc16..9102457 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -44,10 +44,21 @@ def test_config(path): uploads_directory = os.path.join(tmp_data_root, project_uuid, "uploads") structure_directory = os.path.join(tmp_data_root, project_uuid, data_uuid) - for directory in [*test_ids, uploads_directory, structure_directory]: # create directories for tests - os.makedirs(os.path.join(tmp_data_root, directory) if isinstance(directory, str) else directory, exist_ok=True) + for directory in [ + *test_ids, + uploads_directory, + structure_directory, + ]: # create directories for tests + os.makedirs( + ( + os.path.join(tmp_data_root, directory) + if isinstance(directory, str) + else directory + ), + exist_ok=True, + ) - for root, directories, files in os.walk(src_data): + for root, directories, files in os.walk(src_data): for directory in directories: dst = os.path.join(tmp_data_root, test_ids[0], directory) copytree(os.path.join(root, directory), dst, dirs_exist_ok=True) From d3c4ff535050ed77f73c7d11582729a0eeaab04e Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 30 Jul 2025 15:40:17 +0200 Subject: [PATCH 9/9] removed test_config from server(xprocess) removed img exts --- src/opengeodeweb_viewer/config.py | 2 +- src/tests/conftest.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index ab6fc16..ae9dbb9 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -37,7 +37,7 @@ def test_config(path): raise FileNotFoundError(f"Test data folder not found: {src_data}") test_ids = ["123456789", "12345678"] - valid_exts = {".vtp", ".vti", ".vtu", ".vtm", ".png", ".jpeg", ".jpg"} + valid_exts = {".vtp", ".vti", ".vtu", ".vtm"} project_uuid = "test-project-uuid" data_uuid = "test-data-uuid" diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 3834e19..e9f22e1 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -146,8 +146,6 @@ class Starter(ProcessStarter): def server(xprocess): name, Starter, Monitor = HELPER.get_xprocess_args() os.environ["PYTHON_ENV"] = "test" - config.test_config(os.path.dirname(__file__)) - print("server", os.environ.get("DATA_FOLDER_PATH"), flush=True) _, log = xprocess.ensure(name, Starter) print(log) monitor = Monitor(log)