From c6f3a4fe2fd43dd241879811b91fbcd0299ad0c4 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Thu, 9 Jul 2026 01:28:24 +0200 Subject: [PATCH 01/23] feat(HorizonStack): Add Horizon Stack to the horizon step --- .../geode_objects/__init__.py | 2 + .../geode_objects/geode_horizon_stack3d.py | 108 ++++++++++++++++++ src/opengeodeweb_back/utils_functions.py | 21 ++-- 3 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py diff --git a/src/opengeodeweb_back/geode_objects/__init__.py b/src/opengeodeweb_back/geode_objects/__init__.py index d1329a1d..5eb46f65 100644 --- a/src/opengeodeweb_back/geode_objects/__init__.py +++ b/src/opengeodeweb_back/geode_objects/__init__.py @@ -31,6 +31,7 @@ from .geode_cross_section import GeodeCrossSection from .geode_implicit_structural_model import GeodeImplicitStructuralModel from .geode_implicit_cross_section import GeodeImplicitCrossSection +from .geode_horizon_stack3d import GeodeHorizonStack3D geode_objects: dict[GeodeObjectType, type[GeodeObject]] = { "VertexSet": GeodeVertexSet, @@ -58,4 +59,5 @@ "CrossSection": GeodeCrossSection, "ImplicitStructuralModel": GeodeImplicitStructuralModel, "ImplicitCrossSection": GeodeImplicitCrossSection, + "HorizonStack3D": GeodeHorizonStack3D, } diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py new file mode 100644 index 00000000..0365c2c3 --- /dev/null +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -0,0 +1,108 @@ +# Standard library imports +from __future__ import annotations + +# Third party imports +import opengeode as og +import opengeode_geosciences as og_geosciences +from opengeodeweb_microservice.database.data_types import GeodeModelType + +# Local application imports +from .geode_model import GeodeModel, ComponentRegistry + + +class GeodeHorizonStack3D(GeodeModel): + horizon_stack: og_geosciences.HorizonsStack3D + + def __init__(self, horizon_stack: og_geosciences.HorizonsStack3D | None = None) -> None: + self.horizon_stack = horizon_stack if horizon_stack is not None else og_geosciences.HorizonsStack3D() + super().__init__(self.horizon_stack) + + @classmethod + def geode_object_type(cls) -> GeodeModelType: + return "HorizonStack3D" + + def native_extension(self) -> str: + return self.horizon_stack.native_extension() + + @classmethod + def is_3D(cls) -> bool: + return True + + @classmethod + def is_viewable(cls) -> bool: + return False # Or True if there's a viewable output + + def builder(self) -> og_geosciences.HorizonsStackBuilder3D: + return og_geosciences.HorizonsStackBuilder3D(self.horizon_stack) + + @classmethod + def load(cls, filename: str) -> GeodeHorizonStack3D: + return GeodeHorizonStack3D(og_geosciences.load_horizons_stack3D(filename)) + + @classmethod + def additional_files(cls, filename: str) -> og.AdditionalFiles: + # Check if python binding for additional files exists, else return empty + if hasattr(og_geosciences, "horizons_stack_additional_files3D"): + return og_geosciences.horizons_stack_additional_files3D(filename) + return [] + + @classmethod + def is_loadable(cls, filename: str) -> og.Percentage: + if hasattr(og_geosciences, "is_horizons_stack_loadable3D"): + return og_geosciences.is_horizons_stack_loadable3D(filename) + return 0 + + @classmethod + def input_extensions(cls) -> list[str]: + if hasattr(og_geosciences, "HorizonsStackInputFactory3D"): + return og_geosciences.HorizonsStackInputFactory3D.list_creators() + return [] + + @classmethod + def output_extensions(cls) -> list[str]: + if hasattr(og_geosciences, "HorizonsStackOutputFactory3D"): + return og_geosciences.HorizonsStackOutputFactory3D.list_creators() + return [] + + @classmethod + def object_priority(cls, filename: str) -> int: + if hasattr(og_geosciences, "horizons_stack_object_priority3D"): + return og_geosciences.horizons_stack_object_priority3D(filename) + return 0 + + def is_saveable(self, filename: str) -> bool: + if hasattr(og_geosciences, "is_horizons_stack_saveable3D"): + return og_geosciences.is_horizons_stack_saveable3D(self.horizon_stack, filename) + return True + + def save(self, filename: str) -> list[str]: + if hasattr(og_geosciences, "save_horizons_stack3D"): + return og_geosciences.save_horizons_stack3D(self.horizon_stack, filename) + return [] + + def save_viewable(self, filename_without_extension: str) -> str: + return "" + + def save_light_viewable(self, filename_without_extension: str) -> str: + return "" + + def mesh_components(self) -> ComponentRegistry: + return {} + + def collection_components(self) -> ComponentRegistry: + return {} + + def boundaries(self, id: og.uuid) -> list[og.ComponentID]: + return [] + + def internals(self, id: og.uuid) -> list[og.ComponentID]: + return [] + + def items(self, id: og.uuid) -> list[og.ComponentID]: + return [] + + def component(self, id: og.uuid) -> og.Component3D: + return None # Needs proper implementation if HorizonsStack contains components + + def inspect(self) -> None: + return None diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 34e5cf3b..8acdd531 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -286,15 +286,20 @@ def save_all_viewables_and_return_info( ), ], ) - with open(light_path, "rb") as f: - binary_light_viewable = f.read() + if geode_object.is_viewable(): + with open(light_path, "rb") as f: + binary_light_viewable = f.read() + binary_light_viewable_str = binary_light_viewable.decode("utf-8") + data.viewable_file = os.path.basename(viewable_path) + data.light_viewable_file = os.path.basename(light_path) + else: + binary_light_viewable_str = "" + data.viewable_file = "" + data.light_viewable_file = "" + data.native_file = os.path.basename(native_files[0]) - data.viewable_file = os.path.basename(viewable_path) - data.light_viewable_file = os.path.basename(light_path) assert data.native_file is not None - assert data.viewable_file is not None - assert data.light_viewable_file is not None name = geode_object.identifier.name() if not name: flask.abort(400, "Geode object has no name defined.") @@ -305,12 +310,12 @@ def save_all_viewables_and_return_info( "id": data.id, "name": name, "viewer_type": data.viewer_object, - "binary_light_viewable": binary_light_viewable.decode("utf-8"), + "binary_light_viewable": binary_light_viewable_str, "geode_object_type": data.geode_object, } if isinstance(geode_object, GeodeVertexSet): response["nb_vertices"] = geode_object.vertex_set.nb_vertices() - if isinstance(geode_object, GeodeModel): + if isinstance(geode_object, GeodeModel) and geode_object.is_viewable(): response |= model_components(data.id, geode_object, data.viewable_file) return response From 8b9dd98b95a125f15caddb2f0b11804e6586a48b Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 13 Jul 2026 15:34:05 +0200 Subject: [PATCH 02/23] fix utils functions --- src/opengeodeweb_back/utils_functions.py | 33 ++++++++++++------------ 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 8acdd531..fa655c4d 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -270,22 +270,23 @@ def save_all_viewables_and_return_info( data_path: str, ) -> dict[str, Any]: with ThreadPoolExecutor() as executor: - native_files, viewable_path, light_path = executor.map( - lambda args: args[0](args[1]), - [ - ( - geode_object.save, - os.path.join( - data_path, "native." + geode_object.native_extension() - ), - ), + tasks = [ + ( + geode_object.save, + os.path.join(data_path, "native." + geode_object.native_extension()), + ) + ] + if geode_object.is_viewable(): + tasks.extend([ (geode_object.save_viewable, os.path.join(data_path, "viewable")), - ( - geode_object.save_light_viewable, - os.path.join(data_path, "light_viewable"), - ), - ], - ) + (geode_object.save_light_viewable, os.path.join(data_path, "light_viewable")), + ]) + + results = list(executor.map(lambda args: args[0](args[1]), tasks)) + native_files = results[0] + if geode_object.is_viewable(): + viewable_path = results[1] + light_path = results[2] if geode_object.is_viewable(): with open(light_path, "rb") as f: binary_light_viewable = f.read() @@ -293,7 +294,7 @@ def save_all_viewables_and_return_info( data.viewable_file = os.path.basename(viewable_path) data.light_viewable_file = os.path.basename(light_path) else: - binary_light_viewable_str = "" + binary_light_viewable_str = "not_viewable" data.viewable_file = "" data.light_viewable_file = "" From 7a98960a308fab6bca2284965648ee87a93dae68 Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:24:04 +0000 Subject: [PATCH 03/23] Apply prepare changes --- requirements.txt | 1 - .../geode_objects/geode_horizon_stack3d.py | 18 +++++++++++++----- src/opengeodeweb_back/utils_functions.py | 15 ++++++++++----- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/requirements.txt b/requirements.txt index d4529ea2..d1953d29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -66,4 +66,3 @@ werkzeug==3.1.8 # flask # flask-cors -opengeodeweb-microservice==1.*,>=1.1.4rc1 diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index 0365c2c3..e61d012f 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -13,8 +13,14 @@ class GeodeHorizonStack3D(GeodeModel): horizon_stack: og_geosciences.HorizonsStack3D - def __init__(self, horizon_stack: og_geosciences.HorizonsStack3D | None = None) -> None: - self.horizon_stack = horizon_stack if horizon_stack is not None else og_geosciences.HorizonsStack3D() + def __init__( + self, horizon_stack: og_geosciences.HorizonsStack3D | None = None + ) -> None: + self.horizon_stack = ( + horizon_stack + if horizon_stack is not None + else og_geosciences.HorizonsStack3D() + ) super().__init__(self.horizon_stack) @classmethod @@ -30,7 +36,7 @@ def is_3D(cls) -> bool: @classmethod def is_viewable(cls) -> bool: - return False # Or True if there's a viewable output + return False # Or True if there's a viewable output def builder(self) -> og_geosciences.HorizonsStackBuilder3D: return og_geosciences.HorizonsStackBuilder3D(self.horizon_stack) @@ -72,7 +78,9 @@ def object_priority(cls, filename: str) -> int: def is_saveable(self, filename: str) -> bool: if hasattr(og_geosciences, "is_horizons_stack_saveable3D"): - return og_geosciences.is_horizons_stack_saveable3D(self.horizon_stack, filename) + return og_geosciences.is_horizons_stack_saveable3D( + self.horizon_stack, filename + ) return True def save(self, filename: str) -> list[str]: @@ -102,7 +110,7 @@ def items(self, id: og.uuid) -> list[og.ComponentID]: return [] def component(self, id: og.uuid) -> og.Component3D: - return None # Needs proper implementation if HorizonsStack contains components + return None # Needs proper implementation if HorizonsStack contains components def inspect(self) -> None: return None diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index fa655c4d..178c284b 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -277,11 +277,16 @@ def save_all_viewables_and_return_info( ) ] if geode_object.is_viewable(): - tasks.extend([ - (geode_object.save_viewable, os.path.join(data_path, "viewable")), - (geode_object.save_light_viewable, os.path.join(data_path, "light_viewable")), - ]) - + tasks.extend( + [ + (geode_object.save_viewable, os.path.join(data_path, "viewable")), + ( + geode_object.save_light_viewable, + os.path.join(data_path, "light_viewable"), + ), + ] + ) + results = list(executor.map(lambda args: args[0](args[1]), tasks)) native_files = results[0] if geode_object.is_viewable(): From 8b7ade0a17858b53d9a4468b19e4cd410d4927b2 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 13 Jul 2026 16:30:27 +0200 Subject: [PATCH 04/23] add missing test.og_hst3d --- tests/data/test.og_hst3d | Bin 0 -> 912 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/data/test.og_hst3d diff --git a/tests/data/test.og_hst3d b/tests/data/test.og_hst3d new file mode 100644 index 0000000000000000000000000000000000000000..f007de2e55ddec1bdc94d2d964852c6865fff6a5 GIT binary patch literal 912 zcmWIWW@Zs#;NW0j*wXwqh5-tS85tO)f$ZXvqQsKS^rFOqjLhWtqSPE9FF&t1BeS5G ziII`dzaTZwJvBci)g7dQk&y`unSq)a7?_wcQ&?oe5{ohulX6lWOG=6|lS)fco%3@G z^7B&jN<3YF>X{fA7=h{-897VyQc}}0^HNio80SYnvUyS1+5PU=+R7{bdJMv;De0-j z@rgzGKt=IosYNBJ6|71aCcA=EIf501fz?3F$EqD@Eh8Hf%&LyQhCg;M9)5bqz{n01 zKf10)|D2MMa5~@tHseSHzdZ8$qpsDE|)y45I0vaEVV$$}dYr1RR%ea6w{G zF(NpU^7C_`;ecHS0|P4~HzN}#BLfRpfHylw-NJjDL9qkE0a)Ws7#R3mK%AKZ4CTzU z%+w;dN4s{{?E1X0r~x$fV1RNQ1~e1f@X;XkggV2x6f+1tmoWc%vGG>_1R|Kmf>~ zJ;1<21P{7CWKV&@2BD7~=ucD!fWrcx0U*C44DbRP01Jr#Z&o&t3=0tc0MbpMKx6;_ DRM7Pm literal 0 HcmV?d00001 From 28cd18e4f681f8799c73fd29562011525c3ec96d Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:52:58 +0000 Subject: [PATCH 05/23] Apply prepare changes --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 26be316f..d1953d29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -66,4 +66,3 @@ werkzeug==3.1.8 # flask # flask-cors -opengeodeweb-microservice==1.*,>=1.1.4 From 21df80a1c4869e7a989dd04099dddb792f45678b Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 13 Jul 2026 17:09:50 +0200 Subject: [PATCH 06/23] resolve mypy errors on GeodeHorizonStack3D and utils --- .../geode_objects/geode_horizon_stack3d.py | 16 ++++++++++------ src/opengeodeweb_back/utils_functions.py | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index e61d012f..40b916bd 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -1,5 +1,6 @@ # Standard library imports from __future__ import annotations +from typing import Any # Third party imports import opengeode as og @@ -50,13 +51,13 @@ def additional_files(cls, filename: str) -> og.AdditionalFiles: # Check if python binding for additional files exists, else return empty if hasattr(og_geosciences, "horizons_stack_additional_files3D"): return og_geosciences.horizons_stack_additional_files3D(filename) - return [] + return [] # type: ignore @classmethod def is_loadable(cls, filename: str) -> og.Percentage: if hasattr(og_geosciences, "is_horizons_stack_loadable3D"): return og_geosciences.is_horizons_stack_loadable3D(filename) - return 0 + return 0 # type: ignore @classmethod def input_extensions(cls) -> list[str]: @@ -78,9 +79,9 @@ def object_priority(cls, filename: str) -> int: def is_saveable(self, filename: str) -> bool: if hasattr(og_geosciences, "is_horizons_stack_saveable3D"): - return og_geosciences.is_horizons_stack_saveable3D( + return bool(og_geosciences.is_horizons_stack_saveable3D( self.horizon_stack, filename - ) + )) return True def save(self, filename: str) -> list[str]: @@ -110,7 +111,10 @@ def items(self, id: og.uuid) -> list[og.ComponentID]: return [] def component(self, id: og.uuid) -> og.Component3D: - return None # Needs proper implementation if HorizonsStack contains components + return None # type: ignore + + def inspect(self) -> Any: + return None - def inspect(self) -> None: + def validate(self) -> Any: return None diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 178c284b..5b86097d 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -270,7 +270,7 @@ def save_all_viewables_and_return_info( data_path: str, ) -> dict[str, Any]: with ThreadPoolExecutor() as executor: - tasks = [ + tasks: list[tuple[Callable[[str], Any], str]] = [ ( geode_object.save, os.path.join(data_path, "native." + geode_object.native_extension()), From c75f16c395165bd1d7ca4fbbcf9e8e035d88edd6 Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Mon, 13 Jul 2026 15:10:34 +0000 Subject: [PATCH 07/23] Apply prepare changes --- .../geode_objects/geode_horizon_stack3d.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index 40b916bd..d1f3aed3 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -79,9 +79,11 @@ def object_priority(cls, filename: str) -> int: def is_saveable(self, filename: str) -> bool: if hasattr(og_geosciences, "is_horizons_stack_saveable3D"): - return bool(og_geosciences.is_horizons_stack_saveable3D( - self.horizon_stack, filename - )) + return bool( + og_geosciences.is_horizons_stack_saveable3D( + self.horizon_stack, filename + ) + ) return True def save(self, filename: str) -> list[str]: From c9f3d0b5bb1693805d8019b0a69018811c2268fd Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Wed, 15 Jul 2026 11:36:40 +0200 Subject: [PATCH 08/23] rm comments --- src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index 40b916bd..613805ff 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -37,8 +37,7 @@ def is_3D(cls) -> bool: @classmethod def is_viewable(cls) -> bool: - return False # Or True if there's a viewable output - + return False def builder(self) -> og_geosciences.HorizonsStackBuilder3D: return og_geosciences.HorizonsStackBuilder3D(self.horizon_stack) @@ -48,7 +47,6 @@ def load(cls, filename: str) -> GeodeHorizonStack3D: @classmethod def additional_files(cls, filename: str) -> og.AdditionalFiles: - # Check if python binding for additional files exists, else return empty if hasattr(og_geosciences, "horizons_stack_additional_files3D"): return og_geosciences.horizons_stack_additional_files3D(filename) return [] # type: ignore From 7f9b1d280826059e720f917c11db72106d0dc43b Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Wed, 15 Jul 2026 09:37:28 +0000 Subject: [PATCH 09/23] Apply prepare changes --- src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index 93d23642..793821b2 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -37,7 +37,8 @@ def is_3D(cls) -> bool: @classmethod def is_viewable(cls) -> bool: - return False + return False + def builder(self) -> og_geosciences.HorizonsStackBuilder3D: return og_geosciences.HorizonsStackBuilder3D(self.horizon_stack) From 2a0ecbd6f48a07fd2224029c392edae488d535d9 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Wed, 15 Jul 2026 14:04:32 +0200 Subject: [PATCH 10/23] fix comments --- .../geode_objects/geode_horizon_stack3d.py | 10 ++----- src/opengeodeweb_back/utils_functions.py | 29 ++++++++++--------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index 93d23642..e6c9e6d9 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -47,15 +47,11 @@ def load(cls, filename: str) -> GeodeHorizonStack3D: @classmethod def additional_files(cls, filename: str) -> og.AdditionalFiles: - if hasattr(og_geosciences, "horizons_stack_additional_files3D"): - return og_geosciences.horizons_stack_additional_files3D(filename) - return [] # type: ignore + return og_geosciences.horizons_stack_additional_files3D(filename) @classmethod def is_loadable(cls, filename: str) -> og.Percentage: - if hasattr(og_geosciences, "is_horizons_stack_loadable3D"): - return og_geosciences.is_horizons_stack_loadable3D(filename) - return 0 # type: ignore + return og_geosciences.is_horizons_stack_loadable3D(filename) @classmethod def input_extensions(cls) -> list[str]: @@ -111,7 +107,7 @@ def items(self, id: og.uuid) -> list[og.ComponentID]: return [] def component(self, id: og.uuid) -> og.Component3D: - return None # type: ignore + raise NotImplementedError("HorizonStack3D has no mesh components") def inspect(self) -> Any: return None diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 5b86097d..5627167b 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -200,18 +200,20 @@ def create_data_folder_from_id(data_id: str) -> str: def model_components( data_id: str, model: GeodeModel, viewable_file: str ) -> dict[str, Any]: - vtm_file_path = geode_functions.data_file_path(data_id, viewable_file) - tree = ET.parse(vtm_file_path) - root = tree.find("vtkMultiBlockDataSet") - if root is None: - flask.abort(500, "Failed to read viewable file") - uuid_to_flat_index = {} - current_index = 0 - assert root is not None - for elem in root.iter(): - if "uuid" in elem.attrib and elem.tag == "DataSet": - uuid_to_flat_index[elem.attrib["uuid"]] = current_index - current_index += 1 + uuid_to_flat_index: dict[str, int] = {} + if viewable_file: + vtm_file_path = geode_functions.data_file_path(data_id, viewable_file) + tree = ET.parse(vtm_file_path) + root = tree.find("vtkMultiBlockDataSet") + if root is None: + flask.abort(500, "Failed to read viewable file") + current_index = 0 + assert root is not None + for elem in root.iter(): + if "uuid" in elem.attrib and elem.tag == "DataSet": + uuid_to_flat_index[elem.attrib["uuid"]] = current_index + current_index += 1 + model_mesh_components = model.mesh_components() mesh_components = [] for mesh_component, ids in model_mesh_components.items(): @@ -292,7 +294,6 @@ def save_all_viewables_and_return_info( if geode_object.is_viewable(): viewable_path = results[1] light_path = results[2] - if geode_object.is_viewable(): with open(light_path, "rb") as f: binary_light_viewable = f.read() binary_light_viewable_str = binary_light_viewable.decode("utf-8") @@ -321,7 +322,7 @@ def save_all_viewables_and_return_info( } if isinstance(geode_object, GeodeVertexSet): response["nb_vertices"] = geode_object.vertex_set.nb_vertices() - if isinstance(geode_object, GeodeModel) and geode_object.is_viewable(): + if isinstance(geode_object, GeodeModel): response |= model_components(data.id, geode_object, data.viewable_file) return response From 6785a86f206eeeeeb0eb96ce492c254c8d4299b1 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Fri, 17 Jul 2026 16:42:59 +0200 Subject: [PATCH 11/23] reput asserts data --- src/opengeodeweb_back/utils_functions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 5627167b..de067853 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -307,6 +307,8 @@ def save_all_viewables_and_return_info( data.native_file = os.path.basename(native_files[0]) assert data.native_file is not None + assert data.viewable_file is not None + assert data.light_viewable_file is not None name = geode_object.identifier.name() if not name: flask.abort(400, "Geode object has no name defined.") From 7d75d71fa0d2d88e171b8e71d0ac4409415db97c Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Fri, 24 Jul 2026 10:19:25 +0200 Subject: [PATCH 12/23] clear validate --- src/opengeodeweb_back/routes/schemas/validate.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/opengeodeweb_back/routes/schemas/validate.py b/src/opengeodeweb_back/routes/schemas/validate.py index 4652408f..3b1720da 100644 --- a/src/opengeodeweb_back/routes/schemas/validate.py +++ b/src/opengeodeweb_back/routes/schemas/validate.py @@ -4,7 +4,4 @@ @dataclass class Validate(DataClassJsonMixin): - def __post_init__(self) -> None: - print(self, flush=True) - id: str From 92b113316378bfe49738cd5048cd34cc2356bdc3 Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:20:02 +0000 Subject: [PATCH 13/23] Apply prepare changes --- src/opengeodeweb_back/routes/schemas/validate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/opengeodeweb_back/routes/schemas/validate.py b/src/opengeodeweb_back/routes/schemas/validate.py index 3b1720da..4652408f 100644 --- a/src/opengeodeweb_back/routes/schemas/validate.py +++ b/src/opengeodeweb_back/routes/schemas/validate.py @@ -4,4 +4,7 @@ @dataclass class Validate(DataClassJsonMixin): + def __post_init__(self) -> None: + print(self, flush=True) + id: str From 0a81e56196aec70cfea0ac1c9976d90df4a7978b Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Fri, 24 Jul 2026 10:33:57 +0200 Subject: [PATCH 14/23] rm useless hasattr --- .../geode_objects/geode_horizon_stack3d.py | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index 161bb35b..c350c265 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -56,35 +56,25 @@ def is_loadable(cls, filename: str) -> og.Percentage: @classmethod def input_extensions(cls) -> list[str]: - if hasattr(og_geosciences, "HorizonsStackInputFactory3D"): - return og_geosciences.HorizonsStackInputFactory3D.list_creators() - return [] + return og_geosciences.HorizonsStackInputFactory3D.list_creators() @classmethod def output_extensions(cls) -> list[str]: - if hasattr(og_geosciences, "HorizonsStackOutputFactory3D"): - return og_geosciences.HorizonsStackOutputFactory3D.list_creators() - return [] + return og_geosciences.HorizonsStackOutputFactory3D.list_creators() @classmethod def object_priority(cls, filename: str) -> int: - if hasattr(og_geosciences, "horizons_stack_object_priority3D"): - return og_geosciences.horizons_stack_object_priority3D(filename) - return 0 + return og_geosciences.horizons_stack_object_priority3D(filename) def is_saveable(self, filename: str) -> bool: - if hasattr(og_geosciences, "is_horizons_stack_saveable3D"): - return bool( - og_geosciences.is_horizons_stack_saveable3D( - self.horizon_stack, filename - ) + return bool( + og_geosciences.is_horizons_stack_saveable3D( + self.horizon_stack, filename ) - return True + ) def save(self, filename: str) -> list[str]: - if hasattr(og_geosciences, "save_horizons_stack3D"): - return og_geosciences.save_horizons_stack3D(self.horizon_stack, filename) - return [] + return og_geosciences.save_horizons_stack3D(self.horizon_stack, filename) def save_viewable(self, filename_without_extension: str) -> str: return "" From 24f4de5737153192c5ee4e5b43ee26c793cde9ad Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:34:39 +0000 Subject: [PATCH 15/23] Apply prepare changes --- src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index c350c265..4affa460 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -68,9 +68,7 @@ def object_priority(cls, filename: str) -> int: def is_saveable(self, filename: str) -> bool: return bool( - og_geosciences.is_horizons_stack_saveable3D( - self.horizon_stack, filename - ) + og_geosciences.is_horizons_stack_saveable3D(self.horizon_stack, filename) ) def save(self, filename: str) -> list[str]: From 69195d2c349452322950ede31b141f897eb3df09 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Fri, 24 Jul 2026 11:22:37 +0200 Subject: [PATCH 16/23] try to go around horizonstack saveable --- .../geode_objects/geode_horizon_stack3d.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index c350c265..ff989fb1 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -67,11 +67,10 @@ def object_priority(cls, filename: str) -> int: return og_geosciences.horizons_stack_object_priority3D(filename) def is_saveable(self, filename: str) -> bool: - return bool( - og_geosciences.is_horizons_stack_saveable3D( - self.horizon_stack, filename - ) - ) + import os + + ext = os.path.splitext(filename)[1][1:] + return ext in self.output_extensions() def save(self, filename: str) -> list[str]: return og_geosciences.save_horizons_stack3D(self.horizon_stack, filename) From 628d5bea67b1fe0eab68ce934e7f2daa3173a4e0 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Fri, 24 Jul 2026 14:01:10 +0200 Subject: [PATCH 17/23] rc geosciences --- requirements.in | 4 ++-- requirements.txt | 21 +++++++++---------- .../geode_objects/geode_horizon_stack3d.py | 5 +---- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/requirements.in b/requirements.in index 56aa9904..2652dd08 100644 --- a/requirements.in +++ b/requirements.in @@ -1,8 +1,8 @@ -opengeode-core==17.3.7 +opengeode-core==17.4.4 opengeode-io==7.7.0 opengeode-inspector==6.11.6 opengeode-inspector-geosciences==1.1.0 -opengeode-geosciences==9.6.0 +opengeode-geosciences==9.6.1rc1 opengeode-geosciencesio==5.9.0 geode-common==33.24.2 geode-viewables==3.4.0 diff --git a/requirements.txt b/requirements.txt index d1953d29..c0bc5720 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,15 +2,15 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=./requirements.txt ./requirements.in +# pip-compile --output-file=requirements.txt requirements.in # -asgiref>=3 +asgiref==3.12.1 # via flask -blinker>=1 +blinker==1.9.0 # via flask -click>=8 +click==8.4.2 # via flask -flask[async]>=3 +flask[async]==3.1.2 # via # -r requirements.in # flask-cors @@ -22,16 +22,16 @@ geode-common==33.24.2 # geode-viewables geode-viewables==3.4.0 # via -r requirements.in -itsdangerous>=2 +itsdangerous==2.2.0 # via flask -jinja2>=3 +jinja2==3.1.6 # via flask -markupsafe>=3 +markupsafe==3.0.3 # via # flask # jinja2 # werkzeug -opengeode-core==17.3.7 +opengeode-core==17.4.4 # via # -r requirements.in # geode-common @@ -41,7 +41,7 @@ opengeode-core==17.3.7 # opengeode-inspector # opengeode-inspector-geosciences # opengeode-io -opengeode-geosciences==9.6.0 +opengeode-geosciences==9.6.1rc1 # via # -r requirements.in # geode-viewables @@ -65,4 +65,3 @@ werkzeug==3.1.8 # -r requirements.in # flask # flask-cors - diff --git a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py index ff989fb1..7069e61c 100644 --- a/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +++ b/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py @@ -67,10 +67,7 @@ def object_priority(cls, filename: str) -> int: return og_geosciences.horizons_stack_object_priority3D(filename) def is_saveable(self, filename: str) -> bool: - import os - - ext = os.path.splitext(filename)[1][1:] - return ext in self.output_extensions() + return og_geosciences.is_horizons_stack_saveable3D(self.horizon_stack, filename) def save(self, filename: str) -> list[str]: return og_geosciences.save_horizons_stack3D(self.horizon_stack, filename) From b704741eba256df9e52e23f6b4931f9762913951 Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:01:43 +0000 Subject: [PATCH 18/23] Apply prepare changes --- requirements.txt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/requirements.txt b/requirements.txt index c0bc5720..d21dd069 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,15 +2,15 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements.txt requirements.in +# pip-compile --output-file=./requirements.txt ./requirements.in # -asgiref==3.12.1 +asgiref>=3 # via flask -blinker==1.9.0 +blinker>=1 # via flask -click==8.4.2 +click>=8 # via flask -flask[async]==3.1.2 +flask[async]>=3 # via # -r requirements.in # flask-cors @@ -22,11 +22,11 @@ geode-common==33.24.2 # geode-viewables geode-viewables==3.4.0 # via -r requirements.in -itsdangerous==2.2.0 +itsdangerous>=2 # via flask -jinja2==3.1.6 +jinja2>=3 # via flask -markupsafe==3.0.3 +markupsafe>=3 # via # flask # jinja2 @@ -65,3 +65,4 @@ werkzeug==3.1.8 # -r requirements.in # flask # flask-cors + From 059e15b2a3978561dc50e9aacdf0a517511ed4ff Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 27 Jul 2026 10:12:23 +0200 Subject: [PATCH 19/23] fix comments --- src/opengeodeweb_back/utils_functions.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index de067853..1a1a7596 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -300,28 +300,31 @@ def save_all_viewables_and_return_info( data.viewable_file = os.path.basename(viewable_path) data.light_viewable_file = os.path.basename(light_path) else: - binary_light_viewable_str = "not_viewable" - data.viewable_file = "" - data.light_viewable_file = "" + binary_light_viewable_str = None + data.viewable_file = None + data.light_viewable_file = None data.native_file = os.path.basename(native_files[0]) assert data.native_file is not None - assert data.viewable_file is not None - assert data.light_viewable_file is not None + if geode_object.is_viewable(): + assert data.viewable_file is not None + assert data.light_viewable_file is not None name = geode_object.identifier.name() if not name: flask.abort(400, "Geode object has no name defined.") response: dict[str, Any] = { "native_file": data.native_file, - "viewable_file": data.viewable_file, "id": data.id, "name": name, "viewer_type": data.viewer_object, - "binary_light_viewable": binary_light_viewable_str, + "is_viewable": geode_object.is_viewable(), "geode_object_type": data.geode_object, } + if geode_object.is_viewable(): + response["viewable_file"] = data.viewable_file + response["binary_light_viewable"] = binary_light_viewable_str if isinstance(geode_object, GeodeVertexSet): response["nb_vertices"] = geode_object.vertex_set.nb_vertices() if isinstance(geode_object, GeodeModel): From 4ad2188e67f160c2b9cd91e701cba4d38fd8f10a Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 27 Jul 2026 10:24:33 +0200 Subject: [PATCH 20/23] mypy --- src/opengeodeweb_back/utils_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 1a1a7596..d1e77520 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -198,7 +198,7 @@ def create_data_folder_from_id(data_id: str) -> str: def model_components( - data_id: str, model: GeodeModel, viewable_file: str + data_id: str, model: GeodeModel, viewable_file: str | None ) -> dict[str, Any]: uuid_to_flat_index: dict[str, int] = {} if viewable_file: From c10bfea0e614764cdb5ce40dae1c2c2fc45175d7 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 27 Jul 2026 10:31:24 +0200 Subject: [PATCH 21/23] latest v9.6.1 --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index 2652dd08..3f540f85 100644 --- a/requirements.in +++ b/requirements.in @@ -2,7 +2,7 @@ opengeode-core==17.4.4 opengeode-io==7.7.0 opengeode-inspector==6.11.6 opengeode-inspector-geosciences==1.1.0 -opengeode-geosciences==9.6.1rc1 +opengeode-geosciences==9.6.1 opengeode-geosciencesio==5.9.0 geode-common==33.24.2 geode-viewables==3.4.0 diff --git a/requirements.txt b/requirements.txt index d21dd069..b0223a5d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -41,7 +41,7 @@ opengeode-core==17.4.4 # opengeode-inspector # opengeode-inspector-geosciences # opengeode-io -opengeode-geosciences==9.6.1rc1 +opengeode-geosciences==9.6.1 # via # -r requirements.in # geode-viewables From edb12d305fa01a16a001883c7029fd3447484f12 Mon Sep 17 00:00:00 2001 From: Tao Schiro Date: Mon, 27 Jul 2026 11:17:16 +0200 Subject: [PATCH 22/23] clean code and fix comments --- src/opengeodeweb_back/routes/blueprint_routes.py | 2 +- .../routes/create/blueprint_create.py | 6 +++--- src/opengeodeweb_back/utils_functions.py | 4 ++-- tests/test_utils_functions.py | 12 ++++++------ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index ae1c6818..264816f5 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -226,7 +226,7 @@ def save_viewable_file() -> flask.Response: ) params = schemas.SaveViewableFile.from_dict(json_data) return flask.make_response( - utils_functions.generate_native_viewable_and_light_viewable_from_file( + utils_functions.generate_files_from_file( geode_object_type=geode_object_type(params.geode_object_type), input_file=params.filename, ), diff --git a/src/opengeodeweb_back/routes/create/blueprint_create.py b/src/opengeodeweb_back/routes/create/blueprint_create.py index f325aa71..dff498d3 100644 --- a/src/opengeodeweb_back/routes/create/blueprint_create.py +++ b/src/opengeodeweb_back/routes/create/blueprint_create.py @@ -35,7 +35,7 @@ def point_set() -> flask.Response: for point in params.points: builder.create_point(opengeode.Point3D([point.x, point.y, point.z])) - result = utils_functions.generate_native_viewable_and_light_viewable_from_object( + result = utils_functions.generate_files_from_object( pointset ) return flask.make_response(result, 200) @@ -61,7 +61,7 @@ def edged_curve() -> flask.Response: for edge in params.edges: builder.create_edge_with_vertices(edge[0], edge[1]) - result = utils_functions.generate_native_viewable_and_light_viewable_from_object( + result = utils_functions.generate_files_from_object( edged_curve_obj ) return flask.make_response(result, 200) @@ -89,7 +89,7 @@ def polygonal_surface() -> flask.Response: builder.compute_polygon_adjacencies() - result = utils_functions.generate_native_viewable_and_light_viewable_from_object( + result = utils_functions.generate_files_from_object( polygonal_surface_obj ) return flask.make_response(result, 200) diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index d1e77520..dff82a1a 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -332,7 +332,7 @@ def save_all_viewables_and_return_info( return response -def generate_native_viewable_and_light_viewable_from_object( +def generate_files_from_object( geode_object: GeodeObject, ) -> dict[str, Any]: data = Data.create( @@ -344,7 +344,7 @@ def generate_native_viewable_and_light_viewable_from_object( return save_all_viewables_and_return_info(geode_object, data, data_path) -def generate_native_viewable_and_light_viewable_from_file( +def generate_files_from_file( geode_object_type: GeodeObjectType, input_file: str ) -> dict[str, Any]: generic_geode_object = geode_objects[geode_object_type] diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index c041c4a8..1f18c5fc 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -162,7 +162,7 @@ def test_save_all_viewables_commits_to_db(client: FlaskClient) -> None: assert db_entry_before.native_file == result["native_file"] -def test_generate_native_viewable_and_light_viewable_from_object( +def test_generate_files_from_object( client: FlaskClient, ) -> None: app = client.application @@ -170,7 +170,7 @@ def test_generate_native_viewable_and_light_viewable_from_object( geode_object = GeodeBRep.load(os.path.join(data_dir, "test.og_brep")) result = ( - utils_functions.generate_native_viewable_and_light_viewable_from_object( + utils_functions.generate_files_from_object( geode_object ) ) @@ -197,12 +197,12 @@ def test_generate_native_viewable_and_light_viewable_from_object( assert os.path.exists(os.path.join(data_path, data.light_viewable_file)) -def test_generate_native_viewable_and_light_viewable_from_file( +def test_generate_files_from_file( client: FlaskClient, ) -> None: app = client.application with app.app_context(): - result = utils_functions.generate_native_viewable_and_light_viewable_from_file( + result = utils_functions.generate_files_from_file( GeodeBRep.geode_object_type(), "test.og_brep" ) @@ -218,12 +218,12 @@ def test_generate_native_viewable_and_light_viewable_from_file( assert isinstance(result["binary_light_viewable"], str) -def test_generate_native_viewable_and_light_viewable_from_file_with_multi_dots( +def test_generate_files_from_file_with_multi_dots( client: FlaskClient, ) -> None: app = client.application with app.app_context(): - result = utils_functions.generate_native_viewable_and_light_viewable_from_file( + result = utils_functions.generate_files_from_file( GeodeBRep.geode_object_type(), "cube.test.og_brep" ) assert result["name"] == "cube.test" From 355eef554e350b91c8ca92a7da69aa7191ec08f4 Mon Sep 17 00:00:00 2001 From: SpliiT <106495600+SpliiT@users.noreply.github.com> Date: Mon, 27 Jul 2026 09:17:53 +0000 Subject: [PATCH 23/23] Apply prepare changes --- .../routes/create/blueprint_create.py | 12 +++--------- tests/test_utils_functions.py | 6 +----- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/opengeodeweb_back/routes/create/blueprint_create.py b/src/opengeodeweb_back/routes/create/blueprint_create.py index dff498d3..460931c9 100644 --- a/src/opengeodeweb_back/routes/create/blueprint_create.py +++ b/src/opengeodeweb_back/routes/create/blueprint_create.py @@ -35,9 +35,7 @@ def point_set() -> flask.Response: for point in params.points: builder.create_point(opengeode.Point3D([point.x, point.y, point.z])) - result = utils_functions.generate_files_from_object( - pointset - ) + result = utils_functions.generate_files_from_object(pointset) return flask.make_response(result, 200) @@ -61,9 +59,7 @@ def edged_curve() -> flask.Response: for edge in params.edges: builder.create_edge_with_vertices(edge[0], edge[1]) - result = utils_functions.generate_files_from_object( - edged_curve_obj - ) + result = utils_functions.generate_files_from_object(edged_curve_obj) return flask.make_response(result, 200) @@ -89,7 +85,5 @@ def polygonal_surface() -> flask.Response: builder.compute_polygon_adjacencies() - result = utils_functions.generate_files_from_object( - polygonal_surface_obj - ) + result = utils_functions.generate_files_from_object(polygonal_surface_obj) return flask.make_response(result, 200) diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index 1f18c5fc..fff7ff85 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -169,11 +169,7 @@ def test_generate_files_from_object( with app.app_context(): geode_object = GeodeBRep.load(os.path.join(data_dir, "test.og_brep")) - result = ( - utils_functions.generate_files_from_object( - geode_object - ) - ) + result = utils_functions.generate_files_from_object(geode_object) assert isinstance(result, dict) assert isinstance(result["native_file"], str)