OpenGeodeWeb-Back 6.11.0__tar.gz → 6.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/PKG-INFO +9 -9
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/pyproject.toml +1 -1
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/requirements.txt +8 -8
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/PKG-INFO +9 -9
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +1 -0
- opengeodeweb_back-6.12.0/src/OpenGeodeWeb_Back.egg-info/requires.txt +18 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/app.py +39 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/__init__.py +2 -0
- opengeodeweb_back-6.12.0/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +103 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/blueprint_routes.py +76 -58
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/blueprint_create.py +3 -9
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.json +8 -4
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.py +2 -1
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.json +8 -4
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.py +2 -1
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.json +8 -4
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.py +2 -1
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.json +8 -4
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.py +2 -1
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/utils_functions.py +55 -38
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/tests/test_routes.py +8 -12
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/tests/test_utils_functions.py +6 -10
- opengeodeweb_back-6.11.0/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -18
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/LICENSE +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/README.md +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/setup.cfg +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/entry_points.txt +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/__init__.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/app_config.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_functions.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_brep.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_cross_section.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_edged_curve2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_edged_curve3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_graph.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_grid2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_grid3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_hybrid_solid3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_implicit_cross_section.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_implicit_structural_model.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_mesh.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_model.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_object.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_point_set2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_point_set3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_polyhedral_solid3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_regular_grid2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_regular_grid3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_section.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_structural_model.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_tetrahedral_solid3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface2d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface3d.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/geode_objects/geode_vertex_set.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/py.typed +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/__init__.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/edged_curve.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/edged_curve.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/point_set.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/point_set.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/__init__.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/allowed_files.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/allowed_objects.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/export_project.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/export_project.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/import_project.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/import_project.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/kill.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/kill.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/missing_files.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/ping.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/save_viewable_file.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/texture_coordinates.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/upload_file.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/validate.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/validate.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/opengeodeweb_back/test_utils.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/tests/test_create_routes.py +0 -0
- {opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/tests/test_geode_functions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OpenGeodeWeb-Back
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.12.0
|
|
4
4
|
Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
|
|
5
5
|
Author-email: Geode-solutions <team-web@geode-solutions.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
|
|
@@ -16,19 +16,19 @@ Requires-Dist: blinker>=1
|
|
|
16
16
|
Requires-Dist: click>=8
|
|
17
17
|
Requires-Dist: flask[async]>=3
|
|
18
18
|
Requires-Dist: flask-cors==6.0.2
|
|
19
|
-
Requires-Dist: geode-common==33.
|
|
20
|
-
Requires-Dist: geode-viewables==3.4.
|
|
19
|
+
Requires-Dist: geode-common==33.25.4
|
|
20
|
+
Requires-Dist: geode-viewables==3.4.1
|
|
21
21
|
Requires-Dist: itsdangerous>=2
|
|
22
22
|
Requires-Dist: jinja2>=3
|
|
23
23
|
Requires-Dist: markupsafe>=3
|
|
24
|
-
Requires-Dist: opengeode-core==17.
|
|
25
|
-
Requires-Dist: opengeode-geosciences==9.6.
|
|
24
|
+
Requires-Dist: opengeode-core==17.4.5
|
|
25
|
+
Requires-Dist: opengeode-geosciences==9.6.1
|
|
26
26
|
Requires-Dist: opengeode-geosciencesio==5.9.0
|
|
27
|
-
Requires-Dist: opengeode-inspector==6.11.
|
|
28
|
-
Requires-Dist: opengeode-inspector-geosciences==1.1.
|
|
29
|
-
Requires-Dist: opengeode-io==7.7.
|
|
27
|
+
Requires-Dist: opengeode-inspector==6.11.8
|
|
28
|
+
Requires-Dist: opengeode-inspector-geosciences==1.1.1
|
|
29
|
+
Requires-Dist: opengeode-io==7.7.2
|
|
30
30
|
Requires-Dist: werkzeug==3.1.8
|
|
31
|
-
Requires-Dist: opengeodeweb-microservice==1.*,>=1.
|
|
31
|
+
Requires-Dist: opengeodeweb-microservice==1.*,>=1.2.0
|
|
32
32
|
Dynamic: license-file
|
|
33
33
|
|
|
34
34
|
<h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "OpenGeodeWeb-Back"
|
|
7
|
-
version = "6.
|
|
7
|
+
version = "6.12.0"
|
|
8
8
|
dynamic = ["dependencies"]
|
|
9
9
|
authors = [{ name = "Geode-solutions", email = "team-web@geode-solutions.com" }]
|
|
10
10
|
description = "OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem"
|
|
@@ -16,11 +16,11 @@ flask[async]>=3
|
|
|
16
16
|
# flask-cors
|
|
17
17
|
flask-cors==6.0.2
|
|
18
18
|
# via -r requirements.in
|
|
19
|
-
geode-common==33.
|
|
19
|
+
geode-common==33.25.4
|
|
20
20
|
# via
|
|
21
21
|
# -r requirements.in
|
|
22
22
|
# geode-viewables
|
|
23
|
-
geode-viewables==3.4.
|
|
23
|
+
geode-viewables==3.4.1
|
|
24
24
|
# via -r requirements.in
|
|
25
25
|
itsdangerous>=2
|
|
26
26
|
# via flask
|
|
@@ -31,7 +31,7 @@ markupsafe>=3
|
|
|
31
31
|
# flask
|
|
32
32
|
# jinja2
|
|
33
33
|
# werkzeug
|
|
34
|
-
opengeode-core==17.
|
|
34
|
+
opengeode-core==17.4.5
|
|
35
35
|
# via
|
|
36
36
|
# -r requirements.in
|
|
37
37
|
# geode-common
|
|
@@ -41,7 +41,7 @@ opengeode-core==17.3.7
|
|
|
41
41
|
# opengeode-inspector
|
|
42
42
|
# opengeode-inspector-geosciences
|
|
43
43
|
# opengeode-io
|
|
44
|
-
opengeode-geosciences==9.6.
|
|
44
|
+
opengeode-geosciences==9.6.1
|
|
45
45
|
# via
|
|
46
46
|
# -r requirements.in
|
|
47
47
|
# geode-viewables
|
|
@@ -49,13 +49,13 @@ opengeode-geosciences==9.6.0
|
|
|
49
49
|
# opengeode-inspector-geosciences
|
|
50
50
|
opengeode-geosciencesio==5.9.0
|
|
51
51
|
# via -r requirements.in
|
|
52
|
-
opengeode-inspector==6.11.
|
|
52
|
+
opengeode-inspector==6.11.8
|
|
53
53
|
# via
|
|
54
54
|
# -r requirements.in
|
|
55
55
|
# opengeode-inspector-geosciences
|
|
56
|
-
opengeode-inspector-geosciences==1.1.
|
|
56
|
+
opengeode-inspector-geosciences==1.1.1
|
|
57
57
|
# via -r requirements.in
|
|
58
|
-
opengeode-io==7.7.
|
|
58
|
+
opengeode-io==7.7.2
|
|
59
59
|
# via
|
|
60
60
|
# -r requirements.in
|
|
61
61
|
# geode-viewables
|
|
@@ -66,4 +66,4 @@ werkzeug==3.1.8
|
|
|
66
66
|
# flask
|
|
67
67
|
# flask-cors
|
|
68
68
|
|
|
69
|
-
opengeodeweb-microservice==1.*,>=1.
|
|
69
|
+
opengeodeweb-microservice==1.*,>=1.2.0
|
{opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OpenGeodeWeb-Back
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.12.0
|
|
4
4
|
Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
|
|
5
5
|
Author-email: Geode-solutions <team-web@geode-solutions.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
|
|
@@ -16,19 +16,19 @@ Requires-Dist: blinker>=1
|
|
|
16
16
|
Requires-Dist: click>=8
|
|
17
17
|
Requires-Dist: flask[async]>=3
|
|
18
18
|
Requires-Dist: flask-cors==6.0.2
|
|
19
|
-
Requires-Dist: geode-common==33.
|
|
20
|
-
Requires-Dist: geode-viewables==3.4.
|
|
19
|
+
Requires-Dist: geode-common==33.25.4
|
|
20
|
+
Requires-Dist: geode-viewables==3.4.1
|
|
21
21
|
Requires-Dist: itsdangerous>=2
|
|
22
22
|
Requires-Dist: jinja2>=3
|
|
23
23
|
Requires-Dist: markupsafe>=3
|
|
24
|
-
Requires-Dist: opengeode-core==17.
|
|
25
|
-
Requires-Dist: opengeode-geosciences==9.6.
|
|
24
|
+
Requires-Dist: opengeode-core==17.4.5
|
|
25
|
+
Requires-Dist: opengeode-geosciences==9.6.1
|
|
26
26
|
Requires-Dist: opengeode-geosciencesio==5.9.0
|
|
27
|
-
Requires-Dist: opengeode-inspector==6.11.
|
|
28
|
-
Requires-Dist: opengeode-inspector-geosciences==1.1.
|
|
29
|
-
Requires-Dist: opengeode-io==7.7.
|
|
27
|
+
Requires-Dist: opengeode-inspector==6.11.8
|
|
28
|
+
Requires-Dist: opengeode-inspector-geosciences==1.1.1
|
|
29
|
+
Requires-Dist: opengeode-io==7.7.2
|
|
30
30
|
Requires-Dist: werkzeug==3.1.8
|
|
31
|
-
Requires-Dist: opengeodeweb-microservice==1.*,>=1.
|
|
31
|
+
Requires-Dist: opengeodeweb-microservice==1.*,>=1.2.0
|
|
32
32
|
Dynamic: license-file
|
|
33
33
|
|
|
34
34
|
<h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
|
{opengeodeweb_back-6.11.0 → opengeodeweb_back-6.12.0}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt
RENAMED
|
@@ -23,6 +23,7 @@ src/opengeodeweb_back/geode_objects/geode_edged_curve3d.py
|
|
|
23
23
|
src/opengeodeweb_back/geode_objects/geode_graph.py
|
|
24
24
|
src/opengeodeweb_back/geode_objects/geode_grid2d.py
|
|
25
25
|
src/opengeodeweb_back/geode_objects/geode_grid3d.py
|
|
26
|
+
src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py
|
|
26
27
|
src/opengeodeweb_back/geode_objects/geode_hybrid_solid3d.py
|
|
27
28
|
src/opengeodeweb_back/geode_objects/geode_implicit_cross_section.py
|
|
28
29
|
src/opengeodeweb_back/geode_objects/geode_implicit_structural_model.py
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
asgiref>=3
|
|
2
|
+
blinker>=1
|
|
3
|
+
click>=8
|
|
4
|
+
flask[async]>=3
|
|
5
|
+
flask-cors==6.0.2
|
|
6
|
+
geode-common==33.25.4
|
|
7
|
+
geode-viewables==3.4.1
|
|
8
|
+
itsdangerous>=2
|
|
9
|
+
jinja2>=3
|
|
10
|
+
markupsafe>=3
|
|
11
|
+
opengeode-core==17.4.5
|
|
12
|
+
opengeode-geosciences==9.6.1
|
|
13
|
+
opengeode-geosciencesio==5.9.0
|
|
14
|
+
opengeode-inspector==6.11.8
|
|
15
|
+
opengeode-inspector-geosciences==1.1.1
|
|
16
|
+
opengeode-io==7.7.2
|
|
17
|
+
werkzeug==3.1.8
|
|
18
|
+
opengeodeweb-microservice==1.*,>=1.2.0
|
|
@@ -14,6 +14,11 @@ from opengeodeweb_back.routes import blueprint_routes
|
|
|
14
14
|
from opengeodeweb_back.routes.create import blueprint_create
|
|
15
15
|
from opengeodeweb_microservice.database import connection
|
|
16
16
|
|
|
17
|
+
import queue
|
|
18
|
+
import threading
|
|
19
|
+
import json
|
|
20
|
+
from typing import Any, Dict, Generator, Tuple
|
|
21
|
+
|
|
17
22
|
|
|
18
23
|
def create_app(name: str) -> flask.Flask:
|
|
19
24
|
app = flask.Flask(name)
|
|
@@ -29,6 +34,36 @@ def create_app(name: str) -> flask.Flask:
|
|
|
29
34
|
utils_functions.before_request(flask.current_app)
|
|
30
35
|
return None
|
|
31
36
|
|
|
37
|
+
def wants_event_stream() -> bool:
|
|
38
|
+
accept = flask.request.headers.get("Accept", "")
|
|
39
|
+
return "text/event-stream" in accept
|
|
40
|
+
|
|
41
|
+
_event_queue: queue.Queue[tuple[str, dict[str, Any]]] = queue.Queue()
|
|
42
|
+
_lock = threading.Lock()
|
|
43
|
+
|
|
44
|
+
def publish_event(event: str, data: dict[str, Any]) -> None:
|
|
45
|
+
_event_queue.put((event, data))
|
|
46
|
+
|
|
47
|
+
def stream_events() -> Generator[str, None, None]:
|
|
48
|
+
while True:
|
|
49
|
+
event, data = _event_queue.get()
|
|
50
|
+
yield f"event: {event}\ndata: {json.dumps(data)}\n\n"
|
|
51
|
+
|
|
52
|
+
@app.after_request
|
|
53
|
+
def after_request(response: flask.Response) -> flask.Response:
|
|
54
|
+
endpoint = flask.request.endpoint
|
|
55
|
+
if endpoint == "events" or endpoint == None:
|
|
56
|
+
return response
|
|
57
|
+
|
|
58
|
+
if wants_event_stream():
|
|
59
|
+
payload: dict[str, Any]
|
|
60
|
+
try:
|
|
61
|
+
payload = response.get_json()
|
|
62
|
+
except Exception:
|
|
63
|
+
payload = {"status": response.status_code}
|
|
64
|
+
publish_event(endpoint, payload)
|
|
65
|
+
return response
|
|
66
|
+
|
|
32
67
|
@app.teardown_request
|
|
33
68
|
def teardown_request(exception: BaseException | None) -> None:
|
|
34
69
|
utils_functions.teardown_request(flask.current_app, exception)
|
|
@@ -42,6 +77,10 @@ def create_app(name: str) -> flask.Flask:
|
|
|
42
77
|
print("\033[91mError:\033[0m \033[91m" + str(exception) + "\033[0m", flush=True)
|
|
43
78
|
return flask.make_response({"description": str(exception)}, 500)
|
|
44
79
|
|
|
80
|
+
@app.route("/events")
|
|
81
|
+
def events() -> flask.Response:
|
|
82
|
+
return flask.Response(stream_events(), mimetype="text/event-stream")
|
|
83
|
+
|
|
45
84
|
@app.route(
|
|
46
85
|
"/error",
|
|
47
86
|
methods=["POST"],
|
|
@@ -31,6 +31,7 @@ from .geode_structural_model import GeodeStructuralModel
|
|
|
31
31
|
from .geode_cross_section import GeodeCrossSection
|
|
32
32
|
from .geode_implicit_structural_model import GeodeImplicitStructuralModel
|
|
33
33
|
from .geode_implicit_cross_section import GeodeImplicitCrossSection
|
|
34
|
+
from .geode_horizon_stack3d import GeodeHorizonStack3D
|
|
34
35
|
|
|
35
36
|
geode_objects: dict[GeodeObjectType, type[GeodeObject]] = {
|
|
36
37
|
"VertexSet": GeodeVertexSet,
|
|
@@ -58,4 +59,5 @@ geode_objects: dict[GeodeObjectType, type[GeodeObject]] = {
|
|
|
58
59
|
"CrossSection": GeodeCrossSection,
|
|
59
60
|
"ImplicitStructuralModel": GeodeImplicitStructuralModel,
|
|
60
61
|
"ImplicitCrossSection": GeodeImplicitCrossSection,
|
|
62
|
+
"HorizonStack3D": GeodeHorizonStack3D,
|
|
61
63
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Standard library imports
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
# Third party imports
|
|
6
|
+
import opengeode as og
|
|
7
|
+
import opengeode_geosciences as og_geosciences
|
|
8
|
+
from opengeodeweb_microservice.database.data_types import GeodeModelType
|
|
9
|
+
|
|
10
|
+
# Local application imports
|
|
11
|
+
from .geode_model import GeodeModel, ComponentRegistry
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GeodeHorizonStack3D(GeodeModel):
|
|
15
|
+
horizon_stack: og_geosciences.HorizonsStack3D
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self, horizon_stack: og_geosciences.HorizonsStack3D | None = None
|
|
19
|
+
) -> None:
|
|
20
|
+
self.horizon_stack = (
|
|
21
|
+
horizon_stack
|
|
22
|
+
if horizon_stack is not None
|
|
23
|
+
else og_geosciences.HorizonsStack3D()
|
|
24
|
+
)
|
|
25
|
+
super().__init__(self.horizon_stack)
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def geode_object_type(cls) -> GeodeModelType:
|
|
29
|
+
return "HorizonStack3D"
|
|
30
|
+
|
|
31
|
+
def native_extension(self) -> str:
|
|
32
|
+
return self.horizon_stack.native_extension()
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def is_3D(cls) -> bool:
|
|
36
|
+
return True
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def is_viewable(cls) -> bool:
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
def builder(self) -> og_geosciences.HorizonsStackBuilder3D:
|
|
43
|
+
return og_geosciences.HorizonsStackBuilder3D(self.horizon_stack)
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def load(cls, filename: str) -> GeodeHorizonStack3D:
|
|
47
|
+
return GeodeHorizonStack3D(og_geosciences.load_horizons_stack3D(filename))
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def additional_files(cls, filename: str) -> og.AdditionalFiles:
|
|
51
|
+
return og_geosciences.horizons_stack_additional_files3D(filename)
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def is_loadable(cls, filename: str) -> og.Percentage:
|
|
55
|
+
return og_geosciences.is_horizons_stack_loadable3D(filename)
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def input_extensions(cls) -> list[str]:
|
|
59
|
+
return og_geosciences.HorizonsStackInputFactory3D.list_creators()
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def output_extensions(cls) -> list[str]:
|
|
63
|
+
return og_geosciences.HorizonsStackOutputFactory3D.list_creators()
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def object_priority(cls, filename: str) -> int:
|
|
67
|
+
return og_geosciences.horizons_stack_object_priority3D(filename)
|
|
68
|
+
|
|
69
|
+
def is_saveable(self, filename: str) -> bool:
|
|
70
|
+
return og_geosciences.is_horizons_stack_saveable3D(self.horizon_stack, filename)
|
|
71
|
+
|
|
72
|
+
def save(self, filename: str) -> list[str]:
|
|
73
|
+
return og_geosciences.save_horizons_stack3D(self.horizon_stack, filename)
|
|
74
|
+
|
|
75
|
+
def save_viewable(self, filename_without_extension: str) -> str:
|
|
76
|
+
return ""
|
|
77
|
+
|
|
78
|
+
def save_light_viewable(self, filename_without_extension: str) -> str:
|
|
79
|
+
return ""
|
|
80
|
+
|
|
81
|
+
def mesh_components(self) -> ComponentRegistry:
|
|
82
|
+
return {}
|
|
83
|
+
|
|
84
|
+
def collection_components(self) -> ComponentRegistry:
|
|
85
|
+
return {}
|
|
86
|
+
|
|
87
|
+
def boundaries(self, id: og.uuid) -> list[og.ComponentID]:
|
|
88
|
+
return []
|
|
89
|
+
|
|
90
|
+
def internals(self, id: og.uuid) -> list[og.ComponentID]:
|
|
91
|
+
return []
|
|
92
|
+
|
|
93
|
+
def items(self, id: og.uuid) -> list[og.ComponentID]:
|
|
94
|
+
return []
|
|
95
|
+
|
|
96
|
+
def component(self, id: og.uuid) -> og.Component3D:
|
|
97
|
+
raise NotImplementedError("HorizonStack3D has no mesh components")
|
|
98
|
+
|
|
99
|
+
def inspect(self) -> Any:
|
|
100
|
+
return None
|
|
101
|
+
|
|
102
|
+
def validate(self) -> Any:
|
|
103
|
+
return None
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Standard library imports
|
|
2
|
+
from opengeodeweb_back.geode_objects.geode_solid_mesh3d import GeodeSolidMesh3D
|
|
2
3
|
import os
|
|
3
4
|
import time
|
|
4
5
|
import shutil
|
|
5
6
|
import math
|
|
6
7
|
from threading import Timer
|
|
7
|
-
from typing import Any, Union, get_args
|
|
8
8
|
|
|
9
9
|
# Third party imports
|
|
10
10
|
import flask
|
|
@@ -31,9 +31,8 @@ from opengeodeweb_back.geode_objects.geode_grid2d import GeodeGrid2D
|
|
|
31
31
|
from opengeodeweb_back.geode_objects.geode_grid3d import GeodeGrid3D
|
|
32
32
|
from opengeodeweb_back.geode_objects.geode_surface_mesh2d import GeodeSurfaceMesh2D
|
|
33
33
|
from opengeodeweb_back.geode_objects.geode_surface_mesh3d import GeodeSurfaceMesh3D
|
|
34
|
-
from opengeodeweb_back.geode_objects.geode_solid_mesh3d import GeodeSolidMesh3D
|
|
35
34
|
|
|
36
|
-
ComponentMesh =
|
|
35
|
+
ComponentMesh = (
|
|
37
36
|
og.Corner2D,
|
|
38
37
|
og.Corner3D,
|
|
39
38
|
og.Line2D,
|
|
@@ -41,7 +40,10 @@ ComponentMesh = Union[
|
|
|
41
40
|
og.Surface2D,
|
|
42
41
|
og.Surface3D,
|
|
43
42
|
og.Block3D,
|
|
44
|
-
|
|
43
|
+
)
|
|
44
|
+
ComponentLine = (og.Line2D, og.Line3D)
|
|
45
|
+
ComponentSurface = (og.Surface2D, og.Surface3D)
|
|
46
|
+
ComponentBlock = og.Block3D
|
|
45
47
|
|
|
46
48
|
routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back")
|
|
47
49
|
|
|
@@ -226,7 +228,7 @@ def save_viewable_file() -> flask.Response:
|
|
|
226
228
|
)
|
|
227
229
|
params = schemas.SaveViewableFile.from_dict(json_data)
|
|
228
230
|
return flask.make_response(
|
|
229
|
-
utils_functions.
|
|
231
|
+
utils_functions.generate_files_from_file(
|
|
230
232
|
geode_object_type=geode_object_type(params.geode_object_type),
|
|
231
233
|
input_file=params.filename,
|
|
232
234
|
),
|
|
@@ -250,45 +252,55 @@ def texture_coordinates() -> flask.Response:
|
|
|
250
252
|
return flask.make_response({"texture_coordinates": texture_coordinates}, 200)
|
|
251
253
|
|
|
252
254
|
|
|
255
|
+
def extract_valid_attribute_values(
|
|
256
|
+
attribute_manager: og.AttributeManager,
|
|
257
|
+
attribute_name: str,
|
|
258
|
+
item_index: int,
|
|
259
|
+
) -> list[float]:
|
|
260
|
+
component_attribute = attribute_manager.find_generic_attribute(attribute_name)
|
|
261
|
+
if not component_attribute.is_genericable():
|
|
262
|
+
return []
|
|
263
|
+
valid_values: list[float] = []
|
|
264
|
+
for index in range(attribute_manager.nb_elements()):
|
|
265
|
+
value = component_attribute.generic_item_value(index, item_index)
|
|
266
|
+
if value is not None and not math.isnan(value):
|
|
267
|
+
valid_values.append(value)
|
|
268
|
+
return valid_values
|
|
269
|
+
|
|
270
|
+
|
|
253
271
|
def attributes_metadata(
|
|
254
|
-
manager: og.AttributeManager,
|
|
272
|
+
manager: og.AttributeManager | list[og.AttributeManager],
|
|
255
273
|
) -> list[dict[str, str | int | float | list[float]]]:
|
|
274
|
+
attribute_managers = manager if isinstance(manager, list) else [manager]
|
|
256
275
|
attributes: list[dict[str, str | int | float | list[float]]] = []
|
|
257
|
-
|
|
258
|
-
for name in
|
|
259
|
-
attribute =
|
|
276
|
+
first_manager = attribute_managers[0]
|
|
277
|
+
for name in first_manager.attribute_names():
|
|
278
|
+
attribute = first_manager.find_generic_attribute(name)
|
|
260
279
|
nb_items = 1
|
|
261
|
-
min_value, max_value = -1.0, -1.0
|
|
262
280
|
min_values, max_values = [-1.0], [-1.0]
|
|
263
281
|
if attribute.is_genericable():
|
|
264
282
|
nb_items = attribute.nb_items()
|
|
265
283
|
min_values, max_values = [], []
|
|
266
|
-
for
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
min_values.append(min(valid) if valid else -1.0)
|
|
277
|
-
max_values.append(max(valid) if valid else -1.0)
|
|
278
|
-
min_value, max_value = min_values[0], max_values[0]
|
|
279
|
-
|
|
284
|
+
for item_index in range(nb_items):
|
|
285
|
+
valid_values: list[float] = []
|
|
286
|
+
for attribute_manager in attribute_managers:
|
|
287
|
+
valid_values.extend(
|
|
288
|
+
extract_valid_attribute_values(
|
|
289
|
+
attribute_manager, name, item_index
|
|
290
|
+
)
|
|
291
|
+
)
|
|
292
|
+
min_values.append(min(valid_values) if valid_values else -1.0)
|
|
293
|
+
max_values.append(max(valid_values) if valid_values else -1.0)
|
|
280
294
|
attributes.append(
|
|
281
295
|
{
|
|
282
296
|
"attribute_name": name,
|
|
283
297
|
"nb_items": nb_items,
|
|
284
|
-
"min_value":
|
|
285
|
-
"max_value":
|
|
298
|
+
"min_value": min_values[0],
|
|
299
|
+
"max_value": max_values[0],
|
|
286
300
|
"min_values": min_values,
|
|
287
301
|
"max_values": max_values,
|
|
288
302
|
}
|
|
289
303
|
)
|
|
290
|
-
print(f"[ATTRIBUTES] Number of items: {nb_items}")
|
|
291
|
-
print(f"[ATTRIBUTES] Attributes: {attributes}")
|
|
292
304
|
return attributes
|
|
293
305
|
|
|
294
306
|
|
|
@@ -399,13 +411,16 @@ def model_component_vertex_attribute_names() -> flask.Response:
|
|
|
399
411
|
geode_object = geode_functions.load_geode_object(params.id)
|
|
400
412
|
if not isinstance(geode_object, GeodeModel):
|
|
401
413
|
flask.abort(400, f"{params.id} is not a GeodeModel")
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
414
|
+
managers = [
|
|
415
|
+
component.mesh().vertex_attribute_manager()
|
|
416
|
+
for component_id in params.component_ids
|
|
417
|
+
if isinstance(
|
|
418
|
+
(component := geode_object.component(og.uuid(component_id))),
|
|
419
|
+
ComponentMesh,
|
|
420
|
+
)
|
|
421
|
+
]
|
|
407
422
|
return flask.make_response(
|
|
408
|
-
{"attributes": attributes_metadata(
|
|
423
|
+
{"attributes": attributes_metadata(managers)},
|
|
409
424
|
200,
|
|
410
425
|
)
|
|
411
426
|
|
|
@@ -422,15 +437,16 @@ def model_component_edge_attribute_names() -> flask.Response:
|
|
|
422
437
|
geode_object = geode_functions.load_geode_object(params.id)
|
|
423
438
|
if not isinstance(geode_object, GeodeModel):
|
|
424
439
|
flask.abort(400, f"{params.id} is not a GeodeModel")
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
440
|
+
managers = [
|
|
441
|
+
component.mesh().edge_attribute_manager()
|
|
442
|
+
for component_id in params.component_ids
|
|
443
|
+
if isinstance(
|
|
444
|
+
(component := geode_object.component(og.uuid(component_id))),
|
|
445
|
+
ComponentLine,
|
|
446
|
+
)
|
|
447
|
+
]
|
|
432
448
|
return flask.make_response(
|
|
433
|
-
{"attributes": attributes_metadata(
|
|
449
|
+
{"attributes": attributes_metadata(managers)},
|
|
434
450
|
200,
|
|
435
451
|
)
|
|
436
452
|
|
|
@@ -447,15 +463,16 @@ def model_component_polygon_attribute_names() -> flask.Response:
|
|
|
447
463
|
geode_object = geode_functions.load_geode_object(params.id)
|
|
448
464
|
if not isinstance(geode_object, GeodeModel):
|
|
449
465
|
flask.abort(400, f"{params.id} is not a GeodeModel")
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
466
|
+
managers = [
|
|
467
|
+
component.mesh().polygon_attribute_manager()
|
|
468
|
+
for component_id in params.component_ids
|
|
469
|
+
if isinstance(
|
|
470
|
+
(component := geode_object.component(og.uuid(component_id))),
|
|
471
|
+
ComponentSurface,
|
|
472
|
+
)
|
|
473
|
+
]
|
|
457
474
|
return flask.make_response(
|
|
458
|
-
{"attributes": attributes_metadata(
|
|
475
|
+
{"attributes": attributes_metadata(managers)},
|
|
459
476
|
200,
|
|
460
477
|
)
|
|
461
478
|
|
|
@@ -472,15 +489,16 @@ def model_component_polyhedron_attribute_names() -> flask.Response:
|
|
|
472
489
|
geode_object = geode_functions.load_geode_object(params.id)
|
|
473
490
|
if not isinstance(geode_object, GeodeModel):
|
|
474
491
|
flask.abort(400, f"{params.id} is not a GeodeModel")
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
492
|
+
managers = [
|
|
493
|
+
component.mesh().polyhedron_attribute_manager()
|
|
494
|
+
for component_id in params.component_ids
|
|
495
|
+
if isinstance(
|
|
496
|
+
(component := geode_object.component(og.uuid(component_id))),
|
|
497
|
+
ComponentBlock,
|
|
498
|
+
)
|
|
499
|
+
]
|
|
482
500
|
return flask.make_response(
|
|
483
|
-
{"attributes": attributes_metadata(
|
|
501
|
+
{"attributes": attributes_metadata(managers)},
|
|
484
502
|
200,
|
|
485
503
|
)
|
|
486
504
|
|
|
@@ -35,9 +35,7 @@ def point_set() -> flask.Response:
|
|
|
35
35
|
for point in params.points:
|
|
36
36
|
builder.create_point(opengeode.Point3D([point.x, point.y, point.z]))
|
|
37
37
|
|
|
38
|
-
result = utils_functions.
|
|
39
|
-
pointset
|
|
40
|
-
)
|
|
38
|
+
result = utils_functions.generate_files_from_object(pointset)
|
|
41
39
|
return flask.make_response(result, 200)
|
|
42
40
|
|
|
43
41
|
|
|
@@ -61,9 +59,7 @@ def edged_curve() -> flask.Response:
|
|
|
61
59
|
for edge in params.edges:
|
|
62
60
|
builder.create_edge_with_vertices(edge[0], edge[1])
|
|
63
61
|
|
|
64
|
-
result = utils_functions.
|
|
65
|
-
edged_curve_obj
|
|
66
|
-
)
|
|
62
|
+
result = utils_functions.generate_files_from_object(edged_curve_obj)
|
|
67
63
|
return flask.make_response(result, 200)
|
|
68
64
|
|
|
69
65
|
|
|
@@ -89,7 +85,5 @@ def polygonal_surface() -> flask.Response:
|
|
|
89
85
|
|
|
90
86
|
builder.compute_polygon_adjacencies()
|
|
91
87
|
|
|
92
|
-
result = utils_functions.
|
|
93
|
-
polygonal_surface_obj
|
|
94
|
-
)
|
|
88
|
+
result = utils_functions.generate_files_from_object(polygonal_surface_obj)
|
|
95
89
|
return flask.make_response(result, 200)
|
|
@@ -7,11 +7,15 @@
|
|
|
7
7
|
"type": "string",
|
|
8
8
|
"minLength": 1
|
|
9
9
|
},
|
|
10
|
-
"
|
|
11
|
-
"type": "
|
|
12
|
-
"
|
|
10
|
+
"component_ids": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"minLength": 1
|
|
15
|
+
},
|
|
16
|
+
"minItems": 1
|
|
13
17
|
}
|
|
14
18
|
},
|
|
15
|
-
"required": ["id", "
|
|
19
|
+
"required": ["id", "component_ids"],
|
|
16
20
|
"additionalProperties": false
|
|
17
21
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from dataclasses_json import DataClassJsonMixin
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
+
from typing import List
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
@dataclass
|
|
@@ -7,5 +8,5 @@ class ModelComponentEdgeAttributeNames(DataClassJsonMixin):
|
|
|
7
8
|
def __post_init__(self) -> None:
|
|
8
9
|
print(self, flush=True)
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
component_ids: List[str]
|
|
11
12
|
id: str
|
|
@@ -7,11 +7,15 @@
|
|
|
7
7
|
"type": "string",
|
|
8
8
|
"minLength": 1
|
|
9
9
|
},
|
|
10
|
-
"
|
|
11
|
-
"type": "
|
|
12
|
-
"
|
|
10
|
+
"component_ids": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"minLength": 1
|
|
15
|
+
},
|
|
16
|
+
"minItems": 1
|
|
13
17
|
}
|
|
14
18
|
},
|
|
15
|
-
"required": ["id", "
|
|
19
|
+
"required": ["id", "component_ids"],
|
|
16
20
|
"additionalProperties": false
|
|
17
21
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from dataclasses_json import DataClassJsonMixin
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
+
from typing import List
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
@dataclass
|
|
@@ -7,5 +8,5 @@ class ModelComponentPolygonAttributeNames(DataClassJsonMixin):
|
|
|
7
8
|
def __post_init__(self) -> None:
|
|
8
9
|
print(self, flush=True)
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
component_ids: List[str]
|
|
11
12
|
id: str
|