From 2508e16dc95d3b240f0df1f79d28af468a0e228c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 18 Jun 2026 17:08:43 +0200 Subject: [PATCH 1/5] fix(project): Fix Import of models --- .../routes/blueprint_routes.py | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 2e65a884..577ba012 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -547,10 +547,11 @@ def export_project() -> flask.Response: for data_id, native_file in rows: base_dir = os.path.join(project_folder, data_id) if os.path.isdir(base_dir): - for f_name in os.listdir(base_dir): - file_path = os.path.join(base_dir, f_name) - if os.path.isfile(file_path): - zip_file.write(file_path, os.path.join(data_id, f_name)) + for root, directories, files in os.walk(base_dir): + for file_name in files: + file_path = os.path.join(root, file_name) + relative_path = os.path.relpath(file_path, base_dir) + zip_file.write(file_path, os.path.join(data_id, relative_path)) zip_file.writestr("snapshot.json", flask.json.dumps(params.snapshot)) @@ -620,9 +621,16 @@ def import_project() -> flask.Response: for data in rows: data_path = geode_functions.data_file_path(data.id) viewable_name = data.viewable_file + viewable_directory = os.path.join(data_path, "viewable") + has_component_viewables = os.path.isdir(viewable_directory) and bool( + os.listdir(viewable_directory) + ) + if viewable_name: - vpath = geode_functions.data_file_path(data.id, viewable_name) - if os.path.isfile(vpath): + viewable_path = geode_functions.data_file_path(data.id, viewable_name) + if os.path.isfile(viewable_path) and ( + data.viewer_object != "model" or has_component_viewables + ): continue native_file = str(data.native_file or "") From 64439c84eb8357434fd6bde57eec8dcc1eca0a3c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 19 Jun 2026 10:25:01 +0200 Subject: [PATCH 2/5] reduce delta --- src/opengeodeweb_back/routes/blueprint_routes.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 577ba012..ae7d5ae8 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -621,16 +621,11 @@ def import_project() -> flask.Response: for data in rows: data_path = geode_functions.data_file_path(data.id) viewable_name = data.viewable_file - viewable_directory = os.path.join(data_path, "viewable") - has_component_viewables = os.path.isdir(viewable_directory) and bool( - os.listdir(viewable_directory) - ) - if viewable_name: - viewable_path = geode_functions.data_file_path(data.id, viewable_name) - if os.path.isfile(viewable_path) and ( - data.viewer_object != "model" or has_component_viewables - ): + vpath = geode_functions.data_file_path(data.id, viewable_name) + viewable_dir = os.path.join(data_path, "viewable") + has_components = os.path.isdir(viewable_dir) and bool(os.listdir(viewable_dir)) + if os.path.isfile(vpath) and (data.viewer_object != "model" or has_components): continue native_file = str(data.native_file or "") From 3d2e7642f9a238d79da7ea73604dc91f802325cd Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Fri, 19 Jun 2026 08:48:27 +0000 Subject: [PATCH 3/5] Apply prepare changes --- requirements.txt | 1 - src/opengeodeweb_back/routes/blueprint_routes.py | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 76111aa7..ff9ae20e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -60,4 +60,3 @@ werkzeug==3.1.8 # flask # flask-cors -opengeodeweb-microservice==1.*,>=1.1.3 diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index ae7d5ae8..d97df6e5 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -624,8 +624,12 @@ def import_project() -> flask.Response: if viewable_name: vpath = geode_functions.data_file_path(data.id, viewable_name) viewable_dir = os.path.join(data_path, "viewable") - has_components = os.path.isdir(viewable_dir) and bool(os.listdir(viewable_dir)) - if os.path.isfile(vpath) and (data.viewer_object != "model" or has_components): + has_components = os.path.isdir(viewable_dir) and bool( + os.listdir(viewable_dir) + ) + if os.path.isfile(vpath) and ( + data.viewer_object != "model" or has_components + ): continue native_file = str(data.native_file or "") From b453e3728f8bc426fa77e1ba7e9546f766259d14 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 19 Jun 2026 11:56:19 +0200 Subject: [PATCH 4/5] test --- .../routes/blueprint_routes.py | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index d97df6e5..4b344310 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -535,23 +535,23 @@ def export_project() -> flask.Response: export_vease_path = os.path.join(project_folder, filename) with get_session() as session: - rows = session.query(Data.id, Data.native_file).all() + data_ids = [row.id for row in session.query(Data.id).all()] with zipfile.ZipFile( export_vease_path, "w", compression=zipfile.ZIP_DEFLATED ) as zip_file: database_root_path = os.path.join(project_folder, "project.db") - if os.path.isfile(database_root_path): - zip_file.write(database_root_path, "project.db") + zip_file.write(database_root_path, "project.db") - for data_id, native_file in rows: + for data_id in data_ids: base_dir = os.path.join(project_folder, data_id) - if os.path.isdir(base_dir): - for root, directories, files in os.walk(base_dir): - for file_name in files: - file_path = os.path.join(root, file_name) - relative_path = os.path.relpath(file_path, base_dir) - zip_file.write(file_path, os.path.join(data_id, relative_path)) + for root, directories, files in os.walk(base_dir): + for file_name in files: + file_path = os.path.join(root, file_name) + zip_file.write( + file_path, + os.path.join(data_id, os.path.relpath(file_path, base_dir)), + ) zip_file.writestr("snapshot.json", flask.json.dumps(params.snapshot)) @@ -624,21 +624,19 @@ def import_project() -> flask.Response: if viewable_name: vpath = geode_functions.data_file_path(data.id, viewable_name) viewable_dir = os.path.join(data_path, "viewable") - has_components = os.path.isdir(viewable_dir) and bool( - os.listdir(viewable_dir) - ) if os.path.isfile(vpath) and ( - data.viewer_object != "model" or has_components + data.viewer_object != "model" + or (os.path.isdir(viewable_dir) and os.listdir(viewable_dir)) ): continue - native_file = str(data.native_file or "") + native_file = data.native_file if not native_file: - continue + flask.abort(400, "Missing native file") native_full = geode_functions.data_file_path(data.id, native_file) if not os.path.isfile(native_full): - continue + flask.abort(400, f"Missing native file: {native_file}") geode_object = geode_functions.geode_object_from_string( data.geode_object From 97280674ad6fc37bbbb38b338da337ea22dcb5ed Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 19 Jun 2026 11:57:26 +0200 Subject: [PATCH 5/5] Revert "test" This reverts commit b453e3728f8bc426fa77e1ba7e9546f766259d14. --- .../routes/blueprint_routes.py | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 4b344310..d97df6e5 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -535,23 +535,23 @@ def export_project() -> flask.Response: export_vease_path = os.path.join(project_folder, filename) with get_session() as session: - data_ids = [row.id for row in session.query(Data.id).all()] + rows = session.query(Data.id, Data.native_file).all() with zipfile.ZipFile( export_vease_path, "w", compression=zipfile.ZIP_DEFLATED ) as zip_file: database_root_path = os.path.join(project_folder, "project.db") - zip_file.write(database_root_path, "project.db") + if os.path.isfile(database_root_path): + zip_file.write(database_root_path, "project.db") - for data_id in data_ids: + for data_id, native_file in rows: base_dir = os.path.join(project_folder, data_id) - for root, directories, files in os.walk(base_dir): - for file_name in files: - file_path = os.path.join(root, file_name) - zip_file.write( - file_path, - os.path.join(data_id, os.path.relpath(file_path, base_dir)), - ) + if os.path.isdir(base_dir): + for root, directories, files in os.walk(base_dir): + for file_name in files: + file_path = os.path.join(root, file_name) + relative_path = os.path.relpath(file_path, base_dir) + zip_file.write(file_path, os.path.join(data_id, relative_path)) zip_file.writestr("snapshot.json", flask.json.dumps(params.snapshot)) @@ -624,19 +624,21 @@ def import_project() -> flask.Response: if viewable_name: vpath = geode_functions.data_file_path(data.id, viewable_name) viewable_dir = os.path.join(data_path, "viewable") + has_components = os.path.isdir(viewable_dir) and bool( + os.listdir(viewable_dir) + ) if os.path.isfile(vpath) and ( - data.viewer_object != "model" - or (os.path.isdir(viewable_dir) and os.listdir(viewable_dir)) + data.viewer_object != "model" or has_components ): continue - native_file = data.native_file + native_file = str(data.native_file or "") if not native_file: - flask.abort(400, "Missing native file") + continue native_full = geode_functions.data_file_path(data.id, native_file) if not os.path.isfile(native_full): - flask.abort(400, f"Missing native file: {native_file}") + continue geode_object = geode_functions.geode_object_from_string( data.geode_object