From 38294b2755531e627c1ebdf44150c84ff47136ff Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 4 Sep 2025 16:18:12 +0200 Subject: [PATCH 01/24] initial commit --- src/opengeodeweb_back/geode_functions.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 763a4a7e..5f4b836f 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -41,16 +41,15 @@ def object_priority(geode_object: str, file_absolute_path: str) -> int: return geode_object_value(geode_object)["object_priority"](file_absolute_path) -def load(geode_object: str, file_absolute_path: str): +def load(geode_object: str, file_absolute_path: str): # A virer return geode_object_value(geode_object)["load"](file_absolute_path) -def data_file_path(data_id: str, filename: str) -> str: +def data_file_path(data_id: str) -> str: data_folder_path = flask.current_app.config["DATA_FOLDER_PATH"] return os.path.join( data_folder_path, data_id, - werkzeug.utils.secure_filename(filename), ) From 6f356ca1bf4d52c092a9ea3df315342eb3a08ca4 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 4 Sep 2025 16:36:27 +0200 Subject: [PATCH 02/24] specifications --- src/opengeodeweb_back/geode_functions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 5f4b836f..3f35d7e4 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -41,7 +41,7 @@ def object_priority(geode_object: str, file_absolute_path: str) -> int: return geode_object_value(geode_object)["object_priority"](file_absolute_path) -def load(geode_object: str, file_absolute_path: str): # A virer +def load(geode_object: str, file_absolute_path: str): # La fonction n'est plus utile return geode_object_value(geode_object)["load"](file_absolute_path) @@ -52,7 +52,7 @@ def data_file_path(data_id: str) -> str: data_id, ) - +# c'est le point d'entrée après l'upload et l'inscription dans la database, virer les paramètres de fonctions réutilisants l'id de data afin de simplifier les appels et virer les params également dans les schemas. Corriger ensuite les erreurs dans les routes def load_data(geode_object: str, data_id: str, filename: str): file_absolute_path = data_file_path(data_id, filename) return load(geode_object, file_absolute_path) From 2c2006bd41428fa437c957d2e47e923fced003f7 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 4 Sep 2025 16:54:33 +0200 Subject: [PATCH 03/24] 3rd --- src/opengeodeweb_back/geode_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 3f35d7e4..b702c9aa 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -45,6 +45,7 @@ def load(geode_object: str, file_absolute_path: str): # La fonction n'est plus u return geode_object_value(geode_object)["load"](file_absolute_path) +# c'est le point d'entrée après l'upload et l'inscription dans la database, virer les paramètres de fonctions réutilisants l'id de data afin de simplifier les appels et virer les params également dans les schemas. Corriger ensuite les erreurs dans les routes def data_file_path(data_id: str) -> str: data_folder_path = flask.current_app.config["DATA_FOLDER_PATH"] return os.path.join( @@ -52,7 +53,6 @@ def data_file_path(data_id: str) -> str: data_id, ) -# c'est le point d'entrée après l'upload et l'inscription dans la database, virer les paramètres de fonctions réutilisants l'id de data afin de simplifier les appels et virer les params également dans les schemas. Corriger ensuite les erreurs dans les routes def load_data(geode_object: str, data_id: str, filename: str): file_absolute_path = data_file_path(data_id, filename) return load(geode_object, file_absolute_path) From 5c7f3d0387625c979d9b63e6748c08dd099ff8f9 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 5 Sep 2025 11:41:32 +0200 Subject: [PATCH 04/24] commit --- src/opengeodeweb_back/geode_functions.py | 33 +++++++++++++++---- .../schemas/polygon_attribute_names.json | 10 ------ .../schemas/polyhedron_attribute_names.json | 10 ------ .../routes/schemas/texture_coordinates.json | 12 +------ .../schemas/vertex_attribute_names.json | 10 ------ 5 files changed, 27 insertions(+), 48 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index b702c9aa..12b191a2 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -10,6 +10,7 @@ # Local application imports from .geode_objects import geode_objects_dict from . import utils_functions +from .data import Data def geode_object_value(geode_object: str): @@ -41,17 +42,35 @@ def object_priority(geode_object: str, file_absolute_path: str) -> int: return geode_object_value(geode_object)["object_priority"](file_absolute_path) -def load(geode_object: str, file_absolute_path: str): # La fonction n'est plus utile +def load(geode_object: str, file_absolute_path: str): return geode_object_value(geode_object)["load"](file_absolute_path) -# c'est le point d'entrée après l'upload et l'inscription dans la database, virer les paramètres de fonctions réutilisants l'id de data afin de simplifier les appels et virer les params également dans les schemas. Corriger ensuite les erreurs dans les routes -def data_file_path(data_id: str) -> str: +def data_file_path(data_id: str, filename: str = None) -> str: data_folder_path = flask.current_app.config["DATA_FOLDER_PATH"] - return os.path.join( - data_folder_path, - data_id, - ) + if filename: + return os.path.join(data_folder_path, data_id, filename) + return os.path.join(data_folder_path, data_id) + + +# Get data from database using data_id +def get_data_info(data_id: str): + data_entry = Data.query.get(data_id) + if not data_entry: + flask.abort(404, f"Data with id {data_id} not found") + return data_entry + + +# Using data_id, load data directly +def load_data_by_id(data_id: str): + data_entry = Data.query.get(data_id) + if not data_entry: + flask.abort(404, f"Data with id {data_id} not found") + + file_absolute_path = data_file_path(data_id, data_entry.native_file_name) + + return load(data_entry.geode_object, file_absolute_path) + def load_data(geode_object: str, data_id: str, filename: str): file_absolute_path = data_file_path(data_id, filename) diff --git a/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json b/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json index 200e722c..f7c66590 100644 --- a/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +++ b/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json @@ -5,22 +5,12 @@ ], "type": "object", "properties": { - "input_geode_object": { - "type": "string", - "minLength": 1 - }, - "filename": { - "type": "string", - "minLength": 1 - }, "id": { "type": "string", "minLength": 1 } }, "required": [ - "input_geode_object", - "filename", "id" ], "additionalProperties": false diff --git a/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json b/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json index 9eb74209..49477b1e 100644 --- a/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +++ b/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json @@ -5,22 +5,12 @@ ], "type": "object", "properties": { - "input_geode_object": { - "type": "string", - "minLength": 1 - }, - "filename": { - "type": "string", - "minLength": 1 - }, "id": { "type": "string", "minLength": 1 } }, "required": [ - "input_geode_object", - "filename", "id" ], "additionalProperties": false diff --git a/src/opengeodeweb_back/routes/schemas/texture_coordinates.json b/src/opengeodeweb_back/routes/schemas/texture_coordinates.json index 2c16e461..47a13554 100644 --- a/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +++ b/src/opengeodeweb_back/routes/schemas/texture_coordinates.json @@ -5,23 +5,13 @@ ], "type": "object", "properties": { - "input_geode_object": { - "type": "string", - "minLength": 1 - }, - "filename": { - "type": "string", - "minLength": 1 - }, "id": { "type": "string", "minLength": 1 } }, "required": [ - "input_geode_object", - "id", - "filename" + "id" ], "additionalProperties": false } \ No newline at end of file diff --git a/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json b/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json index b25abdb3..4f000dd0 100644 --- a/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +++ b/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json @@ -5,22 +5,12 @@ ], "type": "object", "properties": { - "input_geode_object": { - "type": "string", - "minLength": 1 - }, - "filename": { - "type": "string", - "minLength": 1 - }, "id": { "type": "string", "minLength": 1 } }, "required": [ - "input_geode_object", - "filename", "id" ], "additionalProperties": false From ff05710448f8e93eb1b3e88b7458e62e1d8a51b9 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 5 Sep 2025 12:00:24 +0200 Subject: [PATCH 05/24] blueprint model extract_uuids_endpoint removed unnecessary attr to mesh_component schema pull from latest next --- .../routes/models/blueprint_models.py | 6 +----- .../routes/models/schemas/mesh_components.json | 12 +----------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/opengeodeweb_back/routes/models/blueprint_models.py b/src/opengeodeweb_back/routes/models/blueprint_models.py index 3a812224..e06b6a02 100644 --- a/src/opengeodeweb_back/routes/models/blueprint_models.py +++ b/src/opengeodeweb_back/routes/models/blueprint_models.py @@ -50,11 +50,7 @@ def extract_model_uuids(model): def extract_uuids_endpoint(): utils_functions.validate_request(flask.request, mesh_components_json) - model = geode_functions.load_data( - flask.request.json["geode_object"], - flask.request.json["id"], - flask.request.json["filename"], - ) + model = geode_functions.load_data_by_id(flask.request.json["id"]) uuid_dict = extract_model_uuids(model) return flask.make_response({"uuid_dict": uuid_dict}, 200) diff --git a/src/opengeodeweb_back/routes/models/schemas/mesh_components.json b/src/opengeodeweb_back/routes/models/schemas/mesh_components.json index a2e4459b..d8f315aa 100644 --- a/src/opengeodeweb_back/routes/models/schemas/mesh_components.json +++ b/src/opengeodeweb_back/routes/models/schemas/mesh_components.json @@ -8,20 +8,10 @@ "id": { "type": "string", "minLength": 1 - }, - "filename": { - "type": "string", - "minLength": 1 - }, - "geode_object": { - "type": "string", - "minLength": 1 } }, "required": [ - "id", - "filename", - "geode_object" + "id" ], "additionalProperties": false } \ No newline at end of file From 48d3099d19369aa3546cc46c5ad9da06f72cbd9a Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 5 Sep 2025 17:08:35 +0200 Subject: [PATCH 06/24] cleaned geode_functions using data_id adapt routes and schemas --- src/opengeodeweb_back/geode_functions.py | 22 ++++++------- .../routes/blueprint_routes.py | 32 +++---------------- .../routes/models/blueprint_models.py | 2 -- src/opengeodeweb_back/utils_functions.py | 2 +- tests/test_models_routes.py | 14 +++++--- tests/test_routes.py | 25 ++++++++------- 6 files changed, 37 insertions(+), 60 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 485dc13a..f508ea38 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -11,6 +11,7 @@ from .geode_objects import geode_objects_dict from . import utils_functions from .data import Data +from .database import database def geode_object_value(geode_object: str): @@ -53,17 +54,9 @@ def data_file_path(data_id: str, filename: str = None) -> str: return os.path.join(data_folder_path, data_id) -# Get data from database using data_id -def get_data_info(data_id: str): - data_entry = Data.query.get(data_id) - if not data_entry: - flask.abort(404, f"Data with id {data_id} not found") - return data_entry - - -# Using data_id, load data directly def load_data_by_id(data_id: str): - data_entry = Data.query.get(data_id) + data_entry = database.session.get(Data, data_id) + print(data_entry.geode_object) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") @@ -72,9 +65,12 @@ def load_data_by_id(data_id: str): return load(data_entry.geode_object, file_absolute_path) -def load_data(geode_object: str, data_id: str, filename: str): - file_absolute_path = data_file_path(data_id, filename) - return load(geode_object, file_absolute_path) +def get_data_info(data_id: str): + from .data import Data + data_entry = database.session.get(Data, data_id) + if not data_entry: + flask.abort(404, f"Data with id {data_id} not found") + return data_entry def upload_file_path(filename): diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 1e0539cb..d4d21de8 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -290,14 +290,8 @@ def create_point(): ) def texture_coordinates(): utils_functions.validate_request(flask.request, texture_coordinates_json) - data = geode_functions.load_data( - flask.request.json["input_geode_object"], - flask.request.json["id"], - flask.request.json["filename"], - ) - + data = geode_functions.load_data_by_id(flask.request.json["id"]) texture_coordinates = data.texture_manager().texture_names() - return flask.make_response({"texture_coordinates": texture_coordinates}, 200) @@ -314,14 +308,8 @@ def texture_coordinates(): ) def vertex_attribute_names(): utils_functions.validate_request(flask.request, vertex_attribute_names_json) - data = geode_functions.load_data( - flask.request.json["input_geode_object"], - flask.request.json["id"], - flask.request.json["filename"], - ) - + data = geode_functions.load_data_by_id(flask.request.json["id"]) vertex_attribute_names = data.vertex_attribute_manager().attribute_names() - return flask.make_response( { "vertex_attribute_names": vertex_attribute_names, @@ -343,14 +331,8 @@ def vertex_attribute_names(): ) def polygon_attribute_names(): utils_functions.validate_request(flask.request, polygon_attribute_names_json) - data = geode_functions.load_data( - flask.request.json["input_geode_object"], - flask.request.json["id"], - flask.request.json["filename"], - ) - + data = geode_functions.load_data_by_id(flask.request.json["id"]) polygon_attribute_names = data.polygon_attribute_manager().attribute_names() - return flask.make_response( { "polygon_attribute_names": polygon_attribute_names, @@ -372,14 +354,8 @@ def polygon_attribute_names(): ) def polyhedron_attribute_names(): utils_functions.validate_request(flask.request, polyhedron_attribute_names_json) - data = geode_functions.load_data( - flask.request.json["input_geode_object"], - flask.request.json["id"], - flask.request.json["filename"], - ) - + data = geode_functions.load_data_by_id(flask.request.json["id"]) polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names() - return flask.make_response( { "polyhedron_attribute_names": polyhedron_attribute_names, diff --git a/src/opengeodeweb_back/routes/models/blueprint_models.py b/src/opengeodeweb_back/routes/models/blueprint_models.py index e06b6a02..fa36b8a8 100644 --- a/src/opengeodeweb_back/routes/models/blueprint_models.py +++ b/src/opengeodeweb_back/routes/models/blueprint_models.py @@ -49,8 +49,6 @@ def extract_model_uuids(model): @routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"]) def extract_uuids_endpoint(): utils_functions.validate_request(flask.request, mesh_components_json) - model = geode_functions.load_data_by_id(flask.request.json["id"]) - uuid_dict = extract_model_uuids(model) return flask.make_response({"uuid_dict": uuid_dict}, 200) diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 1fcd84aa..82feefc5 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -248,7 +248,7 @@ def generate_native_viewable_and_light_viewable_from_file( shutil.copy2(source_path, dest_path) additional_files_copied.append(additional_file.filename) - data = geode_functions.load_data(geode_object, temp_data_entry.id, input_filename) + data = geode_functions.load(geode_object, copied_full_path) database.session.delete(temp_data_entry) database.session.flush() diff --git a/tests/test_models_routes.py b/tests/test_models_routes.py index 98e0dd80..2dc2a363 100644 --- a/tests/test_models_routes.py +++ b/tests/test_models_routes.py @@ -3,6 +3,8 @@ import flask from src.opengeodeweb_back import geode_functions +from src.opengeodeweb_back.data import Data +from src.opengeodeweb_back.database import database def test_model_mesh_components(client, test_id): @@ -28,14 +30,16 @@ def test_model_mesh_components(client, test_id): def test_extract_brep_uuids(client, test_id): route = "/models/mesh_components" - brep_filename = "cube.og_brep" - json_data = {"id": test_id, "geode_object": "BRep", "filename": brep_filename} - - with client.application.app_context(): - data_path = geode_functions.data_file_path(json_data["id"], brep_filename) + + with client.application.app_context(): + data_entry = Data.create(name="test_brep", geode_object="BRep", input_file=brep_filename) + data_entry.native_file_name = brep_filename + database.session.commit() + data_path = geode_functions.data_file_path(test_id, brep_filename) os.makedirs(os.path.dirname(data_path), exist_ok=True) shutil.copy(f"./tests/data/{brep_filename}", data_path) + json_data = {"id": test_id} response = client.post(route, json=json_data) assert response.status_code == 200 diff --git a/tests/test_routes.py b/tests/test_routes.py index 3b9d5cf6..c8d7b773 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -7,6 +7,8 @@ # Local application imports from src.opengeodeweb_back import geode_functions, geode_objects, test_utils +from src.opengeodeweb_back.data import Data +from src.opengeodeweb_back.database import database def test_allowed_files(client): @@ -169,18 +171,25 @@ def get_full_data(): test_utils.test_route_wrong_params(client, route, get_full_data) -def test_texture_coordinates(client, test_id): +def test_texture_coordinates(client, test_id): with client.application.app_context(): - data_path = geode_functions.data_file_path(test_id, "hat.vtp") + data = Data.create( + name="hat", + geode_object="PolygonalSurface3D", + input_file="hat.vtp" + ) + data.native_file_name = "hat.vtp" + database.session.commit() + + data_path = geode_functions.data_file_path(data.id, "hat.vtp") + print(data_path) os.makedirs(os.path.dirname(data_path), exist_ok=True) shutil.copy("./tests/data/hat.vtp", data_path) response = client.post( "/texture_coordinates", json={ - "input_geode_object": "PolygonalSurface3D", - "id": test_id, - "filename": "hat.vtp", + "id": data.id }, ) assert response.status_code == 200 @@ -211,9 +220,7 @@ def test_vertex_attribute_names(client, test_id): def get_full_data(): return { - "input_geode_object": geode_object, "id": test_id, - "filename": f"test.{input_extension}", } response = client.post(route, json=get_full_data()) @@ -250,9 +257,7 @@ def test_polygon_attribute_names(client, test_id): def get_full_data(): return { - "input_geode_object": geode_object, "id": test_id, - "filename": f"test.{input_extension}", } response = client.post(route, json=get_full_data()) @@ -289,9 +294,7 @@ def test_polyhedron_attribute_names(client, test_id): def get_full_data(): return { - "input_geode_object": geode_object, "id": test_id, - "filename": f"test.{input_extension}", } response = client.post(route, json=get_full_data()) From 4c8dce461753715931e8ca2d0bf094f090c97f82 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 10:44:37 +0200 Subject: [PATCH 07/24] simplified tests --- tests/test_routes.py | 156 ++++++++++++++++--------------------------- 1 file changed, 59 insertions(+), 97 deletions(-) diff --git a/tests/test_routes.py b/tests/test_routes.py index c8d7b773..21b795f7 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -6,7 +6,7 @@ from werkzeug.datastructures import FileStorage # Local application imports -from src.opengeodeweb_back import geode_functions, geode_objects, test_utils +from src.opengeodeweb_back import geode_functions, test_utils from src.opengeodeweb_back.data import Data from src.opengeodeweb_back.database import database @@ -201,113 +201,75 @@ def test_texture_coordinates(client, test_id): def test_vertex_attribute_names(client, test_id): route = f"/vertex_attribute_names" - for geode_object, value in geode_objects.geode_objects_dict().items(): - if value["object_type"] == "mesh": - input_extensions = geode_functions.geode_object_input_extensions( - geode_object - ) - if "elements" in value: - elements = geode_functions.get_elements(geode_object) - if "points" in elements: - for input_extension in input_extensions: - if ( - geode_functions.is_loadable( - geode_object, - os.path.join("./data", f"test.{input_extension}"), - ) - > 0.0 - ): - - def get_full_data(): - return { - "id": test_id, - } - - response = client.post(route, json=get_full_data()) - assert response.status_code == 200 - vertex_attribute_names = response.json[ - "vertex_attribute_names" - ] - assert type(vertex_attribute_names) is list - for vertex_attribute_name in vertex_attribute_names: - assert type(vertex_attribute_name) is str + + with client.application.app_context(): + data = Data.create( + name="test_mesh", + geode_object="PolygonalSurface3D", + input_file="test.vtp" + ) + data.native_file_name = "test.vtp" + database.session.commit() - # Test all params - test_utils.test_route_wrong_params(client, route, get_full_data) + data_path = geode_functions.data_file_path(data.id, "test.vtp") + os.makedirs(os.path.dirname(data_path), exist_ok=True) + if os.path.exists("./tests/data/hat.vtp"): + shutil.copy("./tests/data/hat.vtp", data_path) + + response = client.post(route, json={"id": data.id}) + assert response.status_code == 200 + vertex_attribute_names = response.json["vertex_attribute_names"] + assert type(vertex_attribute_names) is list + for vertex_attribute_name in vertex_attribute_names: + assert type(vertex_attribute_name) is str def test_polygon_attribute_names(client, test_id): route = f"/polygon_attribute_names" - for geode_object, value in geode_objects.geode_objects_dict().items(): - if value["object_type"] == "mesh": - input_extensions = geode_functions.geode_object_input_extensions( - geode_object - ) - if "elements" in value: - elements = geode_functions.get_elements(geode_object) - if "polygons" in elements: - for input_extension in input_extensions: - if ( - geode_functions.is_loadable( - geode_object, - os.path.join("./data", f"test.{input_extension}"), - ) - > 0.0 - ): - - def get_full_data(): - return { - "id": test_id, - } - - response = client.post(route, json=get_full_data()) - assert response.status_code == 200 - polygon_attribute_names = response.json[ - "polygon_attribute_names" - ] - assert type(polygon_attribute_names) is list - for polygon_attribute_name in polygon_attribute_names: - assert type(polygon_attribute_name) is str + + with client.application.app_context(): + data = Data.create( + name="test_mesh", + geode_object="PolygonalSurface3D", + input_file="test.vtp" + ) + data.native_file_name = "test.vtp" + database.session.commit() - # Test all params - test_utils.test_route_wrong_params(client, route, get_full_data) + data_path = geode_functions.data_file_path(data.id, "test.vtp") + os.makedirs(os.path.dirname(data_path), exist_ok=True) + shutil.copy("./tests/data/test.vtp", data_path) + + response = client.post(route, json={"id": data.id}) + assert response.status_code == 200 + polygon_attribute_names = response.json["polygon_attribute_names"] + assert type(polygon_attribute_names) is list + for polygon_attribute_name in polygon_attribute_names: + assert type(polygon_attribute_name) is str def test_polyhedron_attribute_names(client, test_id): route = f"/polyhedron_attribute_names" - for geode_object, value in geode_objects.geode_objects_dict().items(): - if value["object_type"] == "mesh": - input_extensions = geode_functions.geode_object_input_extensions( - geode_object - ) - if "elements" in value: - elements = geode_functions.get_elements(geode_object) - if "polyhedrons" in elements: - for input_extension in input_extensions: - if ( - geode_functions.is_loadable( - geode_object, - os.path.join("./data", f"test.{input_extension}"), - ) - > 0.0 - ): - - def get_full_data(): - return { - "id": test_id, - } - - response = client.post(route, json=get_full_data()) - assert response.status_code == 200 - polyhedron_attribute_names = response.json[ - "polyhedron_attribute_names" - ] - assert type(polyhedron_attribute_names) is list - for polyhedron_attribute_name in polyhedron_attribute_names: - assert type(polyhedron_attribute_name) is str + + with client.application.app_context(): + data = Data.create( + name="test_mesh", + geode_object="PolyhedralSolid3D", + input_file="test.vtu" + ) + data.native_file_name = "test.vtu" + database.session.commit() - # Test all params - test_utils.test_route_wrong_params(client, route, get_full_data) + data_path = geode_functions.data_file_path(data.id, "test.vtu") + os.makedirs(os.path.dirname(data_path), exist_ok=True) + shutil.copy("./tests/data/test.vtu", data_path) + + response = client.post(route, json={"id": data.id}) + assert response.status_code == 200 + polyhedron_attribute_names = response.json["polyhedron_attribute_names"] + assert type(polyhedron_attribute_names) is list + for polyhedron_attribute_name in polyhedron_attribute_names: + assert type(polyhedron_attribute_name) is str def test_create_point(client): From 7bc24affc366cbe39dd212a955b5331d37fd5675 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 11:04:58 +0200 Subject: [PATCH 08/24] added classmethod to have simplified writing renamed test --- src/opengeodeweb_back/data.py | 5 +++++ src/opengeodeweb_back/geode_functions.py | 4 ++-- tests/test_utils_functions.py | 8 ++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/opengeodeweb_back/data.py b/src/opengeodeweb_back/data.py index ce3b6a13..13563234 100644 --- a/src/opengeodeweb_back/data.py +++ b/src/opengeodeweb_back/data.py @@ -42,3 +42,8 @@ def create( database.session.add(data_entry) database.session.flush() return data_entry + + + @classmethod + def get(cls, data_id: str) -> "Data | None": + return database.session.get(cls, data_id) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index f508ea38..b9c6c592 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -55,7 +55,7 @@ def data_file_path(data_id: str, filename: str = None) -> str: def load_data_by_id(data_id: str): - data_entry = database.session.get(Data, data_id) + data_entry = Data.get(data_id) print(data_entry.geode_object) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") @@ -67,7 +67,7 @@ def load_data_by_id(data_id: str): def get_data_info(data_id: str): from .data import Data - data_entry = database.session.get(Data, data_id) + data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") return data_entry diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index cea87147..432ba166 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -119,7 +119,7 @@ def test_save_all_viewables_and_return_info(client): assert result["geode_object"] == geode_object assert result["input_files"] == input_file - db_entry = database.session.get(Data, result["id"]) + db_entry = Data.get(result["id"]) assert db_entry is not None assert db_entry.name == data.name() assert db_entry.native_file_name == result["native_file_name"] @@ -132,7 +132,7 @@ def test_save_all_viewables_and_return_info(client): assert os.path.exists(expected_data_path) -def test_save_all_viewables_commits_to_db_properly(client): +def test_save_all_viewables_commits_to_db(client): app = client.application with app.app_context(): geode_object = "BRep" @@ -142,11 +142,11 @@ def test_save_all_viewables_commits_to_db_properly(client): geode_object, data, input_file ) data_id = result["id"] - db_entry_before = database.session.get(Data, data_id) + db_entry_before = Data.get(data_id) assert db_entry_before is not None assert db_entry_before.native_file_name == result["native_file_name"] database.session.rollback() - db_entry_after = database.session.get(Data, data_id) + db_entry_after = Data.get(data_id) assert ( db_entry_after is not None ), "database.session.commit() was not called - entry missing after rollback" From 87fe6cc4e3b0350c9d7dd1702aaa5353c70c12d8 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 11:46:17 +0200 Subject: [PATCH 09/24] removed "name" from Data model --- src/opengeodeweb_back/data.py | 6 +++--- src/opengeodeweb_back/geode_functions.py | 1 - src/opengeodeweb_back/utils_functions.py | 3 --- tests/test_models_routes.py | 11 ++++++++--- tests/test_routes.py | 6 ------ tests/test_utils_functions.py | 4 ---- 6 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/opengeodeweb_back/data.py b/src/opengeodeweb_back/data.py index 13563234..de109bba 100644 --- a/src/opengeodeweb_back/data.py +++ b/src/opengeodeweb_back/data.py @@ -10,7 +10,7 @@ class Data(Base): id: Mapped[str] = mapped_column( String, primary_key=True, default=lambda: str(uuid.uuid4()).replace("-", "") ) - name: Mapped[str] = mapped_column(String, nullable=False) + # name: Mapped[str] = mapped_column(String, nullable=False) native_file_name: Mapped[str] = mapped_column(String, nullable=False) viewable_file_name: Mapped[str] = mapped_column(String, nullable=False) geode_object: Mapped[str] = mapped_column(String, nullable=False) @@ -21,7 +21,7 @@ class Data(Base): @staticmethod def create( - name: str, + # name: str, geode_object: str, input_file: str | None = None, additional_files: list[str] | None = None, @@ -30,7 +30,7 @@ def create( additional_files = additional_files if additional_files is not None else [] data_entry = Data( - name=name, + # name=name, geode_object=geode_object, input_file=input_file, additional_files=additional_files, diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index b9c6c592..b2b6de7a 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -56,7 +56,6 @@ def data_file_path(data_id: str, filename: str = None) -> str: def load_data_by_id(data_id: str): data_entry = Data.get(data_id) - print(data_entry.geode_object) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 82feefc5..d27b1246 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -170,7 +170,6 @@ def save_all_viewables_and_return_info( additional_files = [] data_entry = Data.create( - name=data.name(), geode_object=geode_object, input_file=input_file, additional_files=additional_files, @@ -197,7 +196,6 @@ def save_all_viewables_and_return_info( database.session.commit() return { - "name": data_entry.name, "native_file_name": data_entry.native_file_name, "viewable_file_name": data_entry.viewable_file_name, "id": data_entry.id, @@ -219,7 +217,6 @@ def generate_native_viewable_and_light_viewable_from_file( geode_object: str, input_filename: str ) -> dict[str, Any]: temp_data_entry = Data.create( - name="temp", geode_object=geode_object, input_file=input_filename, additional_files=[], diff --git a/tests/test_models_routes.py b/tests/test_models_routes.py index 2dc2a363..a67894b9 100644 --- a/tests/test_models_routes.py +++ b/tests/test_models_routes.py @@ -33,13 +33,18 @@ def test_extract_brep_uuids(client, test_id): brep_filename = "cube.og_brep" with client.application.app_context(): - data_entry = Data.create(name="test_brep", geode_object="BRep", input_file=brep_filename) + data_entry = Data.create( + geode_object="BRep", + input_file=brep_filename + ) data_entry.native_file_name = brep_filename database.session.commit() - data_path = geode_functions.data_file_path(test_id, brep_filename) + + data_path = geode_functions.data_file_path(data_entry.id, brep_filename) os.makedirs(os.path.dirname(data_path), exist_ok=True) shutil.copy(f"./tests/data/{brep_filename}", data_path) - json_data = {"id": test_id} + + json_data = {"id": data_entry.id} response = client.post(route, json=json_data) assert response.status_code == 200 diff --git a/tests/test_routes.py b/tests/test_routes.py index 21b795f7..7f2132d3 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -153,8 +153,6 @@ def get_full_data(): # Normal test with filename 'corbi.og_brep' response = client.post(route, json=get_full_data()) assert response.status_code == 200 - name = response.json["name"] - assert type(name) is str native_file_name = response.json["native_file_name"] assert type(native_file_name) is str viewable_file_name = response.json["viewable_file_name"] @@ -174,7 +172,6 @@ def get_full_data(): def test_texture_coordinates(client, test_id): with client.application.app_context(): data = Data.create( - name="hat", geode_object="PolygonalSurface3D", input_file="hat.vtp" ) @@ -204,7 +201,6 @@ def test_vertex_attribute_names(client, test_id): with client.application.app_context(): data = Data.create( - name="test_mesh", geode_object="PolygonalSurface3D", input_file="test.vtp" ) @@ -229,7 +225,6 @@ def test_polygon_attribute_names(client, test_id): with client.application.app_context(): data = Data.create( - name="test_mesh", geode_object="PolygonalSurface3D", input_file="test.vtp" ) @@ -253,7 +248,6 @@ def test_polyhedron_attribute_names(client, test_id): with client.application.app_context(): data = Data.create( - name="test_mesh", geode_object="PolyhedralSolid3D", input_file="test.vtu" ) diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index 432ba166..8f748bba 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -108,7 +108,6 @@ def test_save_all_viewables_and_return_info(client): ) assert isinstance(result, dict) - assert result["name"] == data.name() assert result["native_file_name"].startswith("native.") assert result["viewable_file_name"].endswith(".vtm") assert isinstance(result["id"], str) @@ -121,7 +120,6 @@ def test_save_all_viewables_and_return_info(client): db_entry = Data.get(result["id"]) assert db_entry is not None - assert db_entry.name == data.name() assert db_entry.native_file_name == result["native_file_name"] assert db_entry.viewable_file_name == result["viewable_file_name"] assert db_entry.geode_object == geode_object @@ -166,7 +164,6 @@ def test_generate_native_viewable_and_light_viewable_from_object(client): ) assert isinstance(result, dict) - assert isinstance(result["name"], str) assert isinstance(result["native_file_name"], str) assert result["native_file_name"].startswith("native.") assert isinstance(result["viewable_file_name"], str) @@ -189,7 +186,6 @@ def test_generate_native_viewable_and_light_viewable_from_file(client): ) assert isinstance(result, dict) - assert isinstance(result["name"], str) assert isinstance(result["native_file_name"], str) assert result["native_file_name"].startswith("native.") assert isinstance(result["viewable_file_name"], str) From 5f8752995c676a1d12bfc0ef38feaf0276e28e6c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 11:51:21 +0200 Subject: [PATCH 10/24] fix(database): remove unused model params, use db-generated id for data_folder_path, add get method --- src/opengeodeweb_back/data.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/opengeodeweb_back/data.py b/src/opengeodeweb_back/data.py index de109bba..3aa3d198 100644 --- a/src/opengeodeweb_back/data.py +++ b/src/opengeodeweb_back/data.py @@ -21,7 +21,6 @@ class Data(Base): @staticmethod def create( - # name: str, geode_object: str, input_file: str | None = None, additional_files: list[str] | None = None, @@ -30,7 +29,6 @@ def create( additional_files = additional_files if additional_files is not None else [] data_entry = Data( - # name=name, geode_object=geode_object, input_file=input_file, additional_files=additional_files, From 743c5e948a0b02077193a6c5fe3c44c0d75b5e22 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Mon, 8 Sep 2025 09:52:40 +0000 Subject: [PATCH 11/24] Apply prepare changes --- src/opengeodeweb_back/data.py | 1 - src/opengeodeweb_back/geode_functions.py | 5 ++-- tests/test_models_routes.py | 13 ++++------ tests/test_routes.py | 32 +++++++----------------- 4 files changed, 17 insertions(+), 34 deletions(-) diff --git a/src/opengeodeweb_back/data.py b/src/opengeodeweb_back/data.py index 3aa3d198..28a5f176 100644 --- a/src/opengeodeweb_back/data.py +++ b/src/opengeodeweb_back/data.py @@ -41,7 +41,6 @@ def create( database.session.flush() return data_entry - @classmethod def get(cls, data_id: str) -> "Data | None": return database.session.get(cls, data_id) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index b2b6de7a..9760f154 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -58,14 +58,15 @@ def load_data_by_id(data_id: str): data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") - + file_absolute_path = data_file_path(data_id, data_entry.native_file_name) - + return load(data_entry.geode_object, file_absolute_path) def get_data_info(data_id: str): from .data import Data + data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") diff --git a/tests/test_models_routes.py b/tests/test_models_routes.py index a67894b9..2bacdc27 100644 --- a/tests/test_models_routes.py +++ b/tests/test_models_routes.py @@ -31,19 +31,16 @@ def test_model_mesh_components(client, test_id): def test_extract_brep_uuids(client, test_id): route = "/models/mesh_components" brep_filename = "cube.og_brep" - - with client.application.app_context(): - data_entry = Data.create( - geode_object="BRep", - input_file=brep_filename - ) + + with client.application.app_context(): + data_entry = Data.create(geode_object="BRep", input_file=brep_filename) data_entry.native_file_name = brep_filename database.session.commit() - + data_path = geode_functions.data_file_path(data_entry.id, brep_filename) os.makedirs(os.path.dirname(data_path), exist_ok=True) shutil.copy(f"./tests/data/{brep_filename}", data_path) - + json_data = {"id": data_entry.id} response = client.post(route, json=json_data) diff --git a/tests/test_routes.py b/tests/test_routes.py index 7f2132d3..ed1af514 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -169,12 +169,9 @@ def get_full_data(): test_utils.test_route_wrong_params(client, route, get_full_data) -def test_texture_coordinates(client, test_id): +def test_texture_coordinates(client, test_id): with client.application.app_context(): - data = Data.create( - geode_object="PolygonalSurface3D", - input_file="hat.vtp" - ) + data = Data.create(geode_object="PolygonalSurface3D", input_file="hat.vtp") data.native_file_name = "hat.vtp" database.session.commit() @@ -185,9 +182,7 @@ def test_texture_coordinates(client, test_id): response = client.post( "/texture_coordinates", - json={ - "id": data.id - }, + json={"id": data.id}, ) assert response.status_code == 200 texture_coordinates = response.json["texture_coordinates"] @@ -198,12 +193,9 @@ def test_texture_coordinates(client, test_id): def test_vertex_attribute_names(client, test_id): route = f"/vertex_attribute_names" - + with client.application.app_context(): - data = Data.create( - geode_object="PolygonalSurface3D", - input_file="test.vtp" - ) + data = Data.create(geode_object="PolygonalSurface3D", input_file="test.vtp") data.native_file_name = "test.vtp" database.session.commit() @@ -222,12 +214,9 @@ def test_vertex_attribute_names(client, test_id): def test_polygon_attribute_names(client, test_id): route = f"/polygon_attribute_names" - + with client.application.app_context(): - data = Data.create( - geode_object="PolygonalSurface3D", - input_file="test.vtp" - ) + data = Data.create(geode_object="PolygonalSurface3D", input_file="test.vtp") data.native_file_name = "test.vtp" database.session.commit() @@ -245,12 +234,9 @@ def test_polygon_attribute_names(client, test_id): def test_polyhedron_attribute_names(client, test_id): route = f"/polyhedron_attribute_names" - + with client.application.app_context(): - data = Data.create( - geode_object="PolyhedralSolid3D", - input_file="test.vtu" - ) + data = Data.create(geode_object="PolyhedralSolid3D", input_file="test.vtu") data.native_file_name = "test.vtu" database.session.commit() From 6203f452bf705e5b705c41b0bd9daf4aa9bdbced Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 12:15:25 +0200 Subject: [PATCH 12/24] removed comments changed classmethod to staticmethod in Data model renamed load function --- src/opengeodeweb_back/data.py | 3 +-- src/opengeodeweb_back/geode_functions.py | 4 ++-- src/opengeodeweb_back/routes/blueprint_routes.py | 8 ++++---- src/opengeodeweb_back/routes/models/blueprint_models.py | 2 +- tests/test_utils_functions.py | 6 +++--- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/opengeodeweb_back/data.py b/src/opengeodeweb_back/data.py index 28a5f176..fca0d983 100644 --- a/src/opengeodeweb_back/data.py +++ b/src/opengeodeweb_back/data.py @@ -10,7 +10,6 @@ class Data(Base): id: Mapped[str] = mapped_column( String, primary_key=True, default=lambda: str(uuid.uuid4()).replace("-", "") ) - # name: Mapped[str] = mapped_column(String, nullable=False) native_file_name: Mapped[str] = mapped_column(String, nullable=False) viewable_file_name: Mapped[str] = mapped_column(String, nullable=False) geode_object: Mapped[str] = mapped_column(String, nullable=False) @@ -41,6 +40,6 @@ def create( database.session.flush() return data_entry - @classmethod + @staticmethod def get(cls, data_id: str) -> "Data | None": return database.session.get(cls, data_id) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 9760f154..8357eef8 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -54,8 +54,8 @@ def data_file_path(data_id: str, filename: str = None) -> str: return os.path.join(data_folder_path, data_id) -def load_data_by_id(data_id: str): - data_entry = Data.get(data_id) +def load_data(data_id: str): + data_entry = Data.get(Data, data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index d4d21de8..6b55ea0c 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -290,7 +290,7 @@ def create_point(): ) def texture_coordinates(): utils_functions.validate_request(flask.request, texture_coordinates_json) - data = geode_functions.load_data_by_id(flask.request.json["id"]) + data = geode_functions.load_data(flask.request.json["id"]) texture_coordinates = data.texture_manager().texture_names() return flask.make_response({"texture_coordinates": texture_coordinates}, 200) @@ -308,7 +308,7 @@ def texture_coordinates(): ) def vertex_attribute_names(): utils_functions.validate_request(flask.request, vertex_attribute_names_json) - data = geode_functions.load_data_by_id(flask.request.json["id"]) + data = geode_functions.load_data(flask.request.json["id"]) vertex_attribute_names = data.vertex_attribute_manager().attribute_names() return flask.make_response( { @@ -331,7 +331,7 @@ def vertex_attribute_names(): ) def polygon_attribute_names(): utils_functions.validate_request(flask.request, polygon_attribute_names_json) - data = geode_functions.load_data_by_id(flask.request.json["id"]) + data = geode_functions.load_data(flask.request.json["id"]) polygon_attribute_names = data.polygon_attribute_manager().attribute_names() return flask.make_response( { @@ -354,7 +354,7 @@ def polygon_attribute_names(): ) def polyhedron_attribute_names(): utils_functions.validate_request(flask.request, polyhedron_attribute_names_json) - data = geode_functions.load_data_by_id(flask.request.json["id"]) + data = geode_functions.load_data(flask.request.json["id"]) polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names() return flask.make_response( { diff --git a/src/opengeodeweb_back/routes/models/blueprint_models.py b/src/opengeodeweb_back/routes/models/blueprint_models.py index fa36b8a8..30339b7c 100644 --- a/src/opengeodeweb_back/routes/models/blueprint_models.py +++ b/src/opengeodeweb_back/routes/models/blueprint_models.py @@ -49,6 +49,6 @@ def extract_model_uuids(model): @routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"]) def extract_uuids_endpoint(): utils_functions.validate_request(flask.request, mesh_components_json) - model = geode_functions.load_data_by_id(flask.request.json["id"]) + model = geode_functions.load_data(flask.request.json["id"]) uuid_dict = extract_model_uuids(model) return flask.make_response({"uuid_dict": uuid_dict}, 200) diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index 8f748bba..a0092639 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -118,7 +118,7 @@ def test_save_all_viewables_and_return_info(client): assert result["geode_object"] == geode_object assert result["input_files"] == input_file - db_entry = Data.get(result["id"]) + db_entry = Data.get(Data, result["id"]) assert db_entry is not None assert db_entry.native_file_name == result["native_file_name"] assert db_entry.viewable_file_name == result["viewable_file_name"] @@ -140,11 +140,11 @@ def test_save_all_viewables_commits_to_db(client): geode_object, data, input_file ) data_id = result["id"] - db_entry_before = Data.get(data_id) + db_entry_before = Data.get(Data, data_id) assert db_entry_before is not None assert db_entry_before.native_file_name == result["native_file_name"] database.session.rollback() - db_entry_after = Data.get(data_id) + db_entry_after = Data.get(Data, data_id) assert ( db_entry_after is not None ), "database.session.commit() was not called - entry missing after rollback" From 73d74b716ffa204ef4a58e60eb1fbbb69ef0618b Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 12:24:36 +0200 Subject: [PATCH 13/24] mypy --- src/opengeodeweb_back/geode_functions.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 8357eef8..ddd2013b 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -47,7 +47,7 @@ def load(geode_object: str, file_absolute_path: str): return geode_object_value(geode_object)["load"](file_absolute_path) -def data_file_path(data_id: str, filename: str = None) -> str: +def data_file_path(data_id: str, filename: str = "") -> str: data_folder_path = flask.current_app.config["DATA_FOLDER_PATH"] if filename: return os.path.join(data_folder_path, data_id, filename) @@ -55,19 +55,19 @@ def data_file_path(data_id: str, filename: str = None) -> str: def load_data(data_id: str): - data_entry = Data.get(Data, data_id) + data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") file_absolute_path = data_file_path(data_id, data_entry.native_file_name) - return load(data_entry.geode_object, file_absolute_path) -def get_data_info(data_id: str): + +def get_data_info(data_id: str) -> Data: from .data import Data - data_entry = Data.get(data_id) + data_entry = Data.get(Data, data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") return data_entry From 5655daa5731f8ecde15811426157b29b7a401316 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Mon, 8 Sep 2025 10:25:05 +0000 Subject: [PATCH 14/24] Apply prepare changes --- src/opengeodeweb_back/geode_functions.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index ddd2013b..c365d64c 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -63,7 +63,6 @@ def load_data(data_id: str): return load(data_entry.geode_object, file_absolute_path) - def get_data_info(data_id: str) -> Data: from .data import Data From 0b8c68be3a653f375696027ec74c71ab90784be4 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 12:29:35 +0200 Subject: [PATCH 15/24] mypy forgot arg --- src/opengeodeweb_back/geode_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index ddd2013b..11b49d1c 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -55,7 +55,7 @@ def data_file_path(data_id: str, filename: str = "") -> str: def load_data(data_id: str): - data_entry = Data.get(data_id) + data_entry = Data.get(Data, data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") From 3a0315994f1d45704a3811a42e05427d8c733b18 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 13:39:58 +0200 Subject: [PATCH 16/24] changed staticmethod --- src/opengeodeweb_back/data.py | 4 ++-- src/opengeodeweb_back/geode_functions.py | 4 ++-- tests/test_utils_functions.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_back/data.py b/src/opengeodeweb_back/data.py index fca0d983..76889e03 100644 --- a/src/opengeodeweb_back/data.py +++ b/src/opengeodeweb_back/data.py @@ -41,5 +41,5 @@ def create( return data_entry @staticmethod - def get(cls, data_id: str) -> "Data | None": - return database.session.get(cls, data_id) + def get(data_id: str) -> "Data | None": + return database.session.get(Data, data_id) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index b8388dea..a8786737 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -55,7 +55,7 @@ def data_file_path(data_id: str, filename: str = "") -> str: def load_data(data_id: str): - data_entry = Data.get(Data, data_id) + data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") @@ -66,7 +66,7 @@ def load_data(data_id: str): def get_data_info(data_id: str) -> Data: from .data import Data - data_entry = Data.get(Data, data_id) + data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") return data_entry diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index a0092639..8f748bba 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -118,7 +118,7 @@ def test_save_all_viewables_and_return_info(client): assert result["geode_object"] == geode_object assert result["input_files"] == input_file - db_entry = Data.get(Data, result["id"]) + db_entry = Data.get(result["id"]) assert db_entry is not None assert db_entry.native_file_name == result["native_file_name"] assert db_entry.viewable_file_name == result["viewable_file_name"] @@ -140,11 +140,11 @@ def test_save_all_viewables_commits_to_db(client): geode_object, data, input_file ) data_id = result["id"] - db_entry_before = Data.get(Data, data_id) + db_entry_before = Data.get(data_id) assert db_entry_before is not None assert db_entry_before.native_file_name == result["native_file_name"] database.session.rollback() - db_entry_after = Data.get(Data, data_id) + db_entry_after = Data.get(data_id) assert ( db_entry_after is not None ), "database.session.commit() was not called - entry missing after rollback" From 8b8765c233def2ffe837073277a5ad8305bc9503 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 14:07:34 +0200 Subject: [PATCH 17/24] test mypy --- src/opengeodeweb_back/geode_functions.py | 2 +- src/opengeodeweb_back/routes/blueprint_routes.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index a8786737..fcea896a 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -54,7 +54,7 @@ def data_file_path(data_id: str, filename: str = "") -> str: return os.path.join(data_folder_path, data_id) -def load_data(data_id: str): +def load_data(data_id: str) -> og.GeodeObject: data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 6b55ea0c..54231363 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -7,6 +7,7 @@ import flask import opengeode import werkzeug +from typing import Any, Dict # Local application imports from .. import geode_functions, utils_functions @@ -291,7 +292,7 @@ def create_point(): def texture_coordinates(): utils_functions.validate_request(flask.request, texture_coordinates_json) data = geode_functions.load_data(flask.request.json["id"]) - texture_coordinates = data.texture_manager().texture_names() + texture_coordinates_json: Dict[str, Any] = json.load(file) return flask.make_response({"texture_coordinates": texture_coordinates}, 200) @@ -309,7 +310,7 @@ def texture_coordinates(): def vertex_attribute_names(): utils_functions.validate_request(flask.request, vertex_attribute_names_json) data = geode_functions.load_data(flask.request.json["id"]) - vertex_attribute_names = data.vertex_attribute_manager().attribute_names() + vertex_attribute_names_json: Dict[str, Any] = json.load(file) return flask.make_response( { "vertex_attribute_names": vertex_attribute_names, @@ -332,7 +333,7 @@ def vertex_attribute_names(): def polygon_attribute_names(): utils_functions.validate_request(flask.request, polygon_attribute_names_json) data = geode_functions.load_data(flask.request.json["id"]) - polygon_attribute_names = data.polygon_attribute_manager().attribute_names() + polygon_attribute_names_json: Dict[str, Any] = json.load(file) return flask.make_response( { "polygon_attribute_names": polygon_attribute_names, @@ -355,7 +356,7 @@ def polygon_attribute_names(): def polyhedron_attribute_names(): utils_functions.validate_request(flask.request, polyhedron_attribute_names_json) data = geode_functions.load_data(flask.request.json["id"]) - polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names() + polyhedron_attribute_names_json: Dict[str, Any] = json.load(file) return flask.make_response( { "polyhedron_attribute_names": polyhedron_attribute_names, From dd6af0eb8fb40681c7b177d637ad8bff5235ec4e Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 14:47:40 +0200 Subject: [PATCH 18/24] mypy --- src/opengeodeweb_back/geode_functions.py | 3 ++- .../routes/blueprint_routes.py | 17 ++++++++--------- .../routes/models/blueprint_models.py | 4 ++-- tests/test_routes.py | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index fcea896a..b0b72b70 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -6,6 +6,7 @@ import opengeode as og # type: ignore import werkzeug import flask +from typing import Any # Local application imports from .geode_objects import geode_objects_dict @@ -54,7 +55,7 @@ def data_file_path(data_id: str, filename: str = "") -> str: return os.path.join(data_folder_path, data_id) -def load_data(data_id: str) -> og.GeodeObject: +def load_data(data_id: str) -> Any: data_entry = Data.get(data_id) if not data_entry: flask.abort(404, f"Data with id {data_id} not found") diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 54231363..072446a5 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -7,7 +7,6 @@ import flask import opengeode import werkzeug -from typing import Any, Dict # Local application imports from .. import geode_functions, utils_functions @@ -291,8 +290,8 @@ def create_point(): ) def texture_coordinates(): utils_functions.validate_request(flask.request, texture_coordinates_json) - data = geode_functions.load_data(flask.request.json["id"]) - texture_coordinates_json: Dict[str, Any] = json.load(file) + data = geode_functions.load_data(flask.request.json.get("id")) + texture_coordinates = data.texture_manager().texture_names() return flask.make_response({"texture_coordinates": texture_coordinates}, 200) @@ -309,8 +308,8 @@ def texture_coordinates(): ) def vertex_attribute_names(): utils_functions.validate_request(flask.request, vertex_attribute_names_json) - data = geode_functions.load_data(flask.request.json["id"]) - vertex_attribute_names_json: Dict[str, Any] = json.load(file) + data = geode_functions.load_data(flask.request.json("id")) + vertex_attribute_names = data.vertex_attribute_manager().attribute_names() return flask.make_response( { "vertex_attribute_names": vertex_attribute_names, @@ -332,8 +331,8 @@ def vertex_attribute_names(): ) def polygon_attribute_names(): utils_functions.validate_request(flask.request, polygon_attribute_names_json) - data = geode_functions.load_data(flask.request.json["id"]) - polygon_attribute_names_json: Dict[str, Any] = json.load(file) + data = geode_functions.load_data(flask.request.json("id")) + polygon_attribute_names = data.polygon_attribute_manager().attribute_names() return flask.make_response( { "polygon_attribute_names": polygon_attribute_names, @@ -355,8 +354,8 @@ def polygon_attribute_names(): ) def polyhedron_attribute_names(): utils_functions.validate_request(flask.request, polyhedron_attribute_names_json) - data = geode_functions.load_data(flask.request.json["id"]) - polyhedron_attribute_names_json: Dict[str, Any] = json.load(file) + data = geode_functions.load_data(flask.request.json("id")) + polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names() return flask.make_response( { "polyhedron_attribute_names": polyhedron_attribute_names, diff --git a/src/opengeodeweb_back/routes/models/blueprint_models.py b/src/opengeodeweb_back/routes/models/blueprint_models.py index 30339b7c..be959d11 100644 --- a/src/opengeodeweb_back/routes/models/blueprint_models.py +++ b/src/opengeodeweb_back/routes/models/blueprint_models.py @@ -20,7 +20,7 @@ def uuid_to_flat_index(): utils_functions.validate_request(flask.request, vtm_component_indices_json) vtm_file_path = geode_functions.data_file_path( - flask.request.json["id"], "viewable.vtm" + flask.request.json("id"), "viewable.vtm" ) tree = ET.parse(vtm_file_path) root = tree.find("vtkMultiBlockDataSet") @@ -49,6 +49,6 @@ def extract_model_uuids(model): @routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"]) def extract_uuids_endpoint(): utils_functions.validate_request(flask.request, mesh_components_json) - model = geode_functions.load_data(flask.request.json["id"]) + model = geode_functions.load_data(flask.request.json("id")) uuid_dict = extract_model_uuids(model) return flask.make_response({"uuid_dict": uuid_dict}, 200) diff --git a/tests/test_routes.py b/tests/test_routes.py index ed1af514..6744cede 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -157,7 +157,7 @@ def get_full_data(): assert type(native_file_name) is str viewable_file_name = response.json["viewable_file_name"] assert type(viewable_file_name) is str - id = response.json["id"] + id = response.json("id") assert type(id) is str object_type = response.json["object_type"] assert type(object_type) is str @@ -261,7 +261,7 @@ def test_create_point(client): assert response.status_code == 200 viewable_file_name = response.json["viewable_file_name"] assert type(viewable_file_name) is str - id = response.json["id"] + id = response.json("id") assert type(id) is str # Test all params From a36f4bafab2a85fc75543b4eb7c0fb119905d7c4 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 14:49:49 +0200 Subject: [PATCH 19/24] ^p --- src/opengeodeweb_back/routes/blueprint_routes.py | 6 +++--- src/opengeodeweb_back/routes/models/blueprint_models.py | 4 ++-- tests/test_routes.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 072446a5..f7deeb53 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -308,7 +308,7 @@ def texture_coordinates(): ) def vertex_attribute_names(): utils_functions.validate_request(flask.request, vertex_attribute_names_json) - data = geode_functions.load_data(flask.request.json("id")) + data = geode_functions.load_data(flask.request.json.get("id")) vertex_attribute_names = data.vertex_attribute_manager().attribute_names() return flask.make_response( { @@ -331,7 +331,7 @@ def vertex_attribute_names(): ) def polygon_attribute_names(): utils_functions.validate_request(flask.request, polygon_attribute_names_json) - data = geode_functions.load_data(flask.request.json("id")) + data = geode_functions.load_data(flask.request.json.get("id")) polygon_attribute_names = data.polygon_attribute_manager().attribute_names() return flask.make_response( { @@ -354,7 +354,7 @@ def polygon_attribute_names(): ) def polyhedron_attribute_names(): utils_functions.validate_request(flask.request, polyhedron_attribute_names_json) - data = geode_functions.load_data(flask.request.json("id")) + data = geode_functions.load_data(flask.request.json.get("id")) polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names() return flask.make_response( { diff --git a/src/opengeodeweb_back/routes/models/blueprint_models.py b/src/opengeodeweb_back/routes/models/blueprint_models.py index be959d11..2e8a73f1 100644 --- a/src/opengeodeweb_back/routes/models/blueprint_models.py +++ b/src/opengeodeweb_back/routes/models/blueprint_models.py @@ -20,7 +20,7 @@ def uuid_to_flat_index(): utils_functions.validate_request(flask.request, vtm_component_indices_json) vtm_file_path = geode_functions.data_file_path( - flask.request.json("id"), "viewable.vtm" + flask.request.json.get("id"), "viewable.vtm" ) tree = ET.parse(vtm_file_path) root = tree.find("vtkMultiBlockDataSet") @@ -49,6 +49,6 @@ def extract_model_uuids(model): @routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"]) def extract_uuids_endpoint(): utils_functions.validate_request(flask.request, mesh_components_json) - model = geode_functions.load_data(flask.request.json("id")) + model = geode_functions.load_data(flask.request.json.get("id")) uuid_dict = extract_model_uuids(model) return flask.make_response({"uuid_dict": uuid_dict}, 200) diff --git a/tests/test_routes.py b/tests/test_routes.py index 6744cede..9acc5d21 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -157,7 +157,7 @@ def get_full_data(): assert type(native_file_name) is str viewable_file_name = response.json["viewable_file_name"] assert type(viewable_file_name) is str - id = response.json("id") + id = response.json.get("id") assert type(id) is str object_type = response.json["object_type"] assert type(object_type) is str @@ -261,7 +261,7 @@ def test_create_point(client): assert response.status_code == 200 viewable_file_name = response.json["viewable_file_name"] assert type(viewable_file_name) is str - id = response.json("id") + id = response.json.get("id") assert type(id) is str # Test all params From 310b7aea1ad63c6f3c99607b7dd46410c4155c30 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 14:52:08 +0200 Subject: [PATCH 20/24] get_json --- src/opengeodeweb_back/routes/blueprint_routes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index f7deeb53..aab85329 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -290,7 +290,7 @@ def create_point(): ) def texture_coordinates(): utils_functions.validate_request(flask.request, texture_coordinates_json) - data = geode_functions.load_data(flask.request.json.get("id")) + data = geode_functions.load_data(flask.request.get_json().get("id")) texture_coordinates = data.texture_manager().texture_names() return flask.make_response({"texture_coordinates": texture_coordinates}, 200) From 76b4a3d9fbaa8be48aaace886bec5bd653bdcd9a Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 14:55:20 +0200 Subject: [PATCH 21/24] request.get_json() --- .../routes/blueprint_routes.py | 42 +++++++++---------- .../routes/models/blueprint_models.py | 4 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index aab85329..3782513e 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -53,7 +53,7 @@ def teardown_request(exception): def allowed_files(): utils_functions.validate_request(flask.request, allowed_files_json) extensions = geode_functions.list_input_extensions( - flask.request.json["supported_feature"] + flask.request.get_json()["supported_feature"] ) return flask.make_response({"extensions": extensions}, 200) @@ -99,10 +99,10 @@ def allowed_objects(): utils_functions.validate_request(flask.request, allowed_objects_json) file_absolute_path = geode_functions.upload_file_path( - flask.request.json["filename"] + flask.request.get_json()["filename"] ) allowed_objects = geode_functions.list_geode_objects( - file_absolute_path, flask.request.json["supported_feature"] + file_absolute_path, flask.request.get_json()["supported_feature"] ) return flask.make_response({"allowed_objects": allowed_objects}, 200) @@ -120,10 +120,10 @@ def allowed_objects(): ) def missing_files(): utils_functions.validate_request(flask.request, missing_files_json) - file_path = geode_functions.upload_file_path(flask.request.json["filename"]) + file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"]) additional_files = geode_functions.additional_files( - flask.request.json["input_geode_object"], + flask.request.get_json()["input_geode_object"], file_path, ) @@ -167,7 +167,7 @@ def missing_files(): def crs_converter_geographic_coordinate_systems(): utils_functions.validate_request(flask.request, geographic_coordinate_systems_json) infos = geode_functions.geographic_coordinate_systems( - flask.request.json["input_geode_object"] + flask.request.get_json()["input_geode_object"] ) crs_list = [] for info in infos: @@ -194,10 +194,10 @@ def crs_converter_geographic_coordinate_systems(): def inspect_file(): utils_functions.validate_request(flask.request, inspect_file_json) - file_path = geode_functions.upload_file_path(flask.request.json["filename"]) - data = geode_functions.load(flask.request.json["input_geode_object"], file_path) + file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"]) + data = geode_functions.load(flask.request.get_json()["input_geode_object"], file_path) class_inspector = geode_functions.inspect( - flask.request.json["input_geode_object"], data + flask.request.get_json()["input_geode_object"], data ) inspection_result = geode_functions.get_inspector_children(class_inspector) return flask.make_response({"inspection_result": inspection_result}, 200) @@ -218,14 +218,14 @@ def geode_objects_and_output_extensions(): utils_functions.validate_request( flask.request, geode_objects_and_output_extensions_json ) - file_path = geode_functions.upload_file_path(flask.request.json["filename"]) + file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"]) data = geode_functions.load( - flask.request.json["input_geode_object"], + flask.request.get_json()["input_geode_object"], file_path, ) geode_objects_and_output_extensions = ( geode_functions.geode_objects_output_extensions( - flask.request.json["input_geode_object"], data + flask.request.get_json()["input_geode_object"], data ) ) return flask.make_response( @@ -249,8 +249,8 @@ def save_viewable_file(): utils_functions.validate_request(flask.request, save_viewable_file_json) return flask.make_response( utils_functions.generate_native_viewable_and_light_viewable_from_file( - geode_object=flask.request.json["input_geode_object"], - input_filename=flask.request.json["filename"], + geode_object=flask.request.get_json()["input_geode_object"], + input_filename=flask.request.get_json()["filename"], ), 200, ) @@ -263,10 +263,10 @@ def save_viewable_file(): @routes.route(create_point_json["route"], methods=create_point_json["methods"]) def create_point(): utils_functions.validate_request(flask.request, create_point_json) - title = flask.request.json["title"] - x = flask.request.json["x"] - y = flask.request.json["y"] - z = flask.request.json["z"] + title = flask.request.get_json()["title"] + x = flask.request.get_json()["x"] + y = flask.request.get_json()["y"] + z = flask.request.get_json()["z"] class_ = geode_functions.geode_object_class("PointSet3D") PointSet3D = class_.create() builder = geode_functions.create_builder("PointSet3D", PointSet3D) @@ -308,7 +308,7 @@ def texture_coordinates(): ) def vertex_attribute_names(): utils_functions.validate_request(flask.request, vertex_attribute_names_json) - data = geode_functions.load_data(flask.request.json.get("id")) + data = geode_functions.load_data(flask.request.get_json().get("id")) vertex_attribute_names = data.vertex_attribute_manager().attribute_names() return flask.make_response( { @@ -331,7 +331,7 @@ def vertex_attribute_names(): ) def polygon_attribute_names(): utils_functions.validate_request(flask.request, polygon_attribute_names_json) - data = geode_functions.load_data(flask.request.json.get("id")) + data = geode_functions.load_data(flask.request.get_json().get("id")) polygon_attribute_names = data.polygon_attribute_manager().attribute_names() return flask.make_response( { @@ -354,7 +354,7 @@ def polygon_attribute_names(): ) def polyhedron_attribute_names(): utils_functions.validate_request(flask.request, polyhedron_attribute_names_json) - data = geode_functions.load_data(flask.request.json.get("id")) + data = geode_functions.load_data(flask.request.get_json().get("id")) polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names() return flask.make_response( { diff --git a/src/opengeodeweb_back/routes/models/blueprint_models.py b/src/opengeodeweb_back/routes/models/blueprint_models.py index 2e8a73f1..02209f2e 100644 --- a/src/opengeodeweb_back/routes/models/blueprint_models.py +++ b/src/opengeodeweb_back/routes/models/blueprint_models.py @@ -20,7 +20,7 @@ def uuid_to_flat_index(): utils_functions.validate_request(flask.request, vtm_component_indices_json) vtm_file_path = geode_functions.data_file_path( - flask.request.json.get("id"), "viewable.vtm" + flask.request.get_json().get("id"), "viewable.vtm" ) tree = ET.parse(vtm_file_path) root = tree.find("vtkMultiBlockDataSet") @@ -49,6 +49,6 @@ def extract_model_uuids(model): @routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"]) def extract_uuids_endpoint(): utils_functions.validate_request(flask.request, mesh_components_json) - model = geode_functions.load_data(flask.request.json.get("id")) + model = geode_functions.load_data(flask.request.get_json().get("id")) uuid_dict = extract_model_uuids(model) return flask.make_response({"uuid_dict": uuid_dict}, 200) From dd432eab148258db58465ed9cc10290aeb9eb66b Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:56:05 +0000 Subject: [PATCH 22/24] Apply prepare changes --- src/opengeodeweb_back/routes/blueprint_routes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index 3782513e..7f965009 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -195,7 +195,9 @@ def inspect_file(): utils_functions.validate_request(flask.request, inspect_file_json) file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"]) - data = geode_functions.load(flask.request.get_json()["input_geode_object"], file_path) + data = geode_functions.load( + flask.request.get_json()["input_geode_object"], file_path + ) class_inspector = geode_functions.inspect( flask.request.get_json()["input_geode_object"], data ) From f5d79851e61a29efdfa6b4f6e681c79ca310f457 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Mon, 8 Sep 2025 15:02:42 +0200 Subject: [PATCH 23/24] -> str --- src/opengeodeweb_back/geode_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index b0b72b70..76bdbfc2 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -73,7 +73,7 @@ def get_data_info(data_id: str) -> Data: return data_entry -def upload_file_path(filename): +def upload_file_path(filename : str) -> str: upload_folder = flask.current_app.config["UPLOAD_FOLDER"] secure_filename = werkzeug.utils.secure_filename(filename) return os.path.abspath(os.path.join(upload_folder, secure_filename)) From 601aff5b43990e7a48cf2943deb12d4e5f060975 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:03:09 +0000 Subject: [PATCH 24/24] Apply prepare changes --- src/opengeodeweb_back/geode_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/geode_functions.py b/src/opengeodeweb_back/geode_functions.py index 76bdbfc2..a85373f4 100644 --- a/src/opengeodeweb_back/geode_functions.py +++ b/src/opengeodeweb_back/geode_functions.py @@ -73,7 +73,7 @@ def get_data_info(data_id: str) -> Data: return data_entry -def upload_file_path(filename : str) -> str: +def upload_file_path(filename: str) -> str: upload_folder = flask.current_app.config["UPLOAD_FOLDER"] secure_filename = werkzeug.utils.secure_filename(filename) return os.path.abspath(os.path.join(upload_folder, secure_filename))