OpenGeodeWeb-Back 6.12.0rc2__tar.gz → 6.12.0rc4__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 (115) hide show
  1. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/PKG-INFO +8 -8
  2. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/pyproject.toml +1 -1
  3. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/requirements.txt +7 -7
  4. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/OpenGeodeWeb_Back.egg-info/PKG-INFO +8 -8
  5. opengeodeweb_back-6.12.0rc4/src/OpenGeodeWeb_Back.egg-info/requires.txt +18 -0
  6. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/blueprint_routes.py +75 -57
  7. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.json +8 -4
  8. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_edge_attribute_names.py +2 -1
  9. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.json +8 -4
  10. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_polygon_attribute_names.py +2 -1
  11. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.json +8 -4
  12. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_polyhedron_attribute_names.py +2 -1
  13. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.json +8 -4
  14. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/model_component_vertex_attribute_names.py +2 -1
  15. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/tests/test_routes.py +8 -12
  16. opengeodeweb_back-6.12.0rc2/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -18
  17. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/LICENSE +0 -0
  18. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/README.md +0 -0
  19. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/setup.cfg +0 -0
  20. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +0 -0
  21. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
  22. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/OpenGeodeWeb_Back.egg-info/entry_points.txt +0 -0
  23. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
  24. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/__init__.py +0 -0
  25. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/app.py +0 -0
  26. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/app_config.py +0 -0
  27. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_functions.py +0 -0
  28. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/__init__.py +0 -0
  29. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_brep.py +0 -0
  30. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_cross_section.py +0 -0
  31. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_edged_curve2d.py +0 -0
  32. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_edged_curve3d.py +0 -0
  33. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_graph.py +0 -0
  34. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_grid2d.py +0 -0
  35. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_grid3d.py +0 -0
  36. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_horizon_stack3d.py +0 -0
  37. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_hybrid_solid3d.py +0 -0
  38. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_implicit_cross_section.py +0 -0
  39. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_implicit_structural_model.py +0 -0
  40. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid2d.py +0 -0
  41. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_light_regular_grid3d.py +0 -0
  42. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_mesh.py +0 -0
  43. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_model.py +0 -0
  44. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_object.py +0 -0
  45. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_point_set2d.py +0 -0
  46. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_point_set3d.py +0 -0
  47. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface2d.py +0 -0
  48. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_polygonal_surface3d.py +0 -0
  49. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_polyhedral_solid3d.py +0 -0
  50. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_raster_image2d.py +0 -0
  51. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_raster_image3d.py +0 -0
  52. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_regular_grid2d.py +0 -0
  53. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_regular_grid3d.py +0 -0
  54. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_section.py +0 -0
  55. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_solid_mesh3d.py +0 -0
  56. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_structural_model.py +0 -0
  57. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_surface_mesh2d.py +0 -0
  58. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_surface_mesh3d.py +0 -0
  59. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_tetrahedral_solid3d.py +0 -0
  60. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface2d.py +0 -0
  61. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_triangulated_surface3d.py +0 -0
  62. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/geode_objects/geode_vertex_set.py +0 -0
  63. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/py.typed +0 -0
  64. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/blueprint_create.py +0 -0
  65. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/__init__.py +0 -0
  66. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/edged_curve.json +0 -0
  67. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/edged_curve.py +0 -0
  68. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/point_set.json +0 -0
  69. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/point_set.py +0 -0
  70. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.json +0 -0
  71. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/create/schemas/polygonal_surface.py +0 -0
  72. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/__init__.py +0 -0
  73. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
  74. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/allowed_files.py +0 -0
  75. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
  76. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/allowed_objects.py +0 -0
  77. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.json +0 -0
  78. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/cell_attribute_names.py +0 -0
  79. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.json +0 -0
  80. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/edge_attribute_names.py +0 -0
  81. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/export_project.json +0 -0
  82. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/export_project.py +0 -0
  83. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.json +0 -0
  84. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/geode_object_inheritance.py +0 -0
  85. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
  86. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +0 -0
  87. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
  88. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +0 -0
  89. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/import_project.json +0 -0
  90. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/import_project.py +0 -0
  91. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/kill.json +0 -0
  92. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/kill.py +0 -0
  93. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
  94. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/missing_files.py +0 -0
  95. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
  96. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/ping.py +0 -0
  97. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
  98. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.py +0 -0
  99. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
  100. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +0 -0
  101. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
  102. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/save_viewable_file.py +0 -0
  103. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
  104. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/texture_coordinates.py +0 -0
  105. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
  106. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/upload_file.py +0 -0
  107. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/validate.json +0 -0
  108. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/validate.py +0 -0
  109. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
  110. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.py +0 -0
  111. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/test_utils.py +0 -0
  112. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/src/opengeodeweb_back/utils_functions.py +0 -0
  113. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/tests/test_create_routes.py +0 -0
  114. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/tests/test_geode_functions.py +0 -0
  115. {opengeodeweb_back-6.12.0rc2 → opengeodeweb_back-6.12.0rc4}/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.12.0rc2
3
+ Version: 6.12.0rc4
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.24.2
20
- Requires-Dist: geode-viewables==3.4.0
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.4.4
24
+ Requires-Dist: opengeode-core==17.4.5
25
25
  Requires-Dist: opengeode-geosciences==9.6.1
26
26
  Requires-Dist: opengeode-geosciencesio==5.9.0
27
- Requires-Dist: opengeode-inspector==6.11.6
28
- Requires-Dist: opengeode-inspector-geosciences==1.1.0
29
- Requires-Dist: opengeode-io==7.7.0
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.2.0rc1
31
+ Requires-Dist: opengeodeweb-microservice==1.*,>=1.2.0rc2
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.12.0-rc.2"
7
+ version = "6.12.0-rc.4"
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.24.2
19
+ geode-common==33.25.4
20
20
  # via
21
21
  # -r requirements.in
22
22
  # geode-viewables
23
- geode-viewables==3.4.0
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.4.4
34
+ opengeode-core==17.4.5
35
35
  # via
36
36
  # -r requirements.in
37
37
  # geode-common
@@ -49,13 +49,13 @@ opengeode-geosciences==9.6.1
49
49
  # opengeode-inspector-geosciences
50
50
  opengeode-geosciencesio==5.9.0
51
51
  # via -r requirements.in
52
- opengeode-inspector==6.11.6
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.0
56
+ opengeode-inspector-geosciences==1.1.1
57
57
  # via -r requirements.in
58
- opengeode-io==7.7.0
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.2.0rc1
69
+ opengeodeweb-microservice==1.*,>=1.2.0rc2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 6.12.0rc2
3
+ Version: 6.12.0rc4
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.24.2
20
- Requires-Dist: geode-viewables==3.4.0
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.4.4
24
+ Requires-Dist: opengeode-core==17.4.5
25
25
  Requires-Dist: opengeode-geosciences==9.6.1
26
26
  Requires-Dist: opengeode-geosciencesio==5.9.0
27
- Requires-Dist: opengeode-inspector==6.11.6
28
- Requires-Dist: opengeode-inspector-geosciences==1.1.0
29
- Requires-Dist: opengeode-io==7.7.0
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.2.0rc1
31
+ Requires-Dist: opengeodeweb-microservice==1.*,>=1.2.0rc2
32
32
  Dynamic: license-file
33
33
 
34
34
  <h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
@@ -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.0rc2
@@ -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 = Union[
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
 
@@ -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
- nb_elements = manager.nb_elements()
258
- for name in manager.attribute_names():
259
- attribute = manager.find_generic_attribute(name)
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 item in range(nb_items):
267
- values = [
268
- attribute.generic_item_value(idx, item)
269
- for idx in range(nb_elements)
270
- ]
271
- valid = [
272
- value
273
- for value in values
274
- if value is not None and not math.isnan(value)
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": min_value,
285
- "max_value": 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
- component = geode_object.component(og.uuid(params.component_id))
403
- if not isinstance(component, get_args(ComponentMesh)):
404
- flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
405
- mesh = component.mesh()
406
- attribute_manager = mesh.vertex_attribute_manager()
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(attribute_manager)},
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
- component = geode_object.component(og.uuid(params.component_id))
426
- if not isinstance(component, get_args(ComponentMesh)):
427
- flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
428
- mesh = component.mesh()
429
- if not hasattr(mesh, "edge_attribute_manager"):
430
- flask.abort(400, "Component does not have edges")
431
- attribute_manager = mesh.edge_attribute_manager()
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(attribute_manager)},
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
- component = geode_object.component(og.uuid(params.component_id))
451
- if not isinstance(component, get_args(ComponentMesh)):
452
- flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
453
- mesh = component.mesh()
454
- if not hasattr(mesh, "polygon_attribute_manager"):
455
- flask.abort(400, "Component does not have polygons")
456
- attribute_manager = mesh.polygon_attribute_manager()
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(attribute_manager)},
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
- component = geode_object.component(og.uuid(params.component_id))
476
- if not isinstance(component, get_args(ComponentMesh)):
477
- flask.abort(400, f"{params.component_id} is not a valid ComponentMesh")
478
- mesh = component.mesh()
479
- if not hasattr(mesh, "polyhedron_attribute_manager"):
480
- flask.abort(400, "Component does not have polyhedra")
481
- attribute_manager = mesh.polyhedron_attribute_manager()
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(attribute_manager)},
501
+ {"attributes": attributes_metadata(managers)},
484
502
  200,
485
503
  )
486
504
 
@@ -7,11 +7,15 @@
7
7
  "type": "string",
8
8
  "minLength": 1
9
9
  },
10
- "component_id": {
11
- "type": "string",
12
- "minLength": 1
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", "component_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
- component_id: str
11
+ component_ids: List[str]
11
12
  id: str
@@ -7,11 +7,15 @@
7
7
  "type": "string",
8
8
  "minLength": 1
9
9
  },
10
- "component_id": {
11
- "type": "string",
12
- "minLength": 1
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", "component_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
- component_id: str
11
+ component_ids: List[str]
11
12
  id: str
@@ -7,11 +7,15 @@
7
7
  "type": "string",
8
8
  "minLength": 1
9
9
  },
10
- "component_id": {
11
- "type": "string",
12
- "minLength": 1
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", "component_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 ModelComponentPolyhedronAttributeNames(DataClassJsonMixin):
7
8
  def __post_init__(self) -> None:
8
9
  print(self, flush=True)
9
10
 
10
- component_id: str
11
+ component_ids: List[str]
11
12
  id: str
@@ -7,11 +7,15 @@
7
7
  "type": "string",
8
8
  "minLength": 1
9
9
  },
10
- "component_id": {
11
- "type": "string",
12
- "minLength": 1
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", "component_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 ModelComponentVertexAttributeNames(DataClassJsonMixin):
7
8
  def __post_init__(self) -> None:
8
9
  print(self, flush=True)
9
10
 
10
- component_id: str
11
+ component_ids: List[str]
11
12
  id: str
@@ -676,13 +676,12 @@ def test_model_component_vertex_attribute_names(client: FlaskClient) -> None:
676
676
 
677
677
  corner_ids = by_type.get("Corner", [])
678
678
  assert len(corner_ids) > 0, "cube.og_brep should have Corner components"
679
- component_id = corner_ids[0]
680
679
 
681
- response = client.post(route, json={"id": model_id, "component_id": component_id})
680
+ response = client.post(route, json={"id": model_id, "component_ids": corner_ids})
682
681
  _assert_attributes_response(response)
683
682
 
684
683
  def get_full_data() -> test_utils.JsonData:
685
- return {"id": model_id, "component_id": component_id}
684
+ return {"id": model_id, "component_ids": corner_ids}
686
685
 
687
686
  test_utils.test_route_wrong_params(client, route, get_full_data)
688
687
 
@@ -693,13 +692,12 @@ def test_model_component_edge_attribute_names(client: FlaskClient) -> None:
693
692
 
694
693
  line_ids = by_type.get("Line", [])
695
694
  assert len(line_ids) > 0, "cube.og_brep should have Line components"
696
- component_id = line_ids[0]
697
695
 
698
- response = client.post(route, json={"id": model_id, "component_id": component_id})
696
+ response = client.post(route, json={"id": model_id, "component_ids": line_ids})
699
697
  _assert_attributes_response(response)
700
698
 
701
699
  def get_full_data() -> test_utils.JsonData:
702
- return {"id": model_id, "component_id": component_id}
700
+ return {"id": model_id, "component_ids": line_ids}
703
701
 
704
702
  test_utils.test_route_wrong_params(client, route, get_full_data)
705
703
 
@@ -710,13 +708,12 @@ def test_model_component_polygon_attribute_names(client: FlaskClient) -> None:
710
708
 
711
709
  surface_ids = by_type.get("Surface", [])
712
710
  assert len(surface_ids) > 0, "cube.og_brep should have Surface components"
713
- component_id = surface_ids[0]
714
711
 
715
- response = client.post(route, json={"id": model_id, "component_id": component_id})
712
+ response = client.post(route, json={"id": model_id, "component_ids": surface_ids})
716
713
  _assert_attributes_response(response)
717
714
 
718
715
  def get_full_data() -> test_utils.JsonData:
719
- return {"id": model_id, "component_id": component_id}
716
+ return {"id": model_id, "component_ids": surface_ids}
720
717
 
721
718
  test_utils.test_route_wrong_params(client, route, get_full_data)
722
719
 
@@ -727,12 +724,11 @@ def test_model_component_polyhedron_attribute_names(client: FlaskClient) -> None
727
724
 
728
725
  block_ids = by_type.get("Block", [])
729
726
  assert len(block_ids) > 0, "cube.og_brep should have Block components"
730
- component_id = block_ids[0]
731
727
 
732
- response = client.post(route, json={"id": model_id, "component_id": component_id})
728
+ response = client.post(route, json={"id": model_id, "component_ids": block_ids})
733
729
  _assert_attributes_response(response)
734
730
 
735
731
  def get_full_data() -> test_utils.JsonData:
736
- return {"id": model_id, "component_id": component_id}
732
+ return {"id": model_id, "component_ids": block_ids}
737
733
 
738
734
  test_utils.test_route_wrong_params(client, route, get_full_data)
@@ -1,18 +0,0 @@
1
- asgiref>=3
2
- blinker>=1
3
- click>=8
4
- flask[async]>=3
5
- flask-cors==6.0.2
6
- geode-common==33.24.2
7
- geode-viewables==3.4.0
8
- itsdangerous>=2
9
- jinja2>=3
10
- markupsafe>=3
11
- opengeode-core==17.4.4
12
- opengeode-geosciences==9.6.1
13
- opengeode-geosciencesio==5.9.0
14
- opengeode-inspector==6.11.6
15
- opengeode-inspector-geosciences==1.1.0
16
- opengeode-io==7.7.0
17
- werkzeug==3.1.8
18
- opengeodeweb-microservice==1.*,>=1.2.0rc1