OpenGeodeWeb-Back 5.3.2rc1__tar.gz → 5.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {opengeodeweb_back-5.3.2rc1/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-5.4.0}/PKG-INFO +18 -18
  2. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/pyproject.toml +1 -1
  3. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/requirements.txt +17 -17
  4. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO +18 -18
  5. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +4 -0
  6. opengeodeweb_back-5.4.0/src/OpenGeodeWeb_Back.egg-info/requires.txt +28 -0
  7. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/geode_functions.py +6 -2
  8. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/geode_objects.py +55 -25
  9. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/blueprint_routes.py +101 -2
  10. opengeodeweb_back-5.4.0/src/opengeodeweb_back/routes/schemas/create_point.json +24 -0
  11. opengeodeweb_back-5.4.0/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +15 -0
  12. opengeodeweb_back-5.4.0/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +15 -0
  13. opengeodeweb_back-5.4.0/src/opengeodeweb_back/test_utils.py +25 -0
  14. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/tests/test_geode_functions.py +9 -3
  15. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/tests/test_routes.py +100 -51
  16. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/tests/test_utils_functions.py +5 -0
  17. opengeodeweb_back-5.3.2rc1/src/OpenGeodeWeb_Back.egg-info/requires.txt +0 -28
  18. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/LICENSE +0 -0
  19. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/README.md +0 -0
  20. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/setup.cfg +0 -0
  21. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
  22. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
  23. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/__init__.py +0 -0
  24. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/app_config.py +0 -0
  25. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
  26. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
  27. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
  28. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
  29. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/inspect_file.json +0 -0
  30. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
  31. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
  32. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
  33. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
  34. {opengeodeweb_back-5.3.2rc1 → opengeodeweb_back-5.4.0}/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.3.2rc1
3
+ Version: 5.4.0
4
4
  Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
@@ -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.6.8
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.14
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.1
34
- Requires-Dist: opengeode-geosciences==8.1.1
35
- Requires-Dist: opengeode-geosciencesio==5.2.3
36
- Requires-Dist: opengeode-inspector==6.1.10
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
- Requires-Dist: rpds-py==0.20.1
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.3.2-rc.1"
8
+ version = "5.4.0"
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.6.8
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.14
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.1
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.1
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.10
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
@@ -109,13 +109,13 @@ referencing==0.35.1
109
109
  # via
110
110
  # jsonschema
111
111
  # jsonschema-specifications
112
- rpds-py==0.20.1
112
+ rpds-py==0.21.0
113
113
  # via
114
114
  # jsonschema
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.3.2rc1
3
+ Version: 5.4.0
4
4
  Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
5
5
  Author-email: Geode-solutions <team-web@geode-solutions.com>
6
6
  Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
@@ -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.6.8
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.14
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.1
34
- Requires-Dist: opengeode-geosciences==8.1.1
35
- Requires-Dist: opengeode-geosciencesio==5.2.3
36
- Requires-Dist: opengeode-inspector==6.1.10
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
- Requires-Dist: rpds-py==0.20.1
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,17 +11,21 @@ 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
17
18
  src/opengeodeweb_back/routes/schemas/allowed_objects.json
19
+ src/opengeodeweb_back/routes/schemas/create_point.json
18
20
  src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json
19
21
  src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json
20
22
  src/opengeodeweb_back/routes/schemas/inspect_file.json
21
23
  src/opengeodeweb_back/routes/schemas/missing_files.json
22
24
  src/opengeodeweb_back/routes/schemas/ping.json
25
+ src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json
23
26
  src/opengeodeweb_back/routes/schemas/save_viewable_file.json
24
27
  src/opengeodeweb_back/routes/schemas/upload_file.json
28
+ src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json
25
29
  tests/test_geode_functions.py
26
30
  tests/test_routes.py
27
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
@@ -15,6 +15,10 @@ def geode_object_value(geode_object: str):
15
15
  return geode_objects_dict()[geode_object]
16
16
 
17
17
 
18
+ def geode_object_class(geode_object: str):
19
+ return geode_object_value(geode_object)["class"]
20
+
21
+
18
22
  def input_factory(geode_object: str):
19
23
  return geode_object_value(geode_object)["input_factory"]
20
24
 
@@ -72,8 +76,8 @@ def create_crs(
72
76
  )
73
77
 
74
78
 
75
- def is_model(geode_object: str):
76
- 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"]
77
81
 
78
82
 
79
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,10 +8,13 @@ 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 {
11
16
  "BRep": {
17
+ "class": og.BRep,
12
18
  "input_factory": og.BRepInputFactory,
13
19
  "output_factory": og.BRepOutputFactory,
14
20
  "missing_files": og.check_brep_missing_files,
@@ -22,7 +28,7 @@ def geode_objects_dict():
22
28
  "convert": og_gs.convert_brep_coordinate_reference_system,
23
29
  "create": og.create_brep_coordinate_system,
24
30
  },
25
- "is_model": True,
31
+ "object_type": "model",
26
32
  "is_3D": True,
27
33
  "is_viewable": True,
28
34
  "save_viewable": g_v.save_viewable_brep,
@@ -30,6 +36,7 @@ def geode_objects_dict():
30
36
  },
31
37
  "CrossSection": {
32
38
  "parent": "Section",
39
+ "class": og_gs.CrossSection,
33
40
  "input_factory": og_gs.CrossSectionInputFactory,
34
41
  "output_factory": og_gs.CrossSectionOutputFactory,
35
42
  "missing_files": og_gs.check_cross_section_missing_files,
@@ -43,13 +50,14 @@ def geode_objects_dict():
43
50
  "convert": og_gs.convert_section_coordinate_reference_system,
44
51
  "create": og.create_section_coordinate_system,
45
52
  },
46
- "is_model": True,
53
+ "object_type": "model",
47
54
  "is_3D": False,
48
55
  "is_viewable": True,
49
56
  "save_viewable": g_v.save_viewable_cross_section,
50
57
  "inspector": og_inspector.inspect_section,
51
58
  },
52
59
  "EdgedCurve2D": {
60
+ "class": og.EdgedCurve2D,
53
61
  "input_factory": og.EdgedCurveInputFactory2D,
54
62
  "output_factory": og.EdgedCurveOutputFactory2D,
55
63
  "missing_files": og.check_edged_curve_missing_files2D,
@@ -63,13 +71,14 @@ def geode_objects_dict():
63
71
  "convert": og_gs.convert_edged_curve_coordinate_reference_system2D,
64
72
  "create": og.create_edged_curve_coordinate_system2D,
65
73
  },
66
- "is_model": False,
74
+ "object_type": "mesh",
67
75
  "is_3D": False,
68
76
  "is_viewable": True,
69
77
  "save_viewable": g_v.save_viewable_edged_curve2D,
70
78
  "inspector": og_inspector.inspect_edged_curve2D,
71
79
  },
72
80
  "EdgedCurve3D": {
81
+ "class": og.EdgedCurve3D,
73
82
  "input_factory": og.EdgedCurveInputFactory3D,
74
83
  "output_factory": og.EdgedCurveOutputFactory3D,
75
84
  "missing_files": og.check_edged_curve_missing_files3D,
@@ -83,13 +92,14 @@ def geode_objects_dict():
83
92
  "convert": og_gs.convert_edged_curve_coordinate_reference_system3D,
84
93
  "create": og.create_edged_curve_coordinate_system3D,
85
94
  },
86
- "is_model": False,
95
+ "object_type": "mesh",
87
96
  "is_3D": True,
88
97
  "is_viewable": True,
89
98
  "save_viewable": g_v.save_viewable_edged_curve3D,
90
99
  "inspector": og_inspector.inspect_edged_curve3D,
91
100
  },
92
101
  "Graph": {
102
+ "class": og.Graph,
93
103
  "input_factory": og.GraphInputFactory,
94
104
  "output_factory": og.GraphOutputFactory,
95
105
  "missing_files": og.check_graph_missing_files,
@@ -98,11 +108,12 @@ def geode_objects_dict():
98
108
  "is_saveable": og.is_graph_saveable,
99
109
  "save": og.save_graph,
100
110
  "builder": og.GraphBuilder.create,
101
- "is_model": False,
111
+ "object_type": "mesh",
102
112
  "is_3D": False,
103
113
  "is_viewable": True,
104
114
  },
105
115
  "HybridSolid3D": {
116
+ "class": og.HybridSolid3D,
106
117
  "input_factory": og.HybridSolidInputFactory3D,
107
118
  "output_factory": og.HybridSolidOutputFactory3D,
108
119
  "missing_files": og.check_hybrid_solid_missing_files3D,
@@ -116,7 +127,7 @@ def geode_objects_dict():
116
127
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
117
128
  "create": og.create_solid_mesh_coordinate_system3D,
118
129
  },
119
- "is_model": False,
130
+ "object_type": "mesh",
120
131
  "is_3D": True,
121
132
  "is_viewable": True,
122
133
  "save_viewable": g_v.save_viewable_hybrid_solid3D,
@@ -124,6 +135,7 @@ def geode_objects_dict():
124
135
  },
125
136
  "ImplicitCrossSection": {
126
137
  "parent": "CrossSection",
138
+ "class": og_gs.ImplicitCrossSection,
127
139
  "input_factory": og_gs.ImplicitCrossSectionInputFactory,
128
140
  "output_factory": og_gs.ImplicitCrossSectionOutputFactory,
129
141
  "missing_files": og_gs.check_implicit_cross_section_missing_files,
@@ -137,7 +149,7 @@ def geode_objects_dict():
137
149
  "convert": og_gs.convert_section_coordinate_reference_system,
138
150
  "create": og.create_section_coordinate_system,
139
151
  },
140
- "is_model": True,
152
+ "object_type": "model",
141
153
  "is_3D": False,
142
154
  "is_viewable": True,
143
155
  "save_viewable": g_v.save_viewable_implicit_cross_section,
@@ -145,6 +157,7 @@ def geode_objects_dict():
145
157
  },
146
158
  "ImplicitStructuralModel": {
147
159
  "parent": "StructuralModel",
160
+ "class": og_gs.ImplicitStructuralModel,
148
161
  "input_factory": og_gs.ImplicitStructuralModelInputFactory,
149
162
  "output_factory": og_gs.ImplicitStructuralModelOutputFactory,
150
163
  "missing_files": og_gs.check_implicit_structural_model_missing_files,
@@ -158,13 +171,14 @@ def geode_objects_dict():
158
171
  "convert": og_gs.convert_brep_coordinate_reference_system,
159
172
  "create": og.create_brep_coordinate_system,
160
173
  },
161
- "is_model": True,
174
+ "object_type": "model",
162
175
  "is_3D": True,
163
176
  "is_viewable": True,
164
177
  "save_viewable": g_v.save_viewable_implicit_structural_model,
165
178
  "inspector": og_inspector.inspect_brep,
166
179
  },
167
180
  "LightRegularGrid2D": {
181
+ "class": og.LightRegularGrid2D,
168
182
  "input_factory": og.LightRegularGridInputFactory2D,
169
183
  "output_factory": og.LightRegularGridOutputFactory2D,
170
184
  "missing_files": og.check_light_regular_grid_missing_files2D,
@@ -172,12 +186,13 @@ def geode_objects_dict():
172
186
  "load": og.load_light_regular_grid2D,
173
187
  "is_saveable": og.is_light_regular_grid_saveable2D,
174
188
  "save": og.save_light_regular_grid2D,
175
- "is_model": False,
189
+ "object_type": "mesh",
176
190
  "is_3D": False,
177
191
  "is_viewable": True,
178
192
  "save_viewable": g_v.save_viewable_light_regular_grid2D,
179
193
  },
180
194
  "LightRegularGrid3D": {
195
+ "class": og.LightRegularGrid3D,
181
196
  "input_factory": og.LightRegularGridInputFactory3D,
182
197
  "output_factory": og.LightRegularGridOutputFactory3D,
183
198
  "missing_files": og.check_light_regular_grid_missing_files3D,
@@ -185,12 +200,13 @@ def geode_objects_dict():
185
200
  "load": og.load_light_regular_grid3D,
186
201
  "is_saveable": og.is_light_regular_grid_saveable3D,
187
202
  "save": og.save_light_regular_grid3D,
188
- "is_model": False,
203
+ "object_type": "mesh",
189
204
  "is_3D": True,
190
205
  "is_viewable": True,
191
206
  "save_viewable": g_v.save_viewable_light_regular_grid3D,
192
207
  },
193
208
  "PointSet2D": {
209
+ "class": og.PointSet2D,
194
210
  "input_factory": og.PointSetInputFactory2D,
195
211
  "output_factory": og.PointSetOutputFactory2D,
196
212
  "missing_files": og.check_point_set_missing_files2D,
@@ -204,13 +220,14 @@ def geode_objects_dict():
204
220
  "convert": og_gs.convert_point_set_coordinate_reference_system2D,
205
221
  "create": og.create_point_set_coordinate_system2D,
206
222
  },
207
- "is_model": False,
223
+ "object_type": "mesh",
208
224
  "is_3D": False,
209
225
  "is_viewable": True,
210
226
  "save_viewable": g_v.save_viewable_point_set2D,
211
227
  "inspector": og_inspector.inspect_point_set2D,
212
228
  },
213
229
  "PointSet3D": {
230
+ "class": og.PointSet3D,
214
231
  "input_factory": og.PointSetInputFactory3D,
215
232
  "output_factory": og.PointSetOutputFactory3D,
216
233
  "missing_files": og.check_point_set_missing_files3D,
@@ -224,13 +241,14 @@ def geode_objects_dict():
224
241
  "convert": og_gs.convert_point_set_coordinate_reference_system3D,
225
242
  "create": og.create_point_set_coordinate_system3D,
226
243
  },
227
- "is_model": False,
244
+ "object_type": "mesh",
228
245
  "is_3D": True,
229
246
  "is_viewable": True,
230
247
  "save_viewable": g_v.save_viewable_point_set3D,
231
248
  "inspector": og_inspector.inspect_point_set3D,
232
249
  },
233
250
  "PolygonalSurface2D": {
251
+ "class": og.PolygonalSurface2D,
234
252
  "input_factory": og.PolygonalSurfaceInputFactory2D,
235
253
  "output_factory": og.PolygonalSurfaceOutputFactory2D,
236
254
  "missing_files": og.check_polygonal_surface_missing_files2D,
@@ -244,13 +262,14 @@ def geode_objects_dict():
244
262
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system2D,
245
263
  "create": og.create_surface_mesh_coordinate_system2D,
246
264
  },
247
- "is_model": False,
265
+ "object_type": "mesh",
248
266
  "is_3D": False,
249
267
  "is_viewable": True,
250
268
  "save_viewable": g_v.save_viewable_polygonal_surface2D,
251
269
  "inspector": og_inspector.inspect_surface2D,
252
270
  },
253
271
  "PolygonalSurface3D": {
272
+ "class": og.PolygonalSurface3D,
254
273
  "input_factory": og.PolygonalSurfaceInputFactory3D,
255
274
  "output_factory": og.PolygonalSurfaceOutputFactory3D,
256
275
  "missing_files": og.check_polygonal_surface_missing_files3D,
@@ -264,13 +283,14 @@ def geode_objects_dict():
264
283
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system3D,
265
284
  "create": og.create_surface_mesh_coordinate_system3D,
266
285
  },
267
- "is_model": False,
286
+ "object_type": "mesh",
268
287
  "is_3D": True,
269
288
  "is_viewable": True,
270
289
  "save_viewable": g_v.save_viewable_polygonal_surface3D,
271
290
  "inspector": og_inspector.inspect_surface3D,
272
291
  },
273
292
  "PolyhedralSolid3D": {
293
+ "class": og.PolyhedralSolid3D,
274
294
  "input_factory": og.PolyhedralSolidInputFactory3D,
275
295
  "output_factory": og.PolyhedralSolidOutputFactory3D,
276
296
  "missing_files": og.check_polyhedral_solid_missing_files3D,
@@ -284,13 +304,14 @@ def geode_objects_dict():
284
304
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
285
305
  "create": og.create_solid_mesh_coordinate_system3D,
286
306
  },
287
- "is_model": False,
307
+ "object_type": "mesh",
288
308
  "is_3D": True,
289
309
  "is_viewable": True,
290
310
  "save_viewable": g_v.save_viewable_polyhedral_solid3D,
291
311
  "inspector": og_inspector.inspect_solid3D,
292
312
  },
293
313
  "RasterImage2D": {
314
+ "class": og.RasterImage2D,
294
315
  "input_factory": og.RasterImageInputFactory2D,
295
316
  "output_factory": og.RasterImageOutputFactory2D,
296
317
  "missing_files": og.check_raster_image_missing_files2D,
@@ -298,12 +319,13 @@ def geode_objects_dict():
298
319
  "load": og.load_raster_image2D,
299
320
  "is_saveable": og.is_raster_image_saveable2D,
300
321
  "save": og.save_raster_image2D,
301
- "is_model": False,
322
+ "object_type": "mesh",
302
323
  "is_3D": False,
303
324
  "is_viewable": False,
304
325
  "save_viewable": g_v.save_viewable_raster_image2D,
305
326
  },
306
327
  "RasterImage3D": {
328
+ "class": og.RasterImage3D,
307
329
  "input_factory": og.RasterImageInputFactory3D,
308
330
  "output_factory": og.RasterImageOutputFactory3D,
309
331
  "missing_files": og.check_raster_image_missing_files3D,
@@ -311,12 +333,13 @@ def geode_objects_dict():
311
333
  "load": og.load_raster_image3D,
312
334
  "is_saveable": og.is_raster_image_saveable3D,
313
335
  "save": og.save_raster_image3D,
314
- "is_model": False,
336
+ "object_type": "mesh",
315
337
  "is_3D": False,
316
338
  "is_viewable": False,
317
339
  "save_viewable": g_v.save_viewable_raster_image3D,
318
340
  },
319
341
  "RegularGrid2D": {
342
+ "class": og.RegularGrid2D,
320
343
  "input_factory": og.RegularGridInputFactory2D,
321
344
  "output_factory": og.RegularGridOutputFactory2D,
322
345
  "missing_files": og.check_regular_grid_missing_files2D,
@@ -330,12 +353,13 @@ def geode_objects_dict():
330
353
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system2D,
331
354
  "create": og.create_surface_mesh_coordinate_system2D,
332
355
  },
333
- "is_model": False,
356
+ "object_type": "mesh",
334
357
  "is_3D": False,
335
358
  "is_viewable": True,
336
359
  "save_viewable": g_v.save_viewable_regular_grid2D,
337
360
  },
338
361
  "RegularGrid3D": {
362
+ "class": og.RegularGrid3D,
339
363
  "input_factory": og.RegularGridInputFactory3D,
340
364
  "output_factory": og.RegularGridOutputFactory3D,
341
365
  "missing_files": og.check_regular_grid_missing_files3D,
@@ -349,12 +373,13 @@ def geode_objects_dict():
349
373
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
350
374
  "create": og.create_surface_mesh_coordinate_system3D,
351
375
  },
352
- "is_model": False,
376
+ "object_type": "mesh",
353
377
  "is_3D": True,
354
378
  "is_viewable": True,
355
379
  "save_viewable": g_v.save_viewable_regular_grid3D,
356
380
  },
357
381
  "Section": {
382
+ "class": og.Section,
358
383
  "input_factory": og.SectionInputFactory,
359
384
  "output_factory": og.SectionOutputFactory,
360
385
  "missing_files": og.check_section_missing_files,
@@ -368,7 +393,7 @@ def geode_objects_dict():
368
393
  "convert": og_gs.convert_section_coordinate_reference_system,
369
394
  "create": og.create_section_coordinate_system,
370
395
  },
371
- "is_model": True,
396
+ "object_type": "model",
372
397
  "is_3D": False,
373
398
  "is_viewable": True,
374
399
  "save_viewable": g_v.save_viewable_section,
@@ -376,6 +401,7 @@ def geode_objects_dict():
376
401
  },
377
402
  "StructuralModel": {
378
403
  "parent": "BRep",
404
+ "class": og_gs.StructuralModel,
379
405
  "input_factory": og_gs.StructuralModelInputFactory,
380
406
  "output_factory": og_gs.StructuralModelOutputFactory,
381
407
  "missing_files": og_gs.check_structural_model_missing_files,
@@ -389,13 +415,14 @@ def geode_objects_dict():
389
415
  "convert": og_gs.convert_brep_coordinate_reference_system,
390
416
  "create": og.create_brep_coordinate_system,
391
417
  },
392
- "is_model": True,
418
+ "object_type": "model",
393
419
  "is_3D": True,
394
420
  "is_viewable": True,
395
421
  "save_viewable": g_v.save_viewable_structural_model,
396
422
  "inspector": og_inspector.inspect_brep,
397
423
  },
398
424
  "TetrahedralSolid3D": {
425
+ "class": og.TetrahedralSolid3D,
399
426
  "input_factory": og.TetrahedralSolidInputFactory3D,
400
427
  "output_factory": og.TetrahedralSolidOutputFactory3D,
401
428
  "missing_files": og.check_tetrahedral_solid_missing_files3D,
@@ -409,13 +436,14 @@ def geode_objects_dict():
409
436
  "convert": og_gs.convert_solid_mesh_coordinate_reference_system3D,
410
437
  "create": og.create_solid_mesh_coordinate_system3D,
411
438
  },
412
- "is_model": False,
439
+ "object_type": "mesh",
413
440
  "is_3D": True,
414
441
  "is_viewable": True,
415
442
  "save_viewable": g_v.save_viewable_tetrahedral_solid3D,
416
443
  "inspector": og_inspector.inspect_solid3D,
417
444
  },
418
445
  "TriangulatedSurface2D": {
446
+ "class": og.TriangulatedSurface2D,
419
447
  "input_factory": og.TriangulatedSurfaceInputFactory2D,
420
448
  "output_factory": og.TriangulatedSurfaceOutputFactory2D,
421
449
  "missing_files": og.check_triangulated_surface_missing_files2D,
@@ -429,13 +457,14 @@ def geode_objects_dict():
429
457
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system2D,
430
458
  "create": og.create_surface_mesh_coordinate_system2D,
431
459
  },
432
- "is_model": False,
460
+ "object_type": "mesh",
433
461
  "is_3D": False,
434
462
  "is_viewable": True,
435
463
  "save_viewable": g_v.save_viewable_triangulated_surface2D,
436
464
  "inspector": og_inspector.inspect_surface2D,
437
465
  },
438
466
  "TriangulatedSurface3D": {
467
+ "class": og.TriangulatedSurface3D,
439
468
  "input_factory": og.TriangulatedSurfaceInputFactory3D,
440
469
  "output_factory": og.TriangulatedSurfaceOutputFactory3D,
441
470
  "missing_files": og.check_triangulated_surface_missing_files3D,
@@ -449,13 +478,14 @@ def geode_objects_dict():
449
478
  "convert": og_gs.convert_surface_mesh_coordinate_reference_system3D,
450
479
  "create": og.create_surface_mesh_coordinate_system3D,
451
480
  },
452
- "is_model": False,
481
+ "object_type": "mesh",
453
482
  "is_3D": True,
454
483
  "is_viewable": True,
455
484
  "save_viewable": g_v.save_viewable_triangulated_surface3D,
456
485
  "inspector": og_inspector.inspect_surface3D,
457
486
  },
458
487
  "VertexSet": {
488
+ "class": og.VertexSet,
459
489
  "input_factory": og.VertexSetInputFactory,
460
490
  "output_factory": og.VertexSetOutputFactory,
461
491
  "missing_files": og.check_vertex_set_missing_files,
@@ -464,7 +494,7 @@ def geode_objects_dict():
464
494
  "is_saveable": og.is_vertex_set_saveable,
465
495
  "save": og.save_vertex_set,
466
496
  "builder": og.VertexSetBuilder.create,
467
- "is_model": False,
497
+ "object_type": "mesh",
468
498
  "is_3D": False,
469
499
  "is_viewable": False,
470
500
  },
@@ -5,9 +5,12 @@ import time
5
5
 
6
6
  # Third party imports
7
7
  import flask
8
- from .. import geode_functions, utils_functions
9
- import werkzeug
8
+ import opengeode
10
9
  import uuid
10
+ import werkzeug
11
+
12
+ # Local application imports
13
+ from .. import geode_functions, utils_functions
11
14
 
12
15
  routes = flask.Blueprint("routes", __name__)
13
16
 
@@ -257,6 +260,9 @@ def save_viewable_file():
257
260
  DATA_FOLDER_PATH,
258
261
  generated_id + "." + native_extension,
259
262
  )
263
+ object_type = geode_functions.get_object_type(
264
+ flask.request.json["input_geode_object"]
265
+ )
260
266
 
261
267
  native_file_name = os.path.basename(absolute_native_file_path)
262
268
  viewable_file_name = os.path.basename(saved_viewable_file_path)
@@ -266,6 +272,99 @@ def save_viewable_file():
266
272
  "native_file_name": native_file_name,
267
273
  "viewable_file_name": viewable_file_name,
268
274
  "id": generated_id,
275
+ "object_type": object_type,
276
+ },
277
+ 200,
278
+ )
279
+
280
+
281
+ with open(os.path.join(schemas, "create_point.json"), "r") as file:
282
+ create_point_json = json.load(file)
283
+
284
+
285
+ @routes.route(create_point_json["route"], methods=create_point_json["methods"])
286
+ def create_point():
287
+ utils_functions.validate_request(flask.request, create_point_json)
288
+ DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
289
+ x = flask.request.json["x"]
290
+ y = flask.request.json["y"]
291
+ z = flask.request.json["z"]
292
+ class_ = geode_functions.geode_object_class("PointSet3D")
293
+ PointSet3D = class_.create()
294
+ builder = geode_functions.create_builder("PointSet3D", PointSet3D)
295
+ builder.create_point(opengeode.Point3D([x, y, z]))
296
+
297
+ generated_id = str(uuid.uuid4()).replace("-", "")
298
+ saved_viewable_file_path = geode_functions.save_viewable(
299
+ "PointSet3D", PointSet3D, DATA_FOLDER_PATH, generated_id
300
+ )
301
+
302
+ return flask.make_response(
303
+ {
304
+ "viewable_file_name": os.path.basename(saved_viewable_file_path),
305
+ "id": generated_id,
306
+ },
307
+ 200,
308
+ )
309
+
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,
269
368
  },
270
369
  200,
271
370
  )
@@ -0,0 +1,24 @@
1
+ {
2
+ "route": "/create_point",
3
+ "methods": [
4
+ "POST"
5
+ ],
6
+ "type": "object",
7
+ "properties": {
8
+ "x": {
9
+ "type": "number"
10
+ },
11
+ "y": {
12
+ "type": "number"
13
+ },
14
+ "z": {
15
+ "type": "number"
16
+ }
17
+ },
18
+ "required": [
19
+ "x",
20
+ "y",
21
+ "z"
22
+ ],
23
+ "additionalProperties": false
24
+ }
@@ -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,11 +159,78 @@ 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"]
165
+
166
+ # Test all params
167
+ test_utils.test_route_wrong_params(client, route, get_full_data)
168
+
169
+
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"
204
+
205
+ def get_full_data():
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}
226
+
227
+ # Normal test with all keys
228
+ response = client.post(route, json=get_full_data())
229
+ assert response.status_code == 200
230
+ viewable_file_name = response.json["viewable_file_name"]
231
+ assert type(viewable_file_name) is str
232
+ id = response.json["id"]
233
+ assert type(id) is str
180
234
 
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"
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.6.8
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.14
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.1
21
- opengeode-geosciences==8.1.1
22
- opengeode-geosciencesio==5.2.3
23
- opengeode-inspector==6.1.10
24
- opengeode-io==7.0.5
25
- referencing==0.35.1
26
- rpds-py==0.20.1
27
- typing-extensions==4.12.2
28
- werkzeug==3.1.2