OpenGeodeWeb-Back 5.4.0rc1__tar.gz → 5.4.0rc3__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 (34) hide show
  1. {opengeodeweb_back-5.4.0rc1/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-5.4.0rc3}/PKG-INFO +17 -17
  2. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/pyproject.toml +1 -1
  3. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/requirements.txt +16 -16
  4. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO +17 -17
  5. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +3 -0
  6. opengeodeweb_back-5.4.0rc3/src/OpenGeodeWeb_Back.egg-info/requires.txt +28 -0
  7. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/geode_functions.py +2 -2
  8. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/geode_objects.py +30 -25
  9. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/blueprint_routes.py +66 -0
  10. opengeodeweb_back-5.4.0rc3/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +15 -0
  11. opengeodeweb_back-5.4.0rc3/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +15 -0
  12. opengeodeweb_back-5.4.0rc3/src/opengeodeweb_back/test_utils.py +25 -0
  13. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/tests/test_geode_functions.py +9 -3
  14. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/tests/test_routes.py +87 -61
  15. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/tests/test_utils_functions.py +5 -0
  16. opengeodeweb_back-5.4.0rc1/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -28
  17. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/LICENSE +0 -0
  18. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/README.md +0 -0
  19. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/setup.cfg +0 -0
  20. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
  21. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
  22. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/__init__.py +0 -0
  23. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/app_config.py +0 -0
  24. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
  25. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
  26. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/create_point.json +0 -0
  27. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
  28. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
  29. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/inspect_file.json +0 -0
  30. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
  31. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
  32. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
  33. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
  34. {opengeodeweb_back-5.4.0rc1 → opengeodeweb_back-5.4.0rc3}/src/opengeodeweb_back/utils_functions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 5.4.0rc1
3
+ Version: 5.4.0rc3
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
@@ -13,32 +13,32 @@ Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: asgiref==3.8.1
15
15
  Requires-Dist: attrs==24.2.0
16
- Requires-Dist: blinker==1.8.2
16
+ Requires-Dist: blinker==1.9.0
17
17
  Requires-Dist: click==8.1.7
18
- Requires-Dist: flask[async]==3.0.3
18
+ Requires-Dist: flask[async]==3.1.0
19
19
  Requires-Dist: flask-cors==5.0.0
20
- Requires-Dist: geode-background==8.7.0
21
- Requires-Dist: geode-common==33.0.9
22
- Requires-Dist: geode-conversion==6.0.14
23
- Requires-Dist: geode-explicit==6.1.14
24
- Requires-Dist: geode-implicit==3.3.2
25
- Requires-Dist: geode-numerics==5.1.8
26
- Requires-Dist: geode-simplex==8.2.15
27
- Requires-Dist: geode-viewables==3.0.6
20
+ Requires-Dist: geode-background==8.7.5
21
+ Requires-Dist: geode-common==33.1.3
22
+ Requires-Dist: geode-conversion==6.0.18
23
+ Requires-Dist: geode-explicit==6.1.17
24
+ Requires-Dist: geode-implicit==3.3.5
25
+ Requires-Dist: geode-numerics==5.2.0
26
+ Requires-Dist: geode-simplex==8.2.18
27
+ Requires-Dist: geode-viewables==3.0.8
28
28
  Requires-Dist: itsdangerous==2.2.0
29
29
  Requires-Dist: jinja2==3.1.4
30
30
  Requires-Dist: jsonschema==4.23.0
31
31
  Requires-Dist: jsonschema-specifications==2024.10.1
32
32
  Requires-Dist: markupsafe==3.0.2
33
- Requires-Dist: opengeode-core==15.6.3
34
- Requires-Dist: opengeode-geosciences==8.1.1
35
- Requires-Dist: opengeode-geosciencesio==5.2.3
36
- Requires-Dist: opengeode-inspector==6.1.12
37
- Requires-Dist: opengeode-io==7.0.5
33
+ Requires-Dist: opengeode-core==15.6.7
34
+ Requires-Dist: opengeode-geosciences==8.2.0
35
+ Requires-Dist: opengeode-geosciencesio==5.3.2
36
+ Requires-Dist: opengeode-inspector==6.1.15
37
+ Requires-Dist: opengeode-io==7.0.7
38
38
  Requires-Dist: referencing==0.35.1
39
39
  Requires-Dist: rpds-py==0.21.0
40
40
  Requires-Dist: typing-extensions==4.12.2
41
- Requires-Dist: werkzeug==3.1.2
41
+ Requires-Dist: werkzeug==3.1.3
42
42
 
43
43
  <h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
44
44
  <h3 align="center">OpenSource Python framework based on OpenGeode</h3>
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "OpenGeodeWeb-Back"
8
- version = "5.4.0-rc.1"
8
+ version = "5.4.0-rc.3"
9
9
  dynamic = ["dependencies"]
10
10
  authors = [
11
11
  { name="Geode-solutions", email="team-web@geode-solutions.com" },
@@ -10,22 +10,22 @@ attrs==24.2.0
10
10
  # via
11
11
  # jsonschema
12
12
  # referencing
13
- blinker==1.8.2
13
+ blinker==1.9.0
14
14
  # via flask
15
15
  click==8.1.7
16
16
  # via flask
17
- flask[async]==3.0.3
17
+ flask[async]==3.1.0
18
18
  # via
19
19
  # -r requirements.in
20
20
  # flask-cors
21
21
  flask-cors==5.0.0
22
22
  # via -r requirements.in
23
- geode-background==8.7.0
23
+ geode-background==8.7.5
24
24
  # via
25
25
  # geode-explicit
26
26
  # geode-implicit
27
27
  # geode-simplex
28
- geode-common==33.0.9
28
+ geode-common==33.1.3
29
29
  # via
30
30
  # -r requirements.in
31
31
  # geode-background
@@ -35,26 +35,26 @@ geode-common==33.0.9
35
35
  # geode-numerics
36
36
  # geode-simplex
37
37
  # geode-viewables
38
- geode-conversion==6.0.14
38
+ geode-conversion==6.0.18
39
39
  # via
40
40
  # geode-explicit
41
41
  # geode-implicit
42
- geode-explicit==6.1.14
42
+ geode-explicit==6.1.17
43
43
  # via
44
44
  # -r requirements.in
45
45
  # geode-implicit
46
- geode-implicit==3.3.2
46
+ geode-implicit==3.3.5
47
47
  # via -r requirements.in
48
- geode-numerics==5.1.8
48
+ geode-numerics==5.2.0
49
49
  # via
50
50
  # -r requirements.in
51
51
  # geode-implicit
52
52
  # geode-simplex
53
- geode-simplex==8.2.15
53
+ geode-simplex==8.2.18
54
54
  # via
55
55
  # -r requirements.in
56
56
  # geode-implicit
57
- geode-viewables==3.0.6
57
+ geode-viewables==3.0.8
58
58
  # via -r requirements.in
59
59
  itsdangerous==2.2.0
60
60
  # via flask
@@ -68,7 +68,7 @@ markupsafe==3.0.2
68
68
  # via
69
69
  # jinja2
70
70
  # werkzeug
71
- opengeode-core==15.6.3
71
+ opengeode-core==15.6.7
72
72
  # via
73
73
  # -r requirements.in
74
74
  # geode-background
@@ -83,23 +83,23 @@ opengeode-core==15.6.3
83
83
  # opengeode-geosciencesio
84
84
  # opengeode-inspector
85
85
  # opengeode-io
86
- opengeode-geosciences==8.1.1
86
+ opengeode-geosciences==8.2.0
87
87
  # via
88
88
  # -r requirements.in
89
89
  # geode-implicit
90
90
  # geode-viewables
91
91
  # opengeode-geosciencesio
92
- opengeode-geosciencesio==5.2.3
92
+ opengeode-geosciencesio==5.3.2
93
93
  # via
94
94
  # -r requirements.in
95
95
  # geode-implicit
96
- opengeode-inspector==6.1.12
96
+ opengeode-inspector==6.1.15
97
97
  # via
98
98
  # -r requirements.in
99
99
  # geode-explicit
100
100
  # geode-implicit
101
101
  # geode-simplex
102
- opengeode-io==7.0.5
102
+ opengeode-io==7.0.7
103
103
  # via
104
104
  # -r requirements.in
105
105
  # geode-implicit
@@ -115,7 +115,7 @@ rpds-py==0.21.0
115
115
  # referencing
116
116
  typing-extensions==4.12.2
117
117
  # via asgiref
118
- werkzeug==3.1.2
118
+ werkzeug==3.1.3
119
119
  # via
120
120
  # -r requirements.in
121
121
  # flask
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 5.4.0rc1
3
+ Version: 5.4.0rc3
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
@@ -13,32 +13,32 @@ Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: asgiref==3.8.1
15
15
  Requires-Dist: attrs==24.2.0
16
- Requires-Dist: blinker==1.8.2
16
+ Requires-Dist: blinker==1.9.0
17
17
  Requires-Dist: click==8.1.7
18
- Requires-Dist: flask[async]==3.0.3
18
+ Requires-Dist: flask[async]==3.1.0
19
19
  Requires-Dist: flask-cors==5.0.0
20
- Requires-Dist: geode-background==8.7.0
21
- Requires-Dist: geode-common==33.0.9
22
- Requires-Dist: geode-conversion==6.0.14
23
- Requires-Dist: geode-explicit==6.1.14
24
- Requires-Dist: geode-implicit==3.3.2
25
- Requires-Dist: geode-numerics==5.1.8
26
- Requires-Dist: geode-simplex==8.2.15
27
- Requires-Dist: geode-viewables==3.0.6
20
+ Requires-Dist: geode-background==8.7.5
21
+ Requires-Dist: geode-common==33.1.3
22
+ Requires-Dist: geode-conversion==6.0.18
23
+ Requires-Dist: geode-explicit==6.1.17
24
+ Requires-Dist: geode-implicit==3.3.5
25
+ Requires-Dist: geode-numerics==5.2.0
26
+ Requires-Dist: geode-simplex==8.2.18
27
+ Requires-Dist: geode-viewables==3.0.8
28
28
  Requires-Dist: itsdangerous==2.2.0
29
29
  Requires-Dist: jinja2==3.1.4
30
30
  Requires-Dist: jsonschema==4.23.0
31
31
  Requires-Dist: jsonschema-specifications==2024.10.1
32
32
  Requires-Dist: markupsafe==3.0.2
33
- Requires-Dist: opengeode-core==15.6.3
34
- Requires-Dist: opengeode-geosciences==8.1.1
35
- Requires-Dist: opengeode-geosciencesio==5.2.3
36
- Requires-Dist: opengeode-inspector==6.1.12
37
- Requires-Dist: opengeode-io==7.0.5
33
+ Requires-Dist: opengeode-core==15.6.7
34
+ Requires-Dist: opengeode-geosciences==8.2.0
35
+ Requires-Dist: opengeode-geosciencesio==5.3.2
36
+ Requires-Dist: opengeode-inspector==6.1.15
37
+ Requires-Dist: opengeode-io==7.0.7
38
38
  Requires-Dist: referencing==0.35.1
39
39
  Requires-Dist: rpds-py==0.21.0
40
40
  Requires-Dist: typing-extensions==4.12.2
41
- Requires-Dist: werkzeug==3.1.2
41
+ Requires-Dist: werkzeug==3.1.3
42
42
 
43
43
  <h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
44
44
  <h3 align="center">OpenSource Python framework based on OpenGeode</h3>
@@ -11,6 +11,7 @@ src/opengeodeweb_back/__init__.py
11
11
  src/opengeodeweb_back/app_config.py
12
12
  src/opengeodeweb_back/geode_functions.py
13
13
  src/opengeodeweb_back/geode_objects.py
14
+ src/opengeodeweb_back/test_utils.py
14
15
  src/opengeodeweb_back/utils_functions.py
15
16
  src/opengeodeweb_back/routes/blueprint_routes.py
16
17
  src/opengeodeweb_back/routes/schemas/allowed_files.json
@@ -21,8 +22,10 @@ src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json
21
22
  src/opengeodeweb_back/routes/schemas/inspect_file.json
22
23
  src/opengeodeweb_back/routes/schemas/missing_files.json
23
24
  src/opengeodeweb_back/routes/schemas/ping.json
25
+ src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json
24
26
  src/opengeodeweb_back/routes/schemas/save_viewable_file.json
25
27
  src/opengeodeweb_back/routes/schemas/upload_file.json
28
+ src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json
26
29
  tests/test_geode_functions.py
27
30
  tests/test_routes.py
28
31
  tests/test_utils_functions.py
@@ -0,0 +1,28 @@
1
+ asgiref==3.8.1
2
+ attrs==24.2.0
3
+ blinker==1.9.0
4
+ click==8.1.7
5
+ flask[async]==3.1.0
6
+ flask-cors==5.0.0
7
+ geode-background==8.7.5
8
+ geode-common==33.1.3
9
+ geode-conversion==6.0.18
10
+ geode-explicit==6.1.17
11
+ geode-implicit==3.3.5
12
+ geode-numerics==5.2.0
13
+ geode-simplex==8.2.18
14
+ geode-viewables==3.0.8
15
+ itsdangerous==2.2.0
16
+ jinja2==3.1.4
17
+ jsonschema==4.23.0
18
+ jsonschema-specifications==2024.10.1
19
+ markupsafe==3.0.2
20
+ opengeode-core==15.6.7
21
+ opengeode-geosciences==8.2.0
22
+ opengeode-geosciencesio==5.3.2
23
+ opengeode-inspector==6.1.15
24
+ opengeode-io==7.0.7
25
+ referencing==0.35.1
26
+ rpds-py==0.21.0
27
+ typing-extensions==4.12.2
28
+ werkzeug==3.1.3
@@ -76,8 +76,8 @@ def create_crs(
76
76
  )
77
77
 
78
78
 
79
- def is_model(geode_object: str):
80
- return geode_object_value(geode_object)["is_model"]
79
+ def get_object_type(geode_object: str):
80
+ return geode_object_value(geode_object)["object_type"]
81
81
 
82
82
 
83
83
  def is_3D(geode_object: str):
@@ -1,3 +1,6 @@
1
+ # Standard library imports
2
+
3
+ # Third party imports
1
4
  import opengeode as og
2
5
  import opengeode_io as og_io
3
6
  import opengeode_inspector as og_inspector
@@ -5,6 +8,8 @@ import opengeode_geosciences as og_gs
5
8
  import opengeode_geosciencesio as og_gs_io
6
9
  import geode_viewables as g_v
7
10
 
11
+ # Local application imports
12
+
8
13
 
9
14
  def geode_objects_dict():
10
15
  return {
@@ -23,7 +28,7 @@ def geode_objects_dict():
23
28
  "convert": og_gs.convert_brep_coordinate_reference_system,
24
29
  "create": og.create_brep_coordinate_system,
25
30
  },
26
- "is_model": True,
31
+ "object_type": "model",
27
32
  "is_3D": True,
28
33
  "is_viewable": True,
29
34
  "save_viewable": g_v.save_viewable_brep,
@@ -45,7 +50,7 @@ def geode_objects_dict():
45
50
  "convert": og_gs.convert_section_coordinate_reference_system,
46
51
  "create": og.create_section_coordinate_system,
47
52
  },
48
- "is_model": True,
53
+ "object_type": "model",
49
54
  "is_3D": False,
50
55
  "is_viewable": True,
51
56
  "save_viewable": g_v.save_viewable_cross_section,
@@ -66,7 +71,7 @@ def geode_objects_dict():
66
71
  "convert": og_gs.convert_edged_curve_coordinate_reference_system2D,
67
72
  "create": og.create_edged_curve_coordinate_system2D,
68
73
  },
69
- "is_model": False,
74
+ "object_type": "mesh",
70
75
  "is_3D": False,
71
76
  "is_viewable": True,
72
77
  "save_viewable": g_v.save_viewable_edged_curve2D,
@@ -87,7 +92,7 @@ def geode_objects_dict():
87
92
  "convert": og_gs.convert_edged_curve_coordinate_reference_system3D,
88
93
  "create": og.create_edged_curve_coordinate_system3D,
89
94
  },
90
- "is_model": False,
95
+ "object_type": "mesh",
91
96
  "is_3D": True,
92
97
  "is_viewable": True,
93
98
  "save_viewable": g_v.save_viewable_edged_curve3D,
@@ -103,7 +108,7 @@ def geode_objects_dict():
103
108
  "is_saveable": og.is_graph_saveable,
104
109
  "save": og.save_graph,
105
110
  "builder": og.GraphBuilder.create,
106
- "is_model": False,
111
+ "object_type": "mesh",
107
112
  "is_3D": False,
108
113
  "is_viewable": True,
109
114
  },
@@ -122,7 +127,7 @@ def geode_objects_dict():
122
127
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
123
128
  "create": og.create_solid_mesh_coordinate_system3D,
124
129
  },
125
- "is_model": False,
130
+ "object_type": "mesh",
126
131
  "is_3D": True,
127
132
  "is_viewable": True,
128
133
  "save_viewable": g_v.save_viewable_hybrid_solid3D,
@@ -144,7 +149,7 @@ def geode_objects_dict():
144
149
  "convert": og_gs.convert_section_coordinate_reference_system,
145
150
  "create": og.create_section_coordinate_system,
146
151
  },
147
- "is_model": True,
152
+ "object_type": "model",
148
153
  "is_3D": False,
149
154
  "is_viewable": True,
150
155
  "save_viewable": g_v.save_viewable_implicit_cross_section,
@@ -166,7 +171,7 @@ def geode_objects_dict():
166
171
  "convert": og_gs.convert_brep_coordinate_reference_system,
167
172
  "create": og.create_brep_coordinate_system,
168
173
  },
169
- "is_model": True,
174
+ "object_type": "model",
170
175
  "is_3D": True,
171
176
  "is_viewable": True,
172
177
  "save_viewable": g_v.save_viewable_implicit_structural_model,
@@ -181,7 +186,7 @@ def geode_objects_dict():
181
186
  "load": og.load_light_regular_grid2D,
182
187
  "is_saveable": og.is_light_regular_grid_saveable2D,
183
188
  "save": og.save_light_regular_grid2D,
184
- "is_model": False,
189
+ "object_type": "mesh",
185
190
  "is_3D": False,
186
191
  "is_viewable": True,
187
192
  "save_viewable": g_v.save_viewable_light_regular_grid2D,
@@ -195,7 +200,7 @@ def geode_objects_dict():
195
200
  "load": og.load_light_regular_grid3D,
196
201
  "is_saveable": og.is_light_regular_grid_saveable3D,
197
202
  "save": og.save_light_regular_grid3D,
198
- "is_model": False,
203
+ "object_type": "mesh",
199
204
  "is_3D": True,
200
205
  "is_viewable": True,
201
206
  "save_viewable": g_v.save_viewable_light_regular_grid3D,
@@ -215,7 +220,7 @@ def geode_objects_dict():
215
220
  "convert": og_gs.convert_point_set_coordinate_reference_system2D,
216
221
  "create": og.create_point_set_coordinate_system2D,
217
222
  },
218
- "is_model": False,
223
+ "object_type": "mesh",
219
224
  "is_3D": False,
220
225
  "is_viewable": True,
221
226
  "save_viewable": g_v.save_viewable_point_set2D,
@@ -236,7 +241,7 @@ def geode_objects_dict():
236
241
  "convert": og_gs.convert_point_set_coordinate_reference_system3D,
237
242
  "create": og.create_point_set_coordinate_system3D,
238
243
  },
239
- "is_model": False,
244
+ "object_type": "mesh",
240
245
  "is_3D": True,
241
246
  "is_viewable": True,
242
247
  "save_viewable": g_v.save_viewable_point_set3D,
@@ -257,7 +262,7 @@ def geode_objects_dict():
257
262
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system2D,
258
263
  "create": og.create_surface_mesh_coordinate_system2D,
259
264
  },
260
- "is_model": False,
265
+ "object_type": "mesh",
261
266
  "is_3D": False,
262
267
  "is_viewable": True,
263
268
  "save_viewable": g_v.save_viewable_polygonal_surface2D,
@@ -278,7 +283,7 @@ def geode_objects_dict():
278
283
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system3D,
279
284
  "create": og.create_surface_mesh_coordinate_system3D,
280
285
  },
281
- "is_model": False,
286
+ "object_type": "mesh",
282
287
  "is_3D": True,
283
288
  "is_viewable": True,
284
289
  "save_viewable": g_v.save_viewable_polygonal_surface3D,
@@ -299,7 +304,7 @@ def geode_objects_dict():
299
304
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
300
305
  "create": og.create_solid_mesh_coordinate_system3D,
301
306
  },
302
- "is_model": False,
307
+ "object_type": "mesh",
303
308
  "is_3D": True,
304
309
  "is_viewable": True,
305
310
  "save_viewable": g_v.save_viewable_polyhedral_solid3D,
@@ -314,7 +319,7 @@ def geode_objects_dict():
314
319
  "load": og.load_raster_image2D,
315
320
  "is_saveable": og.is_raster_image_saveable2D,
316
321
  "save": og.save_raster_image2D,
317
- "is_model": False,
322
+ "object_type": "mesh",
318
323
  "is_3D": False,
319
324
  "is_viewable": False,
320
325
  "save_viewable": g_v.save_viewable_raster_image2D,
@@ -328,7 +333,7 @@ def geode_objects_dict():
328
333
  "load": og.load_raster_image3D,
329
334
  "is_saveable": og.is_raster_image_saveable3D,
330
335
  "save": og.save_raster_image3D,
331
- "is_model": False,
336
+ "object_type": "mesh",
332
337
  "is_3D": False,
333
338
  "is_viewable": False,
334
339
  "save_viewable": g_v.save_viewable_raster_image3D,
@@ -348,7 +353,7 @@ def geode_objects_dict():
348
353
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system2D,
349
354
  "create": og.create_surface_mesh_coordinate_system2D,
350
355
  },
351
- "is_model": False,
356
+ "object_type": "mesh",
352
357
  "is_3D": False,
353
358
  "is_viewable": True,
354
359
  "save_viewable": g_v.save_viewable_regular_grid2D,
@@ -368,7 +373,7 @@ def geode_objects_dict():
368
373
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
369
374
  "create": og.create_surface_mesh_coordinate_system3D,
370
375
  },
371
- "is_model": False,
376
+ "object_type": "mesh",
372
377
  "is_3D": True,
373
378
  "is_viewable": True,
374
379
  "save_viewable": g_v.save_viewable_regular_grid3D,
@@ -388,7 +393,7 @@ def geode_objects_dict():
388
393
  "convert": og_gs.convert_section_coordinate_reference_system,
389
394
  "create": og.create_section_coordinate_system,
390
395
  },
391
- "is_model": True,
396
+ "object_type": "model",
392
397
  "is_3D": False,
393
398
  "is_viewable": True,
394
399
  "save_viewable": g_v.save_viewable_section,
@@ -410,7 +415,7 @@ def geode_objects_dict():
410
415
  "convert": og_gs.convert_brep_coordinate_reference_system,
411
416
  "create": og.create_brep_coordinate_system,
412
417
  },
413
- "is_model": True,
418
+ "object_type": "model",
414
419
  "is_3D": True,
415
420
  "is_viewable": True,
416
421
  "save_viewable": g_v.save_viewable_structural_model,
@@ -431,7 +436,7 @@ def geode_objects_dict():
431
436
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
432
437
  "create": og.create_solid_mesh_coordinate_system3D,
433
438
  },
434
- "is_model": False,
439
+ "object_type": "mesh",
435
440
  "is_3D": True,
436
441
  "is_viewable": True,
437
442
  "save_viewable": g_v.save_viewable_tetrahedral_solid3D,
@@ -452,7 +457,7 @@ def geode_objects_dict():
452
457
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system2D,
453
458
  "create": og.create_surface_mesh_coordinate_system2D,
454
459
  },
455
- "is_model": False,
460
+ "object_type": "mesh",
456
461
  "is_3D": False,
457
462
  "is_viewable": True,
458
463
  "save_viewable": g_v.save_viewable_triangulated_surface2D,
@@ -473,7 +478,7 @@ def geode_objects_dict():
473
478
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system3D,
474
479
  "create": og.create_surface_mesh_coordinate_system3D,
475
480
  },
476
- "is_model": False,
481
+ "object_type": "mesh",
477
482
  "is_3D": True,
478
483
  "is_viewable": True,
479
484
  "save_viewable": g_v.save_viewable_triangulated_surface3D,
@@ -489,7 +494,7 @@ def geode_objects_dict():
489
494
  "is_saveable": og.is_vertex_set_saveable,
490
495
  "save": og.save_vertex_set,
491
496
  "builder": og.VertexSetBuilder.create,
492
- "is_model": False,
497
+ "object_type": "mesh",
493
498
  "is_3D": False,
494
499
  "is_viewable": False,
495
500
  },
@@ -260,6 +260,9 @@ def save_viewable_file():
260
260
  DATA_FOLDER_PATH,
261
261
  generated_id + "." + native_extension,
262
262
  )
263
+ object_type = geode_functions.get_object_type(
264
+ flask.request.json["input_geode_object"]
265
+ )
263
266
 
264
267
  native_file_name = os.path.basename(absolute_native_file_path)
265
268
  viewable_file_name = os.path.basename(saved_viewable_file_path)
@@ -269,6 +272,7 @@ def save_viewable_file():
269
272
  "native_file_name": native_file_name,
270
273
  "viewable_file_name": viewable_file_name,
271
274
  "id": generated_id,
275
+ "object_type": object_type,
272
276
  },
273
277
  200,
274
278
  )
@@ -304,6 +308,68 @@ def create_point():
304
308
  )
305
309
 
306
310
 
311
+ with open(
312
+ os.path.join(schemas, "vertex_attribute_names.json"),
313
+ "r",
314
+ ) as file:
315
+ vertex_attribute_names_json = json.load(file)
316
+
317
+
318
+ @routes.route(
319
+ vertex_attribute_names_json["route"],
320
+ methods=vertex_attribute_names_json["methods"],
321
+ )
322
+ def vertex_attribute_names():
323
+
324
+ UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
325
+ utils_functions.validate_request(flask.request, vertex_attribute_names_json)
326
+ file_absolute_path = os.path.join(
327
+ UPLOAD_FOLDER, werkzeug.utils.secure_filename(flask.request.json["filename"])
328
+ )
329
+ data = geode_functions.load(
330
+ flask.request.json["input_geode_object"], file_absolute_path
331
+ )
332
+ vertex_attribute_names = data.vertex_attribute_manager().attribute_names()
333
+
334
+ return flask.make_response(
335
+ {
336
+ "vertex_attribute_names": vertex_attribute_names,
337
+ },
338
+ 200,
339
+ )
340
+
341
+
342
+ with open(
343
+ os.path.join(schemas, "polygon_attribute_names.json"),
344
+ "r",
345
+ ) as file:
346
+ polygon_attribute_names_json = json.load(file)
347
+
348
+
349
+ @routes.route(
350
+ polygon_attribute_names_json["route"],
351
+ methods=polygon_attribute_names_json["methods"],
352
+ )
353
+ def polygon_attribute_names():
354
+
355
+ UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
356
+ utils_functions.validate_request(flask.request, vertex_attribute_names_json)
357
+ file_absolute_path = os.path.join(
358
+ UPLOAD_FOLDER, werkzeug.utils.secure_filename(flask.request.json["filename"])
359
+ )
360
+ data = geode_functions.load(
361
+ flask.request.json["input_geode_object"], file_absolute_path
362
+ )
363
+ polygon_attribute_names = data.polygon_attribute_manager().attribute_names()
364
+
365
+ return flask.make_response(
366
+ {
367
+ "polygon_attribute_names": polygon_attribute_names,
368
+ },
369
+ 200,
370
+ )
371
+
372
+
307
373
  with open(
308
374
  os.path.join(schemas, "ping.json"),
309
375
  "r",
@@ -0,0 +1,15 @@
1
+ {
2
+ "route": "/polygon_attribute_names",
3
+ "methods": ["POST"],
4
+ "type": "object",
5
+ "properties": {
6
+ "input_geode_object": {
7
+ "type": "string"
8
+ },
9
+ "filename": {
10
+ "type": "string"
11
+ }
12
+ },
13
+ "required": ["input_geode_object", "filename"],
14
+ "additionalProperties": false
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "route": "/vertex_attribute_names",
3
+ "methods": ["POST"],
4
+ "type": "object",
5
+ "properties": {
6
+ "input_geode_object": {
7
+ "type": "string"
8
+ },
9
+ "filename": {
10
+ "type": "string"
11
+ }
12
+ },
13
+ "required": ["input_geode_object", "filename"],
14
+ "additionalProperties": false
15
+ }
@@ -0,0 +1,25 @@
1
+ # Standard library imports
2
+
3
+ # Third party imports
4
+
5
+ # Local application imports
6
+
7
+
8
+ def test_route_wrong_params(client, route, get_full_data):
9
+ for key, value in get_full_data().items():
10
+ json = get_full_data()
11
+ json.pop(key)
12
+ response = client.post(route, json=json)
13
+ assert response.status_code == 400
14
+ error_description = response.json["description"]
15
+ assert error_description == f"Validation error: '{key}' is a required property"
16
+
17
+ json = get_full_data()
18
+ json["dumb_key"] = "dumb_value"
19
+ response = client.post(route, json=json)
20
+ assert response.status_code == 400
21
+ error_description = response.json["description"]
22
+ assert (
23
+ error_description
24
+ == "Validation error: Additional properties are not allowed ('dumb_key' was unexpected)"
25
+ )
@@ -1,5 +1,10 @@
1
+ # Standard library imports
1
2
  import os
2
3
  import uuid
4
+
5
+ # Third party imports
6
+
7
+ # Local application imports
3
8
  from src.opengeodeweb_back import geode_functions, geode_objects
4
9
 
5
10
 
@@ -120,10 +125,11 @@ def test_load():
120
125
  os.remove(saved_file)
121
126
 
122
127
 
123
- def test_is_model():
128
+ def test_get_object_type():
124
129
  for geode_object, value in geode_objects.geode_objects_dict().items():
125
- is_model = geode_functions.is_model(geode_object)
126
- assert type(is_model) is bool
130
+ object_type = geode_functions.get_object_type(geode_object)
131
+ assert type(object_type) is str
132
+ assert object_type in ["model", "mesh"]
127
133
 
128
134
 
129
135
  def test_is_3D():
@@ -1,17 +1,28 @@
1
- import os
1
+ # Standard library imports
2
2
  import base64
3
+ import os
4
+
5
+ # Third party imports
3
6
  from werkzeug.datastructures import FileStorage
4
7
 
8
+ # Local application imports
9
+ from src.opengeodeweb_back import test_utils
10
+
5
11
 
6
12
  def test_allowed_files(client):
7
13
  route = f"/allowed_files"
8
- response = client.post(route, json={"supported_feature": None})
14
+ get_full_data = lambda: {"supported_feature": "None"}
15
+ json = get_full_data()
16
+ response = client.post(route, json=json)
9
17
  assert response.status_code == 200
10
18
  extensions = response.json["extensions"]
11
19
  assert type(extensions) is list
12
20
  for extension in extensions:
13
21
  assert type(extension) is str
14
22
 
23
+ # Test all params
24
+ test_utils.test_route_wrong_params(client, route, get_full_data)
25
+
15
26
 
16
27
  def test_allowed_objects(client):
17
28
  route = f"/allowed_objects"
@@ -30,13 +41,8 @@ def test_allowed_objects(client):
30
41
  for allowed_object in allowed_objects:
31
42
  assert type(allowed_object) is str
32
43
 
33
- for key, value in get_full_data().items():
34
- json = get_full_data()
35
- json.pop(key)
36
- response = client.post(route, json=json)
37
- assert response.status_code == 400
38
- error_description = response.json["description"]
39
- assert error_description == f"Validation error: '{key}' is a required property"
44
+ # Test all params
45
+ test_utils.test_route_wrong_params(client, route, get_full_data)
40
46
 
41
47
 
42
48
  def test_upload_file(client):
@@ -58,11 +64,7 @@ def test_missing_files(client):
58
64
  }
59
65
 
60
66
  json = get_full_data()
61
- response = client.post(
62
- route,
63
- json=json,
64
- )
65
-
67
+ response = client.post(route, json=json)
66
68
  assert response.status_code == 200
67
69
  has_missing_files = response.json["has_missing_files"]
68
70
  mandatory_files = response.json["mandatory_files"]
@@ -71,33 +73,23 @@ def test_missing_files(client):
71
73
  assert type(mandatory_files) is list
72
74
  assert type(additional_files) is list
73
75
 
74
- for key, value in get_full_data().items():
75
- json = get_full_data()
76
- json.pop(key)
77
- response = client.post(route, json=json)
78
- assert response.status_code == 400
79
- error_description = response.json["description"]
80
- assert error_description == f"Validation error: '{key}' is a required property"
76
+ # Test all params
77
+ test_utils.test_route_wrong_params(client, route, get_full_data)
81
78
 
82
79
 
83
80
  def test_geographic_coordinate_systems(client):
84
81
  route = f"/geographic_coordinate_systems"
85
-
82
+ get_full_data = lambda: {"input_geode_object": "BRep"}
86
83
  # Normal test with geode_object 'BRep'
87
- response = client.post(route, json={"input_geode_object": "BRep"})
84
+ response = client.post(route, json=get_full_data())
88
85
  assert response.status_code == 200
89
86
  crs_list = response.json["crs_list"]
90
87
  assert type(crs_list) is list
91
88
  for crs in crs_list:
92
89
  assert type(crs) is dict
93
90
 
94
- # Test without geode_object
95
- response = client.post(route, json={})
96
- assert response.status_code == 400
97
- error_message = response.json["description"]
98
- assert (
99
- error_message == "Validation error: 'input_geode_object' is a required property"
100
- )
91
+ # Test all params
92
+ test_utils.test_route_wrong_params(client, route, get_full_data)
101
93
 
102
94
 
103
95
  def test_inspect_file(client):
@@ -117,13 +109,8 @@ def test_inspect_file(client):
117
109
  inspection_result = response.json["inspection_result"]
118
110
  assert type(inspection_result) is dict
119
111
 
120
- for key, value in get_full_data().items():
121
- json = get_full_data()
122
- json.pop(key)
123
- response = client.post(route, json=json)
124
- assert response.status_code == 400
125
- error_description = response.json["description"]
126
- assert error_description == f"Validation error: '{key}' is a required property"
112
+ # Test all params
113
+ test_utils.test_route_wrong_params(client, route, get_full_data)
127
114
 
128
115
 
129
116
  def test_geode_objects_and_output_extensions(client):
@@ -148,13 +135,8 @@ def test_geode_objects_and_output_extensions(client):
148
135
  assert type(value) is dict
149
136
  assert type(value["is_saveable"]) is bool
150
137
 
151
- # Test without input_geode_object
152
- response = client.post(route, json={})
153
- assert response.status_code == 400
154
- error_message = response.json["description"]
155
- assert (
156
- error_message == "Validation error: 'input_geode_object' is a required property"
157
- )
138
+ # Test all params
139
+ test_utils.test_route_wrong_params(client, route, get_full_data)
158
140
 
159
141
 
160
142
  def test_save_viewable_file(client):
@@ -177,21 +159,70 @@ def test_save_viewable_file(client):
177
159
  assert type(viewable_file_name) is str
178
160
  id = response.json["id"]
179
161
  assert type(id) is str
162
+ object_type = response.json["object_type"]
163
+ assert type(object_type) is str
164
+ assert object_type in ["model", "mesh"]
180
165
 
181
- for key, value in get_full_data().items():
182
- json = get_full_data()
183
- json.pop(key)
184
- response = client.post(route, json=json)
185
- assert response.status_code == 400
186
- error_description = response.json["description"]
187
- assert error_description == f"Validation error: '{key}' is a required property"
166
+ # Test all params
167
+ test_utils.test_route_wrong_params(client, route, get_full_data)
188
168
 
189
169
 
190
- def test_create_point(client):
191
- route = f"/create_point"
170
+ def test_vertex_attribute_names(client):
171
+ response = client.put(
172
+ f"/upload_file",
173
+ data={"file": FileStorage(open("./tests/vertex_attribute.vtp", "rb"))},
174
+ )
175
+ assert response.status_code == 201
176
+
177
+ route = f"/vertex_attribute_names"
178
+
179
+ def get_full_data():
180
+ return {
181
+ "input_geode_object": "PolygonalSurface3D",
182
+ "filename": "vertex_attribute.vtp",
183
+ }
184
+
185
+ # Normal test with filename 'vertex_attribute.vtp'
186
+ response = client.post(route, json=get_full_data())
187
+ assert response.status_code == 200
188
+ vertex_attribute_names = response.json["vertex_attribute_names"]
189
+ assert type(vertex_attribute_names) is list
190
+ for vertex_attribute_name in vertex_attribute_names:
191
+ assert type(vertex_attribute_name) is str
192
+
193
+ test_utils.test_route_wrong_params(client, route, get_full_data)
194
+
195
+
196
+ def test_polygon_attribute_names(client):
197
+ response = client.put(
198
+ f"/upload_file",
199
+ data={"file": FileStorage(open("./tests/polygon_attribute.vtp", "rb"))},
200
+ )
201
+ assert response.status_code == 201
202
+
203
+ route = f"/polygon_attribute_names"
192
204
 
193
205
  def get_full_data():
194
- return {"x": 1, "y": 2, "z": 3}
206
+ return {
207
+ "input_geode_object": "PolygonalSurface3D",
208
+ "filename": "polygon_attribute.vtp",
209
+ }
210
+
211
+ # Normal test with filename 'vertex_attribute.vtp'
212
+ response = client.post(route, json=get_full_data())
213
+ assert response.status_code == 200
214
+ polygon_attribute_names = response.json["polygon_attribute_names"]
215
+ assert type(polygon_attribute_names) is list
216
+ for polygon_attribute_name in polygon_attribute_names:
217
+ assert type(polygon_attribute_name) is str
218
+
219
+ # Test all params
220
+ test_utils.test_route_wrong_params(client, route, get_full_data)
221
+
222
+
223
+ def test_create_point(client):
224
+ route = f"/create_point"
225
+ get_full_data = lambda: {"x": 1, "y": 2, "z": 3}
195
226
 
196
227
  # Normal test with all keys
197
228
  response = client.post(route, json=get_full_data())
@@ -201,10 +232,5 @@ def test_create_point(client):
201
232
  id = response.json["id"]
202
233
  assert type(id) is str
203
234
 
204
- for key, value in get_full_data().items():
205
- json = get_full_data()
206
- json.pop(key)
207
- response = client.post(route, json=json)
208
- assert response.status_code == 400
209
- error_description = response.json["description"]
210
- assert error_description == f"Validation error: '{key}' is a required property"
235
+ # Test all params
236
+ test_utils.test_route_wrong_params(client, route, get_full_data)
@@ -1,4 +1,9 @@
1
+ # Standard library imports
2
+
3
+ # Third party imports
1
4
  import flask
5
+
6
+ # Local application imports
2
7
  from src.opengeodeweb_back import utils_functions
3
8
 
4
9
 
@@ -1,28 +0,0 @@
1
- asgiref==3.8.1
2
- attrs==24.2.0
3
- blinker==1.8.2
4
- click==8.1.7
5
- flask[async]==3.0.3
6
- flask-cors==5.0.0
7
- geode-background==8.7.0
8
- geode-common==33.0.9
9
- geode-conversion==6.0.14
10
- geode-explicit==6.1.14
11
- geode-implicit==3.3.2
12
- geode-numerics==5.1.8
13
- geode-simplex==8.2.15
14
- geode-viewables==3.0.6
15
- itsdangerous==2.2.0
16
- jinja2==3.1.4
17
- jsonschema==4.23.0
18
- jsonschema-specifications==2024.10.1
19
- markupsafe==3.0.2
20
- opengeode-core==15.6.3
21
- opengeode-geosciences==8.1.1
22
- opengeode-geosciencesio==5.2.3
23
- opengeode-inspector==6.1.12
24
- opengeode-io==7.0.5
25
- referencing==0.35.1
26
- rpds-py==0.21.0
27
- typing-extensions==4.12.2
28
- werkzeug==3.1.2