Skip to content
Merged
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "OpenGeodeWeb-Back"
version = "5.7.4"
version = "5.8.0-rc.1"
dynamic = ["dependencies"]
authors = [
{ name="Geode-solutions", email="[email protected]" },
Expand Down
33 changes: 16 additions & 17 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# This file is autogenerated by pip-compile with Python 3.10
# This file is autogenerated by pip-compile with Python 3.12
# by the following command:
#
# pip-compile requirements.in
Expand All @@ -14,18 +14,18 @@ blinker==1.9.0
# via flask
click==8.1.8
# via flask
flask[async]==3.1.0
flask[async]==3.1.1
# via
# -r requirements.in
# flask-cors
flask-cors==5.0.1
# via -r requirements.in
geode-background==9.2.4
geode-background==9.2.6
# via
# geode-explicit
# geode-implicit
# geode-simplex
geode-common==33.8.1
geode-common==33.8.4
# via
# -r requirements.in
# geode-background
Expand All @@ -35,22 +35,22 @@ geode-common==33.8.1
# geode-numerics
# geode-simplex
# geode-viewables
geode-conversion==6.2.13
geode-conversion==6.3.0
# via
# geode-explicit
# geode-implicit
geode-explicit==6.1.39
geode-explicit==6.2.0
# via
# -r requirements.in
# geode-implicit
geode-implicit==3.7.10
geode-implicit==3.9.1
# via -r requirements.in
geode-numerics==6.0.6
geode-numerics==6.2.0
# via
# -r requirements.in
# geode-implicit
# geode-simplex
geode-simplex==9.3.2
geode-simplex==9.4.0
# via
# -r requirements.in
# geode-implicit
Expand All @@ -66,9 +66,10 @@ jsonschema-specifications==2025.4.1
# via jsonschema
markupsafe==3.0.2
# via
# flask
# jinja2
# werkzeug
opengeode-core==15.18.0
opengeode-core==15.19.1
# via
# -r requirements.in
# geode-background
Expand All @@ -83,17 +84,17 @@ opengeode-core==15.18.0
# opengeode-geosciencesio
# opengeode-inspector
# opengeode-io
opengeode-geosciences==8.4.7
opengeode-geosciences==8.4.8
# via
# -r requirements.in
# geode-implicit
# geode-viewables
# opengeode-geosciencesio
opengeode-geosciencesio==5.3.9
opengeode-geosciencesio==5.3.10
# via
# -r requirements.in
# geode-implicit
opengeode-inspector==6.4.1
opengeode-inspector==6.5.0
# via
# -r requirements.in
# geode-explicit
Expand All @@ -109,14 +110,12 @@ referencing==0.36.2
# via
# jsonschema
# jsonschema-specifications
rpds-py==0.24.0
rpds-py==0.25.0
# via
# jsonschema
# referencing
typing-extensions==4.13.2
# via
# asgiref
# referencing
# via referencing
werkzeug==3.1.3
# via
# -r requirements.in
Expand Down
6 changes: 6 additions & 0 deletions src/opengeodeweb_back/geode_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ def save_viewable(geode_object: str, data, folder_absolute_path: str, id: str):
)


def save_light_viewable(geode_object: str, data, folder_absolute_path: str, id: str):
return geode_object_value(geode_object)["save_light_viewable"](
data, os.path.join(folder_absolute_path, id)
)


def geode_object_input_extensions(geode_object: str):
geode_object_input_list_creators = input_factory(geode_object).list_creators()
geode_object_input_list_creators.sort()
Expand Down
23 changes: 22 additions & 1 deletion src/opengeodeweb_back/geode_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_brep,
"save_light_viewable": g_v.save_light_viewable_brep,
"inspector": og_inspector.inspect_brep,
},
"CrossSection": {
Expand All @@ -62,6 +63,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_cross_section,
"save_light_viewable": g_v.save_light_viewable_cross_section,
"inspector": og_inspector.inspect_section,
},
"EdgedCurve2D": {
Expand All @@ -84,6 +86,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_edged_curve2D,
"save_light_viewable": g_v.save_light_viewable_edged_curve2D,
"inspector": og_inspector.inspect_edged_curve2D,
},
"EdgedCurve3D": {
Expand All @@ -106,6 +109,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_edged_curve3D,
"save_light_viewable": g_v.save_light_viewable_edged_curve3D,
"inspector": og_inspector.inspect_edged_curve3D,
},
"Graph": {
Expand Down Expand Up @@ -142,6 +146,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_hybrid_solid3D,
"save_light_viewable": g_v.save_light_viewable_hybrid_solid3D,
"inspector": og_inspector.inspect_solid3D,
},
"ImplicitCrossSection": {
Expand All @@ -164,6 +169,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_implicit_cross_section,
"save_light_viewable": g_v.save_light_viewable_implicit_cross_section,
"inspector": og_inspector.inspect_section,
},
"ImplicitStructuralModel": {
Expand All @@ -186,6 +192,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_implicit_structural_model,
"save_light_viewable": g_v.save_light_viewable_implicit_structural_model,
"inspector": og_inspector.inspect_brep,
},
"LightRegularGrid2D": {
Expand All @@ -201,7 +208,8 @@ def geode_objects_dict():
"elements": [points, polygons],
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_light_regular_grid2D,
"save_viewable": g_v.save_light_viewable_light_regular_grid2D,
"save_light_viewable": g_v.save_light_viewable_light_regular_grid2D,
},
"LightRegularGrid3D": {
"class": og.LightRegularGrid3D,
Expand All @@ -217,6 +225,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_light_regular_grid3D,
"save_light_viewable": g_v.save_light_viewable_light_regular_grid3D,
},
"PointSet2D": {
"class": og.PointSet2D,
Expand All @@ -238,6 +247,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_point_set2D,
"save_light_viewable": g_v.save_light_viewable_point_set2D,
"inspector": og_inspector.inspect_point_set2D,
},
"PointSet3D": {
Expand All @@ -260,6 +270,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_point_set3D,
"save_light_viewable": g_v.save_light_viewable_point_set3D,
"inspector": og_inspector.inspect_point_set3D,
},
"PolygonalSurface2D": {
Expand All @@ -282,6 +293,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_polygonal_surface2D,
"save_light_viewable": g_v.save_light_viewable_polygonal_surface2D,
"inspector": og_inspector.inspect_surface2D,
},
"PolygonalSurface3D": {
Expand All @@ -304,6 +316,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_polygonal_surface3D,
"save_light_viewable": g_v.save_light_viewable_polygonal_surface3D,
"inspector": og_inspector.inspect_surface3D,
},
"PolyhedralSolid3D": {
Expand All @@ -326,6 +339,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_polyhedral_solid3D,
"save_light_viewable": g_v.save_light_viewable_polyhedral_solid3D,
"inspector": og_inspector.inspect_solid3D,
},
"RasterImage2D": {
Expand Down Expand Up @@ -376,6 +390,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_regular_grid2D,
"save_light_viewable": g_v.save_light_viewable_regular_grid2D,
},
"RegularGrid3D": {
"class": og.RegularGrid3D,
Expand All @@ -397,6 +412,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_regular_grid3D,
"save_light_viewable": g_v.save_light_viewable_regular_grid3D,
},
"Section": {
"class": og.Section,
Expand All @@ -417,6 +433,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_section,
"save_light_viewable": g_v.save_light_viewable_section,
"inspector": og_inspector.inspect_section,
},
"StructuralModel": {
Expand All @@ -439,6 +456,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_structural_model,
"save_light_viewable": g_v.save_light_viewable_structural_model,
"inspector": og_inspector.inspect_brep,
},
"TetrahedralSolid3D": {
Expand All @@ -461,6 +479,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_tetrahedral_solid3D,
"save_light_viewable": g_v.save_light_viewable_tetrahedral_solid3D,
"inspector": og_inspector.inspect_solid3D,
},
"TriangulatedSurface2D": {
Expand All @@ -483,6 +502,7 @@ def geode_objects_dict():
"is_3D": False,
"is_viewable": True,
"save_viewable": g_v.save_viewable_triangulated_surface2D,
"save_light_viewable": g_v.save_light_viewable_triangulated_surface2D,
"inspector": og_inspector.inspect_surface2D,
},
"TriangulatedSurface3D": {
Expand All @@ -505,6 +525,7 @@ def geode_objects_dict():
"is_3D": True,
"is_viewable": True,
"save_viewable": g_v.save_viewable_triangulated_surface3D,
"save_light_viewable": g_v.save_light_viewable_triangulated_surface3D,
"inspector": og_inspector.inspect_surface3D,
},
"VertexSet": {
Expand Down
13 changes: 13 additions & 0 deletions src/opengeodeweb_back/routes/blueprint_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,18 @@ def save_viewable_file():
saved_viewable_file_path = geode_functions.save_viewable(
flask.request.json["input_geode_object"], data, DATA_FOLDER_PATH, generated_id
)

saved_light_viewable_file_path = geode_functions.save_light_viewable(
flask.request.json["input_geode_object"],
data,
DATA_FOLDER_PATH,
"light_" + generated_id,
)

f = open(saved_light_viewable_file_path, "rb")
binary_light_viewable = f.read()
f.close()

geode_functions.save(
flask.request.json["input_geode_object"],
data,
Expand All @@ -280,6 +292,7 @@ def save_viewable_file():
"viewable_file_name": viewable_file_name,
"id": generated_id,
"object_type": object_type,
"binary_light_viewable": str(binary_light_viewable, "utf-8"),
},
200,
)
Expand Down
11 changes: 10 additions & 1 deletion tests/test_geode_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,24 @@ def test_load():
if geode_functions.is_loadable(geode_object, file_absolute_path):
data = geode_functions.load(geode_object, file_absolute_path)
data_name = data.name()
uu_id = str(uuid.uuid4()).replace("-", "")
if "save_viewable" in value:
uu_id = str(uuid.uuid4()).replace("-", "")
viewable_file_path = geode_functions.save_viewable(
geode_object,
data,
os.path.abspath(f"./output"),
data_name,
)
os.remove(viewable_file_path)

if "save_light_viewable" in value:
light_viewable_file_path = geode_functions.save_light_viewable(
geode_object,
data,
os.path.abspath(f"./output"),
data_name,
)
os.remove(light_viewable_file_path)
geode_objects_and_output_extensions = (
geode_functions.geode_objects_output_extensions(geode_object, data)
)
Expand Down
8 changes: 6 additions & 2 deletions tests/test_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ def get_full_data():
test_utils.test_route_wrong_params(client, route, get_full_data)


def test_upload_file(client):
def test_upload_file(client, filename="corbi.og_brep"):
response = client.put(
f"/upload_file",
data={"file": FileStorage(open("./tests/corbi.og_brep", "rb"))},
data={"file": FileStorage(open(f"./tests/{filename}", "rb"))},
)

assert response.status_code == 201
Expand Down Expand Up @@ -139,6 +139,8 @@ def get_full_data():


def test_save_viewable_file(client):

test_upload_file(client, filename="corbi.og_brep")
route = f"/save_viewable_file"

def get_full_data():
Expand All @@ -161,6 +163,8 @@ def get_full_data():
object_type = response.json["object_type"]
assert type(object_type) is str
assert object_type in ["model", "mesh"]
binary_light_viewable = response.json["binary_light_viewable"]
assert type(binary_light_viewable) is str

# Test all params
test_utils.test_route_wrong_params(client, route, get_full_data)
Expand Down