OpenGeodeWeb-Back 6.8.1rc1__tar.gz → 6.9.0rc1__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.
Files changed (113) hide show
  1. {opengeodeweb_back-6.8.1rc1/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-6.9.0rc1}/PKG-INFO +1 -1
  2. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/pyproject.toml +1 -1
  3. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO +1 -1
  4. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +8 -0
  5. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/blueprint_routes.py +110 -1
  6. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/__init__.py +4 -0
  7. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.json +17 -0
  8. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.py +11 -0
  9. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.json +17 -0
  10. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.py +11 -0
  11. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.json +17 -0
  12. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.py +11 -0
  13. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.json +17 -0
  14. opengeodeweb_back-6.9.0rc1/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.py +11 -0
  15. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/utils_functions.py +3 -0
  16. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/tests/test_routes.py +91 -0
  17. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/LICENSE +0 -0
  18. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/README.md +0 -0
  19. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/requirements.txt +0 -0
  20. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/setup.cfg +0 -0
  21. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
  22. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/OpenGeodeWeb_Back.egg-info/entry_points.txt +0 -0
  23. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -0
  24. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
  25. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/__init__.py +0 -0
  26. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/app.py +0 -0
  27. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/app_config.py +0 -0
  28. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_functions.py +0 -0
  29. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/__init__.py +0 -0
  30. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_brep.py +0 -0
  31. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_cross_section.py +0 -0
  32. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_edged_curve2d.py +0 -0
  33. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_edged_curve3d.py +0 -0
  34. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_graph.py +0 -0
  35. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_grid2d.py +0 -0
  36. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_grid3d.py +0 -0
  37. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_hybrid_solid3d.py +0 -0
  38. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_implicit_cross_section.py +0 -0
  39. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_implicit_structural_model.py +0 -0
  40. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid2d.py +0 -0
  41. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid3d.py +0 -0
  42. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_mesh.py +0 -0
  43. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_model.py +0 -0
  44. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_object.py +0 -0
  45. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_point_set2d.py +0 -0
  46. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_point_set3d.py +0 -0
  47. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface2d.py +0 -0
  48. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface3d.py +0 -0
  49. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_polyhedral_solid3d.py +0 -0
  50. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py +0 -0
  51. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py +0 -0
  52. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_regular_grid2d.py +0 -0
  53. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_regular_grid3d.py +0 -0
  54. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_section.py +0 -0
  55. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py +0 -0
  56. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_structural_model.py +0 -0
  57. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py +0 -0
  58. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py +0 -0
  59. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_tetrahedral_solid3d.py +0 -0
  60. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface2d.py +0 -0
  61. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface3d.py +0 -0
  62. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/geode_objects/geode_vertex_set.py +0 -0
  63. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/py.typed +0 -0
  64. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/blueprint_create.py +0 -0
  65. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/__init__.py +0 -0
  66. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/edged_curve.json +0 -0
  67. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/edged_curve.py +0 -0
  68. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/point_set.json +0 -0
  69. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/point_set.py +0 -0
  70. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.json +0 -0
  71. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.py +0 -0
  72. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
  73. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/allowed_files.py +0 -0
  74. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
  75. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/allowed_objects.py +0 -0
  76. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.json +0 -0
  77. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.py +0 -0
  78. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.json +0 -0
  79. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.py +0 -0
  80. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/export_project.json +0 -0
  81. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/export_project.py +0 -0
  82. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.json +0 -0
  83. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.py +0 -0
  84. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
  85. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +0 -0
  86. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
  87. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +0 -0
  88. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/import_project.json +0 -0
  89. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/import_project.py +0 -0
  90. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/inspect_file.json +0 -0
  91. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/inspect_file.py +0 -0
  92. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/kill.json +0 -0
  93. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/kill.py +0 -0
  94. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
  95. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/missing_files.py +0 -0
  96. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
  97. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/ping.py +0 -0
  98. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
  99. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.py +0 -0
  100. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
  101. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +0 -0
  102. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
  103. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/save_viewable_file.py +0 -0
  104. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
  105. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/texture_coordinates.py +0 -0
  106. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
  107. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/upload_file.py +0 -0
  108. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
  109. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.py +0 -0
  110. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/src/opengeodeweb_back/test_utils.py +0 -0
  111. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/tests/test_create_routes.py +0 -0
  112. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/tests/test_geode_functions.py +0 -0
  113. {opengeodeweb_back-6.8.1rc1 → opengeodeweb_back-6.9.0rc1}/tests/test_utils_functions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 6.8.1rc1
3
+ Version: 6.9.0rc1
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "OpenGeodeWeb-Back"
7
- version = "6.8.1-rc.1"
7
+ version = "6.9.0-rc.1"
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 6.8.1rc1
3
+ Version: 6.9.0rc1
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
@@ -83,6 +83,14 @@ src/opengeodeweb_back/routes/schemas/kill.json
83
83
  src/opengeodeweb_back/routes/schemas/kill.py
84
84
  src/opengeodeweb_back/routes/schemas/missing_files.json
85
85
  src/opengeodeweb_back/routes/schemas/missing_files.py
86
+ src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.json
87
+ src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.py
88
+ src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.json
89
+ src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.py
90
+ src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.json
91
+ src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.py
92
+ src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.json
93
+ src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.py
86
94
  src/opengeodeweb_back/routes/schemas/ping.json
87
95
  src/opengeodeweb_back/routes/schemas/ping.py
88
96
  src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json
@@ -3,7 +3,7 @@ import os
3
3
  import time
4
4
  import shutil
5
5
  import math
6
- from typing import Any
6
+ from typing import Any, Union, get_args
7
7
 
8
8
  # Third party imports
9
9
  import flask
@@ -24,6 +24,7 @@ from opengeodeweb_back import geode_functions, utils_functions
24
24
  from opengeodeweb_back.routes import schemas
25
25
  from opengeodeweb_back.geode_objects import geode_objects
26
26
  from opengeodeweb_back.geode_objects.geode_mesh import GeodeMesh
27
+ from opengeodeweb_back.geode_objects.geode_model import GeodeModel
27
28
  from opengeodeweb_back.geode_objects.geode_graph import GeodeGraph
28
29
  from opengeodeweb_back.geode_objects.geode_grid2d import GeodeGrid2D
29
30
  from opengeodeweb_back.geode_objects.geode_grid3d import GeodeGrid3D
@@ -31,6 +32,16 @@ from opengeodeweb_back.geode_objects.geode_surface_mesh2d import GeodeSurfaceMes
31
32
  from opengeodeweb_back.geode_objects.geode_surface_mesh3d import GeodeSurfaceMesh3D
32
33
  from opengeodeweb_back.geode_objects.geode_solid_mesh3d import GeodeSolidMesh3D
33
34
 
35
+ ComponentMesh = Union[
36
+ og.Corner2D,
37
+ og.Corner3D,
38
+ og.Line2D,
39
+ og.Line3D,
40
+ og.Surface2D,
41
+ og.Surface3D,
42
+ og.Block3D,
43
+ ]
44
+
34
45
  routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back")
35
46
 
36
47
  schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
@@ -387,6 +398,104 @@ def edge_attribute_names() -> flask.Response:
387
398
  )
388
399
 
389
400
 
401
+ @routes.route(
402
+ schemas_dict["model_component_vertex_attribute_names"]["route"],
403
+ methods=schemas_dict["model_component_vertex_attribute_names"]["methods"],
404
+ )
405
+ def model_component_vertex_attribute_names() -> flask.Response:
406
+ json_data = utils_functions.validate_request(
407
+ flask.request, schemas_dict["model_component_vertex_attribute_names"]
408
+ )
409
+ params = schemas.ModelComponentVertexAttributeNames.from_dict(json_data)
410
+ geode_object = geode_functions.load_geode_object(params.id)
411
+ if not isinstance(geode_object, GeodeModel):
412
+ flask.abort(400, f"{params.id} is not a GeodeModel")
413
+ component = geode_object.component(og.uuid(params.component_id))
414
+ if not isinstance(component, get_args(ComponentMesh)):
415
+ flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
416
+ mesh = component.mesh()
417
+ attribute_manager = mesh.vertex_attribute_manager()
418
+ return flask.make_response(
419
+ {"attributes": attributes_metadata(attribute_manager)},
420
+ 200,
421
+ )
422
+
423
+
424
+ @routes.route(
425
+ schemas_dict["model_component_edge_attribute_names"]["route"],
426
+ methods=schemas_dict["model_component_edge_attribute_names"]["methods"],
427
+ )
428
+ def model_component_edge_attribute_names() -> flask.Response:
429
+ json_data = utils_functions.validate_request(
430
+ flask.request, schemas_dict["model_component_edge_attribute_names"]
431
+ )
432
+ params = schemas.ModelComponentEdgeAttributeNames.from_dict(json_data)
433
+ geode_object = geode_functions.load_geode_object(params.id)
434
+ if not isinstance(geode_object, GeodeModel):
435
+ flask.abort(400, f"{params.id} is not a GeodeModel")
436
+ component = geode_object.component(og.uuid(params.component_id))
437
+ if not isinstance(component, get_args(ComponentMesh)):
438
+ flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
439
+ mesh = component.mesh()
440
+ if not hasattr(mesh, "edge_attribute_manager"):
441
+ flask.abort(400, "Component does not have edges")
442
+ attribute_manager = mesh.edge_attribute_manager()
443
+ return flask.make_response(
444
+ {"attributes": attributes_metadata(attribute_manager)},
445
+ 200,
446
+ )
447
+
448
+
449
+ @routes.route(
450
+ schemas_dict["model_component_polygon_attribute_names"]["route"],
451
+ methods=schemas_dict["model_component_polygon_attribute_names"]["methods"],
452
+ )
453
+ def model_component_polygon_attribute_names() -> flask.Response:
454
+ json_data = utils_functions.validate_request(
455
+ flask.request, schemas_dict["model_component_polygon_attribute_names"]
456
+ )
457
+ params = schemas.ModelComponentPolygonAttributeNames.from_dict(json_data)
458
+ geode_object = geode_functions.load_geode_object(params.id)
459
+ if not isinstance(geode_object, GeodeModel):
460
+ flask.abort(400, f"{params.id} is not a GeodeModel")
461
+ component = geode_object.component(og.uuid(params.component_id))
462
+ if not isinstance(component, get_args(ComponentMesh)):
463
+ flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
464
+ mesh = component.mesh()
465
+ if not hasattr(mesh, "polygon_attribute_manager"):
466
+ flask.abort(400, "Component does not have polygons")
467
+ attribute_manager = mesh.polygon_attribute_manager()
468
+ return flask.make_response(
469
+ {"attributes": attributes_metadata(attribute_manager)},
470
+ 200,
471
+ )
472
+
473
+
474
+ @routes.route(
475
+ schemas_dict["model_component_polyhedron_attribute_names"]["route"],
476
+ methods=schemas_dict["model_component_polyhedron_attribute_names"]["methods"],
477
+ )
478
+ def model_component_polyhedron_attribute_names() -> flask.Response:
479
+ json_data = utils_functions.validate_request(
480
+ flask.request, schemas_dict["model_component_polyhedron_attribute_names"]
481
+ )
482
+ params = schemas.ModelComponentPolyhedronAttributeNames.from_dict(json_data)
483
+ geode_object = geode_functions.load_geode_object(params.id)
484
+ if not isinstance(geode_object, GeodeModel):
485
+ flask.abort(400, f"{params.id} is not a GeodeModel")
486
+ component = geode_object.component(og.uuid(params.component_id))
487
+ if not isinstance(component, get_args(ComponentMesh)):
488
+ flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
489
+ mesh = component.mesh()
490
+ if not hasattr(mesh, "polyhedron_attribute_manager"):
491
+ flask.abort(400, "Component does not have polyhedra")
492
+ attribute_manager = mesh.polyhedron_attribute_manager()
493
+ return flask.make_response(
494
+ {"attributes": attributes_metadata(attribute_manager)},
495
+ 200,
496
+ )
497
+
498
+
390
499
  @routes.route(
391
500
  schemas_dict["ping"]["route"],
392
501
  methods=schemas_dict["ping"]["methods"],
@@ -5,6 +5,10 @@ from .save_viewable_file import *
5
5
  from .polyhedron_attribute_names import *
6
6
  from .polygon_attribute_names import *
7
7
  from .ping import *
8
+ from .model_component_vertex_attribute_names import *
9
+ from .model_component_polyhedron_attribute_names import *
10
+ from .model_component_polygon_attribute_names import *
11
+ from .model_component_edge_attribute_names import *
8
12
  from .missing_files import *
9
13
  from .kill import *
10
14
  from .inspect_file import *
@@ -0,0 +1,17 @@
1
+ {
2
+ "route": "/model_component_edge_attribute_names",
3
+ "methods": ["POST"],
4
+ "type": "object",
5
+ "properties": {
6
+ "id": {
7
+ "type": "string",
8
+ "minLength": 1
9
+ },
10
+ "component_id": {
11
+ "type": "string",
12
+ "minLength": 1
13
+ }
14
+ },
15
+ "required": ["id", "component_id"],
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,11 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class ModelComponentEdgeAttributeNames(DataClassJsonMixin):
7
+ def __post_init__(self) -> None:
8
+ print(self, flush=True)
9
+
10
+ component_id: str
11
+ id: str
@@ -0,0 +1,17 @@
1
+ {
2
+ "route": "/model_component_polygon_attribute_names",
3
+ "methods": ["POST"],
4
+ "type": "object",
5
+ "properties": {
6
+ "id": {
7
+ "type": "string",
8
+ "minLength": 1
9
+ },
10
+ "component_id": {
11
+ "type": "string",
12
+ "minLength": 1
13
+ }
14
+ },
15
+ "required": ["id", "component_id"],
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,11 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class ModelComponentPolygonAttributeNames(DataClassJsonMixin):
7
+ def __post_init__(self) -> None:
8
+ print(self, flush=True)
9
+
10
+ component_id: str
11
+ id: str
@@ -0,0 +1,17 @@
1
+ {
2
+ "route": "/model_component_polyhedron_attribute_names",
3
+ "methods": ["POST"],
4
+ "type": "object",
5
+ "properties": {
6
+ "id": {
7
+ "type": "string",
8
+ "minLength": 1
9
+ },
10
+ "component_id": {
11
+ "type": "string",
12
+ "minLength": 1
13
+ }
14
+ },
15
+ "required": ["id", "component_id"],
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,11 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class ModelComponentPolyhedronAttributeNames(DataClassJsonMixin):
7
+ def __post_init__(self) -> None:
8
+ print(self, flush=True)
9
+
10
+ component_id: str
11
+ id: str
@@ -0,0 +1,17 @@
1
+ {
2
+ "route": "/model_component_vertex_attribute_names",
3
+ "methods": ["POST"],
4
+ "type": "object",
5
+ "properties": {
6
+ "id": {
7
+ "type": "string",
8
+ "minLength": 1
9
+ },
10
+ "component_id": {
11
+ "type": "string",
12
+ "minLength": 1
13
+ }
14
+ },
15
+ "required": ["id", "component_id"],
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,11 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class ModelComponentVertexAttributeNames(DataClassJsonMixin):
7
+ def __post_init__(self) -> None:
8
+ print(self, flush=True)
9
+
10
+ component_id: str
11
+ id: str
@@ -25,6 +25,7 @@ from . import geode_functions
25
25
  from .geode_objects import geode_objects
26
26
  from .geode_objects.geode_model import GeodeModel
27
27
  from .geode_objects.geode_object import GeodeObject
28
+ from .geode_objects.geode_vertex_set import GeodeVertexSet
28
29
 
29
30
 
30
31
  def increment_request_counter(current_app: flask.Flask) -> None:
@@ -312,6 +313,8 @@ def save_all_viewables_and_return_info(
312
313
  "binary_light_viewable": binary_light_viewable.decode("utf-8"),
313
314
  "geode_object_type": data.geode_object,
314
315
  }
316
+ if isinstance(geode_object, GeodeVertexSet):
317
+ response["nb_vertices"] = geode_object.vertex_set.nb_vertices()
315
318
  if isinstance(geode_object, GeodeModel):
316
319
  response |= model_components(data.id, geode_object, data.viewable_file)
317
320
  return response
@@ -596,3 +596,94 @@ def test_save_viewable_workflow_from_object(client: FlaskClient) -> None:
596
596
  assert isinstance(data_id, str) and len(data_id) > 0
597
597
  assert response.get_json()["geode_object_type"] == "PointSet3D"
598
598
  assert response.get_json()["viewable_file"].endswith(".vtp")
599
+
600
+
601
+ def _load_brep_components(client: FlaskClient) -> tuple[str, dict[str, list[str]]]:
602
+ """Load cube.og_brep and return (model_id, {component_type: [geode_id, ...]})."""
603
+ response = test_save_viewable_file(client, "BRep", "cube.og_brep")
604
+ assert response.status_code == 200
605
+ model_id: str = response.get_json()["id"]
606
+ mesh_components: list[dict] = response.get_json()["mesh_components"]
607
+ by_type: dict[str, list[str]] = {}
608
+ for mc in mesh_components:
609
+ component_type = mc["type"]
610
+ by_type.setdefault(component_type, []).append(mc["geode_id"])
611
+ return model_id, by_type
612
+
613
+
614
+ def _assert_attributes_response(response) -> None:
615
+ assert response.status_code == 200
616
+ attributes = response.get_json()["attributes"]
617
+ assert isinstance(attributes, list)
618
+ for attribute in attributes:
619
+ assert "attribute_name" in attribute
620
+ assert "min_value" in attribute
621
+ assert "max_value" in attribute
622
+
623
+
624
+ def test_model_component_vertex_attribute_names(client: FlaskClient) -> None:
625
+ route = "/opengeodeweb_back/model_component_vertex_attribute_names"
626
+ model_id, by_type = _load_brep_components(client)
627
+
628
+ corner_ids = by_type.get("Corner", [])
629
+ assert len(corner_ids) > 0, "cube.og_brep should have Corner components"
630
+ component_id = corner_ids[0]
631
+
632
+ response = client.post(route, json={"id": model_id, "component_id": component_id})
633
+ _assert_attributes_response(response)
634
+
635
+ def get_full_data() -> test_utils.JsonData:
636
+ return {"id": model_id, "component_id": component_id}
637
+
638
+ test_utils.test_route_wrong_params(client, route, get_full_data)
639
+
640
+
641
+ def test_model_component_edge_attribute_names(client: FlaskClient) -> None:
642
+ route = "/opengeodeweb_back/model_component_edge_attribute_names"
643
+ model_id, by_type = _load_brep_components(client)
644
+
645
+ line_ids = by_type.get("Line", [])
646
+ assert len(line_ids) > 0, "cube.og_brep should have Line components"
647
+ component_id = line_ids[0]
648
+
649
+ response = client.post(route, json={"id": model_id, "component_id": component_id})
650
+ _assert_attributes_response(response)
651
+
652
+ def get_full_data() -> test_utils.JsonData:
653
+ return {"id": model_id, "component_id": component_id}
654
+
655
+ test_utils.test_route_wrong_params(client, route, get_full_data)
656
+
657
+
658
+ def test_model_component_polygon_attribute_names(client: FlaskClient) -> None:
659
+ route = "/opengeodeweb_back/model_component_polygon_attribute_names"
660
+ model_id, by_type = _load_brep_components(client)
661
+
662
+ surface_ids = by_type.get("Surface", [])
663
+ assert len(surface_ids) > 0, "cube.og_brep should have Surface components"
664
+ component_id = surface_ids[0]
665
+
666
+ response = client.post(route, json={"id": model_id, "component_id": component_id})
667
+ _assert_attributes_response(response)
668
+
669
+ def get_full_data() -> test_utils.JsonData:
670
+ return {"id": model_id, "component_id": component_id}
671
+
672
+ test_utils.test_route_wrong_params(client, route, get_full_data)
673
+
674
+
675
+ def test_model_component_polyhedron_attribute_names(client: FlaskClient) -> None:
676
+ route = "/opengeodeweb_back/model_component_polyhedron_attribute_names"
677
+ model_id, by_type = _load_brep_components(client)
678
+
679
+ block_ids = by_type.get("Block", [])
680
+ assert len(block_ids) > 0, "cube.og_brep should have Block components"
681
+ component_id = block_ids[0]
682
+
683
+ response = client.post(route, json={"id": model_id, "component_id": component_id})
684
+ _assert_attributes_response(response)
685
+
686
+ def get_full_data() -> test_utils.JsonData:
687
+ return {"id": model_id, "component_id": component_id}
688
+
689
+ test_utils.test_route_wrong_params(client, route, get_full_data)