OpenGeodeWeb-Back 5.11.0__tar.gz → 5.11.2__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.
Potentially problematic release.
This version of OpenGeodeWeb-Back might be problematic. Click here for more details.
- {opengeodeweb_back-5.11.0/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-5.11.2}/PKG-INFO +2 -2
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/pyproject.toml +1 -1
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/requirements.txt +1 -1
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO +2 -2
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +21 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/OpenGeodeWeb_Back.egg-info/requires.txt +1 -1
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/geode_functions.py +2 -2
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/blueprint_routes.py +270 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/create/blueprint_create.py +71 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/create/schemas/__init__.py +2 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/create/schemas/create_aoi.py +19 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/create/schemas/create_point.py +10 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/models/blueprint_models.py +49 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/models/schemas/__init__.py +2 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/models/schemas/mesh_components.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/models/schemas/vtm_component_indices.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/__init__.py +14 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/allowed_files.py +8 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/allowed_objects.py +9 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +8 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/inspect_file.py +8 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/kill.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/missing_files.py +8 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/ping.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/save_viewable_file.py +8 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/texture_coordinates.py +7 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/upload_file.py +8 -0
- opengeodeweb_back-5.11.2/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.py +7 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/utils_functions.py +2 -4
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/tests/test_create_routes.py +1 -1
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/tests/test_models_routes.py +5 -9
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/tests/test_routes.py +18 -14
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/tests/test_utils_functions.py +14 -6
- opengeodeweb_back-5.11.0/src/opengeodeweb_back/routes/blueprint_routes.py +0 -359
- opengeodeweb_back-5.11.0/src/opengeodeweb_back/routes/create/blueprint_create.py +0 -117
- opengeodeweb_back-5.11.0/src/opengeodeweb_back/routes/models/blueprint_models.py +0 -54
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/LICENSE +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/README.md +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/setup.cfg +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/OpenGeodeWeb_Back.egg-info/entry_points.txt +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/__init__.py +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/app.py +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/app_config.py +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/geode_objects.py +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/py.typed +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/create/schemas/create_aoi.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/create/schemas/create_point.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/models/schemas/mesh_components.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/models/schemas/vtm_component_indices.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/inspect_file.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/kill.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/test_utils.py +0 -0
- {opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/tests/test_geode_functions.py +0 -0
{opengeodeweb_back-5.11.0/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-5.11.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OpenGeodeWeb-Back
|
|
3
|
-
Version: 5.11.
|
|
3
|
+
Version: 5.11.2
|
|
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
|
|
@@ -27,7 +27,7 @@ Requires-Dist: opengeode-geosciencesio==5.8.1
|
|
|
27
27
|
Requires-Dist: opengeode-inspector==6.8.2
|
|
28
28
|
Requires-Dist: opengeode-io==7.4.2
|
|
29
29
|
Requires-Dist: werkzeug==3.1.2
|
|
30
|
-
Requires-Dist: opengeodeweb-microservice==1.*,>=1.0.
|
|
30
|
+
Requires-Dist: opengeodeweb-microservice==1.*,>=1.0.7rc1
|
|
31
31
|
Dynamic: license-file
|
|
32
32
|
|
|
33
33
|
<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 = "5.11.
|
|
7
|
+
version = "5.11.2"
|
|
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"
|
{opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OpenGeodeWeb-Back
|
|
3
|
-
Version: 5.11.
|
|
3
|
+
Version: 5.11.2
|
|
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
|
|
@@ -27,7 +27,7 @@ Requires-Dist: opengeode-geosciencesio==5.8.1
|
|
|
27
27
|
Requires-Dist: opengeode-inspector==6.8.2
|
|
28
28
|
Requires-Dist: opengeode-io==7.4.2
|
|
29
29
|
Requires-Dist: werkzeug==3.1.2
|
|
30
|
-
Requires-Dist: opengeodeweb-microservice==1.*,>=1.0.
|
|
30
|
+
Requires-Dist: opengeodeweb-microservice==1.*,>=1.0.7rc1
|
|
31
31
|
Dynamic: license-file
|
|
32
32
|
|
|
33
33
|
<h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
|
{opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt
RENAMED
|
@@ -18,25 +18,46 @@ src/opengeodeweb_back/test_utils.py
|
|
|
18
18
|
src/opengeodeweb_back/utils_functions.py
|
|
19
19
|
src/opengeodeweb_back/routes/blueprint_routes.py
|
|
20
20
|
src/opengeodeweb_back/routes/create/blueprint_create.py
|
|
21
|
+
src/opengeodeweb_back/routes/create/schemas/__init__.py
|
|
21
22
|
src/opengeodeweb_back/routes/create/schemas/create_aoi.json
|
|
23
|
+
src/opengeodeweb_back/routes/create/schemas/create_aoi.py
|
|
22
24
|
src/opengeodeweb_back/routes/create/schemas/create_point.json
|
|
25
|
+
src/opengeodeweb_back/routes/create/schemas/create_point.py
|
|
23
26
|
src/opengeodeweb_back/routes/models/blueprint_models.py
|
|
27
|
+
src/opengeodeweb_back/routes/models/schemas/__init__.py
|
|
24
28
|
src/opengeodeweb_back/routes/models/schemas/mesh_components.json
|
|
29
|
+
src/opengeodeweb_back/routes/models/schemas/mesh_components.py
|
|
25
30
|
src/opengeodeweb_back/routes/models/schemas/vtm_component_indices.json
|
|
31
|
+
src/opengeodeweb_back/routes/models/schemas/vtm_component_indices.py
|
|
32
|
+
src/opengeodeweb_back/routes/schemas/__init__.py
|
|
26
33
|
src/opengeodeweb_back/routes/schemas/allowed_files.json
|
|
34
|
+
src/opengeodeweb_back/routes/schemas/allowed_files.py
|
|
27
35
|
src/opengeodeweb_back/routes/schemas/allowed_objects.json
|
|
36
|
+
src/opengeodeweb_back/routes/schemas/allowed_objects.py
|
|
28
37
|
src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json
|
|
38
|
+
src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py
|
|
29
39
|
src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json
|
|
40
|
+
src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py
|
|
30
41
|
src/opengeodeweb_back/routes/schemas/inspect_file.json
|
|
42
|
+
src/opengeodeweb_back/routes/schemas/inspect_file.py
|
|
31
43
|
src/opengeodeweb_back/routes/schemas/kill.json
|
|
44
|
+
src/opengeodeweb_back/routes/schemas/kill.py
|
|
32
45
|
src/opengeodeweb_back/routes/schemas/missing_files.json
|
|
46
|
+
src/opengeodeweb_back/routes/schemas/missing_files.py
|
|
33
47
|
src/opengeodeweb_back/routes/schemas/ping.json
|
|
48
|
+
src/opengeodeweb_back/routes/schemas/ping.py
|
|
34
49
|
src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json
|
|
50
|
+
src/opengeodeweb_back/routes/schemas/polygon_attribute_names.py
|
|
35
51
|
src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json
|
|
52
|
+
src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py
|
|
36
53
|
src/opengeodeweb_back/routes/schemas/save_viewable_file.json
|
|
54
|
+
src/opengeodeweb_back/routes/schemas/save_viewable_file.py
|
|
37
55
|
src/opengeodeweb_back/routes/schemas/texture_coordinates.json
|
|
56
|
+
src/opengeodeweb_back/routes/schemas/texture_coordinates.py
|
|
38
57
|
src/opengeodeweb_back/routes/schemas/upload_file.json
|
|
58
|
+
src/opengeodeweb_back/routes/schemas/upload_file.py
|
|
39
59
|
src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json
|
|
60
|
+
src/opengeodeweb_back/routes/schemas/vertex_attribute_names.py
|
|
40
61
|
tests/test_create_routes.py
|
|
41
62
|
tests/test_geode_functions.py
|
|
42
63
|
tests/test_models_routes.py
|
{opengeodeweb_back-5.11.0 → opengeodeweb_back-5.11.2}/src/opengeodeweb_back/geode_functions.py
RENAMED
|
@@ -175,7 +175,7 @@ def filter_geode_objects(key: str = None):
|
|
|
175
175
|
return geode_objects_filtered_list
|
|
176
176
|
|
|
177
177
|
|
|
178
|
-
def list_input_extensions(key: str = None):
|
|
178
|
+
def list_input_extensions(key: str | None = None) -> list[str]:
|
|
179
179
|
extensions_list = []
|
|
180
180
|
geode_objects_filtered_list = filter_geode_objects(key)
|
|
181
181
|
for geode_object in geode_objects_filtered_list:
|
|
@@ -192,7 +192,7 @@ def has_creator(geode_object: str, extension: str):
|
|
|
192
192
|
|
|
193
193
|
def list_geode_objects(
|
|
194
194
|
file_absolute_path: str,
|
|
195
|
-
key: str = None,
|
|
195
|
+
key: str | None = None,
|
|
196
196
|
):
|
|
197
197
|
return_dict = {}
|
|
198
198
|
file_extension = utils_functions.extension_from_filename(
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Standard library imports
|
|
2
|
+
import os
|
|
3
|
+
import time
|
|
4
|
+
|
|
5
|
+
# Third party imports
|
|
6
|
+
import flask
|
|
7
|
+
import werkzeug
|
|
8
|
+
from opengeodeweb_microservice.schemas import get_schemas_dict
|
|
9
|
+
|
|
10
|
+
# Local application imports
|
|
11
|
+
from opengeodeweb_back import geode_functions, utils_functions
|
|
12
|
+
from .models import blueprint_models
|
|
13
|
+
from . import schemas
|
|
14
|
+
|
|
15
|
+
routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
routes.register_blueprint(
|
|
19
|
+
blueprint_models.routes,
|
|
20
|
+
url_prefix=blueprint_models.routes.url_prefix,
|
|
21
|
+
name=blueprint_models.routes.name,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@routes.route(
|
|
28
|
+
schemas_dict["allowed_files"]["route"],
|
|
29
|
+
methods=schemas_dict["allowed_files"]["methods"],
|
|
30
|
+
)
|
|
31
|
+
def allowed_files() -> flask.Response:
|
|
32
|
+
utils_functions.validate_request(flask.request, schemas_dict["allowed_files"])
|
|
33
|
+
params = schemas.AllowedFiles.from_dict(flask.request.get_json())
|
|
34
|
+
extensions = geode_functions.list_input_extensions(params.supported_feature)
|
|
35
|
+
return flask.make_response({"extensions": extensions}, 200)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@routes.route(
|
|
39
|
+
schemas_dict["upload_file"]["route"],
|
|
40
|
+
methods=schemas_dict["upload_file"]["methods"],
|
|
41
|
+
)
|
|
42
|
+
def upload_file() -> flask.Response:
|
|
43
|
+
if flask.request.method == "OPTIONS":
|
|
44
|
+
return flask.make_response({}, 200)
|
|
45
|
+
|
|
46
|
+
UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
|
|
47
|
+
if not os.path.exists(UPLOAD_FOLDER):
|
|
48
|
+
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
|
49
|
+
|
|
50
|
+
file = flask.request.files["file"]
|
|
51
|
+
filename = werkzeug.utils.secure_filename(os.path.basename(file.filename))
|
|
52
|
+
file.save(os.path.join(UPLOAD_FOLDER, filename))
|
|
53
|
+
return flask.make_response({"message": "File uploaded"}, 201)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@routes.route(
|
|
57
|
+
schemas_dict["allowed_objects"]["route"],
|
|
58
|
+
methods=schemas_dict["allowed_objects"]["methods"],
|
|
59
|
+
)
|
|
60
|
+
def allowed_objects() -> flask.Response:
|
|
61
|
+
if flask.request.method == "OPTIONS":
|
|
62
|
+
return flask.make_response({}, 200)
|
|
63
|
+
|
|
64
|
+
utils_functions.validate_request(flask.request, schemas_dict["allowed_objects"])
|
|
65
|
+
params = schemas.AllowedObjects.from_dict(flask.request.get_json())
|
|
66
|
+
file_absolute_path = geode_functions.upload_file_path(params.filename)
|
|
67
|
+
allowed_objects = geode_functions.list_geode_objects(
|
|
68
|
+
file_absolute_path, params.supported_feature
|
|
69
|
+
)
|
|
70
|
+
return flask.make_response({"allowed_objects": allowed_objects}, 200)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@routes.route(
|
|
74
|
+
schemas_dict["missing_files"]["route"],
|
|
75
|
+
methods=schemas_dict["missing_files"]["methods"],
|
|
76
|
+
)
|
|
77
|
+
def missing_files() -> flask.Response:
|
|
78
|
+
utils_functions.validate_request(flask.request, schemas_dict["missing_files"])
|
|
79
|
+
params = schemas.MissingFiles.from_dict(flask.request.get_json())
|
|
80
|
+
file_path = geode_functions.upload_file_path(params.filename)
|
|
81
|
+
|
|
82
|
+
additional_files = geode_functions.additional_files(
|
|
83
|
+
params.input_geode_object,
|
|
84
|
+
file_path,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
has_missing_files = any(
|
|
88
|
+
file.is_missing
|
|
89
|
+
for file in additional_files.mandatory_files + additional_files.optional_files
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
mandatory_files = [
|
|
93
|
+
os.path.basename(file.filename)
|
|
94
|
+
for file in additional_files.mandatory_files
|
|
95
|
+
if file.is_missing
|
|
96
|
+
]
|
|
97
|
+
additional_files = [
|
|
98
|
+
os.path.basename(file.filename)
|
|
99
|
+
for file in additional_files.optional_files
|
|
100
|
+
if file.is_missing
|
|
101
|
+
]
|
|
102
|
+
|
|
103
|
+
return flask.make_response(
|
|
104
|
+
{
|
|
105
|
+
"has_missing_files": has_missing_files,
|
|
106
|
+
"mandatory_files": mandatory_files,
|
|
107
|
+
"additional_files": additional_files,
|
|
108
|
+
},
|
|
109
|
+
200,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@routes.route(
|
|
114
|
+
schemas_dict["geographic_coordinate_systems"]["route"],
|
|
115
|
+
methods=schemas_dict["geographic_coordinate_systems"]["methods"],
|
|
116
|
+
)
|
|
117
|
+
def crs_converter_geographic_coordinate_systems() -> flask.Response:
|
|
118
|
+
utils_functions.validate_request(
|
|
119
|
+
flask.request, schemas_dict["geographic_coordinate_systems"]
|
|
120
|
+
)
|
|
121
|
+
params = schemas.GeographicCoordinateSystems.from_dict(flask.request.get_json())
|
|
122
|
+
infos = geode_functions.geographic_coordinate_systems(params.input_geode_object)
|
|
123
|
+
crs_list = []
|
|
124
|
+
for info in infos:
|
|
125
|
+
crs = {}
|
|
126
|
+
crs["name"] = info.name
|
|
127
|
+
crs["code"] = info.code
|
|
128
|
+
crs["authority"] = info.authority
|
|
129
|
+
crs_list.append(crs)
|
|
130
|
+
|
|
131
|
+
return flask.make_response({"crs_list": crs_list}, 200)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
@routes.route(
|
|
135
|
+
schemas_dict["inspect_file"]["route"],
|
|
136
|
+
methods=schemas_dict["inspect_file"]["methods"],
|
|
137
|
+
)
|
|
138
|
+
def inspect_file() -> flask.Response:
|
|
139
|
+
utils_functions.validate_request(flask.request, schemas_dict["inspect_file"])
|
|
140
|
+
params = schemas.InspectFile.from_dict(flask.request.get_json())
|
|
141
|
+
file_path = geode_functions.upload_file_path(params.filename)
|
|
142
|
+
data = geode_functions.load(params.input_geode_object, file_path)
|
|
143
|
+
class_inspector = geode_functions.inspect(params.input_geode_object, data)
|
|
144
|
+
inspection_result = geode_functions.get_inspector_children(class_inspector)
|
|
145
|
+
return flask.make_response({"inspection_result": inspection_result}, 200)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
@routes.route(
|
|
149
|
+
schemas_dict["geode_objects_and_output_extensions"]["route"],
|
|
150
|
+
methods=schemas_dict["geode_objects_and_output_extensions"]["methods"],
|
|
151
|
+
)
|
|
152
|
+
def geode_objects_and_output_extensions() -> flask.Response:
|
|
153
|
+
utils_functions.validate_request(
|
|
154
|
+
flask.request, schemas_dict["geode_objects_and_output_extensions"]
|
|
155
|
+
)
|
|
156
|
+
params = schemas.GeodeObjectsAndOutputExtensions.from_dict(flask.request.get_json())
|
|
157
|
+
file_path = geode_functions.upload_file_path(params.filename)
|
|
158
|
+
data = geode_functions.load(
|
|
159
|
+
params.input_geode_object,
|
|
160
|
+
file_path,
|
|
161
|
+
)
|
|
162
|
+
geode_objects_and_output_extensions = (
|
|
163
|
+
geode_functions.geode_objects_output_extensions(params.input_geode_object, data)
|
|
164
|
+
)
|
|
165
|
+
return flask.make_response(
|
|
166
|
+
{"geode_objects_and_output_extensions": geode_objects_and_output_extensions},
|
|
167
|
+
200,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@routes.route(
|
|
172
|
+
schemas_dict["save_viewable_file"]["route"],
|
|
173
|
+
methods=schemas_dict["save_viewable_file"]["methods"],
|
|
174
|
+
)
|
|
175
|
+
def save_viewable_file() -> flask.Response:
|
|
176
|
+
utils_functions.validate_request(flask.request, schemas_dict["save_viewable_file"])
|
|
177
|
+
params = schemas.SaveViewableFile.from_dict(flask.request.get_json())
|
|
178
|
+
return flask.make_response(
|
|
179
|
+
utils_functions.generate_native_viewable_and_light_viewable_from_file(
|
|
180
|
+
geode_object=params.input_geode_object,
|
|
181
|
+
input_filename=params.filename,
|
|
182
|
+
),
|
|
183
|
+
200,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
@routes.route(
|
|
188
|
+
schemas_dict["texture_coordinates"]["route"],
|
|
189
|
+
methods=schemas_dict["texture_coordinates"]["methods"],
|
|
190
|
+
)
|
|
191
|
+
def texture_coordinates() -> flask.Response:
|
|
192
|
+
utils_functions.validate_request(flask.request, schemas_dict["texture_coordinates"])
|
|
193
|
+
params = schemas.TextureCoordinates.from_dict(flask.request.get_json())
|
|
194
|
+
data = geode_functions.load_data(params.id)
|
|
195
|
+
texture_coordinates = data.texture_manager().texture_names()
|
|
196
|
+
return flask.make_response({"texture_coordinates": texture_coordinates}, 200)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
@routes.route(
|
|
200
|
+
schemas_dict["vertex_attribute_names"]["route"],
|
|
201
|
+
methods=schemas_dict["vertex_attribute_names"]["methods"],
|
|
202
|
+
)
|
|
203
|
+
def vertex_attribute_names() -> flask.Response:
|
|
204
|
+
utils_functions.validate_request(
|
|
205
|
+
flask.request, schemas_dict["vertex_attribute_names"]
|
|
206
|
+
)
|
|
207
|
+
params = schemas.VertexAttributeNames.from_dict(flask.request.get_json())
|
|
208
|
+
data = geode_functions.load_data(params.id)
|
|
209
|
+
vertex_attribute_names = data.vertex_attribute_manager().attribute_names()
|
|
210
|
+
return flask.make_response(
|
|
211
|
+
{
|
|
212
|
+
"vertex_attribute_names": vertex_attribute_names,
|
|
213
|
+
},
|
|
214
|
+
200,
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@routes.route(
|
|
219
|
+
schemas_dict["polygon_attribute_names"]["route"],
|
|
220
|
+
methods=schemas_dict["polygon_attribute_names"]["methods"],
|
|
221
|
+
)
|
|
222
|
+
def polygon_attribute_names() -> flask.Response:
|
|
223
|
+
utils_functions.validate_request(
|
|
224
|
+
flask.request, schemas_dict["polygon_attribute_names"]
|
|
225
|
+
)
|
|
226
|
+
params = schemas.PolygonAttributeNames.from_dict(flask.request.get_json())
|
|
227
|
+
data = geode_functions.load_data(params.id)
|
|
228
|
+
polygon_attribute_names = data.polygon_attribute_manager().attribute_names()
|
|
229
|
+
return flask.make_response(
|
|
230
|
+
{
|
|
231
|
+
"polygon_attribute_names": polygon_attribute_names,
|
|
232
|
+
},
|
|
233
|
+
200,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
@routes.route(
|
|
238
|
+
schemas_dict["polyhedron_attribute_names"]["route"],
|
|
239
|
+
methods=schemas_dict["polyhedron_attribute_names"]["methods"],
|
|
240
|
+
)
|
|
241
|
+
def polyhedron_attribute_names() -> flask.Response:
|
|
242
|
+
utils_functions.validate_request(
|
|
243
|
+
flask.request, schemas_dict["polyhedron_attribute_names"]
|
|
244
|
+
)
|
|
245
|
+
params = schemas.PolyhedronAttributeNames.from_dict(flask.request.get_json())
|
|
246
|
+
data = geode_functions.load_data(params.id)
|
|
247
|
+
polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names()
|
|
248
|
+
return flask.make_response(
|
|
249
|
+
{
|
|
250
|
+
"polyhedron_attribute_names": polyhedron_attribute_names,
|
|
251
|
+
},
|
|
252
|
+
200,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
@routes.route(
|
|
257
|
+
schemas_dict["ping"]["route"],
|
|
258
|
+
methods=schemas_dict["ping"]["methods"],
|
|
259
|
+
)
|
|
260
|
+
def ping() -> flask.Response:
|
|
261
|
+
utils_functions.validate_request(flask.request, schemas_dict["ping"])
|
|
262
|
+
flask.current_app.config.update(LAST_PING_TIME=time.time())
|
|
263
|
+
return flask.make_response({"message": "Flask server is running"}, 200)
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
@routes.route(schemas_dict["kill"]["route"], methods=schemas_dict["kill"]["methods"])
|
|
267
|
+
def kill() -> flask.Response:
|
|
268
|
+
print("Manual server kill, shutting down...", flush=True)
|
|
269
|
+
os._exit(0)
|
|
270
|
+
return flask.make_response({"message": "Flask server is dead"}, 200)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Standard library imports
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
# Third party imports
|
|
5
|
+
import flask
|
|
6
|
+
import opengeode
|
|
7
|
+
from opengeodeweb_microservice.schemas import get_schemas_dict
|
|
8
|
+
|
|
9
|
+
# Local application imports
|
|
10
|
+
from opengeodeweb_back import geode_functions, utils_functions
|
|
11
|
+
from . import schemas
|
|
12
|
+
|
|
13
|
+
routes = flask.Blueprint("create", __name__, url_prefix="/create")
|
|
14
|
+
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@routes.route(
|
|
18
|
+
schemas_dict["create_point"]["route"],
|
|
19
|
+
methods=schemas_dict["create_point"]["methods"],
|
|
20
|
+
)
|
|
21
|
+
def create_point() -> flask.Response:
|
|
22
|
+
"""Endpoint to create a single point in 3D space."""
|
|
23
|
+
print(f"create_point : {flask.request=}", flush=True)
|
|
24
|
+
utils_functions.validate_request(flask.request, schemas_dict["create_point"])
|
|
25
|
+
params = schemas.CreatePoint.from_dict(flask.request.get_json())
|
|
26
|
+
|
|
27
|
+
# Create the point
|
|
28
|
+
pointset = geode_functions.geode_object_class("PointSet3D").create()
|
|
29
|
+
builder = geode_functions.create_builder("PointSet3D", pointset)
|
|
30
|
+
builder.set_name(params.name)
|
|
31
|
+
builder.create_point(opengeode.Point3D([params.x, params.y, params.z]))
|
|
32
|
+
|
|
33
|
+
# Save and get info
|
|
34
|
+
result = utils_functions.generate_native_viewable_and_light_viewable_from_object(
|
|
35
|
+
geode_object="PointSet3D",
|
|
36
|
+
data=pointset,
|
|
37
|
+
)
|
|
38
|
+
return flask.make_response(result, 200)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@routes.route(
|
|
42
|
+
schemas_dict["create_aoi"]["route"], methods=schemas_dict["create_aoi"]["methods"]
|
|
43
|
+
)
|
|
44
|
+
def create_aoi() -> flask.Response:
|
|
45
|
+
"""Endpoint to create an Area of Interest (AOI) as an EdgedCurve3D."""
|
|
46
|
+
print(f"create_aoi : {flask.request=}", flush=True)
|
|
47
|
+
utils_functions.validate_request(flask.request, schemas_dict["create_aoi"])
|
|
48
|
+
params = schemas.CreateAoi.from_dict(flask.request.get_json())
|
|
49
|
+
|
|
50
|
+
# Create the edged curve
|
|
51
|
+
edged_curve = geode_functions.geode_object_class("EdgedCurve3D").create()
|
|
52
|
+
builder = geode_functions.create_builder("EdgedCurve3D", edged_curve)
|
|
53
|
+
builder.set_name(params.name)
|
|
54
|
+
|
|
55
|
+
# Create vertices first
|
|
56
|
+
for point in params.points:
|
|
57
|
+
pp = opengeode.Point3D([point.x, point.y, params.z])
|
|
58
|
+
builder.create_point(opengeode.Point3D([point.x, point.y, params.z]))
|
|
59
|
+
|
|
60
|
+
# Create edges between consecutive vertices and close the loop
|
|
61
|
+
num_vertices = len(params.points)
|
|
62
|
+
for i in range(num_vertices):
|
|
63
|
+
next_i = (i + 1) % num_vertices
|
|
64
|
+
builder.create_edge_with_vertices(i, next_i)
|
|
65
|
+
|
|
66
|
+
# Save and get info
|
|
67
|
+
result = utils_functions.generate_native_viewable_and_light_viewable_from_object(
|
|
68
|
+
geode_object="EdgedCurve3D",
|
|
69
|
+
data=edged_curve,
|
|
70
|
+
)
|
|
71
|
+
return flask.make_response(result, 200)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from dataclasses_json import DataClassJsonMixin
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class Point(DataClassJsonMixin):
|
|
8
|
+
x: float
|
|
9
|
+
y: float
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class CreateAoi(DataClassJsonMixin):
|
|
14
|
+
name: str
|
|
15
|
+
"""Name of the AOI"""
|
|
16
|
+
|
|
17
|
+
points: List[Point]
|
|
18
|
+
z: float
|
|
19
|
+
id: Optional[str] = None
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import xml.etree.ElementTree as ET
|
|
3
|
+
import flask
|
|
4
|
+
from opengeodeweb_microservice.schemas import get_schemas_dict
|
|
5
|
+
|
|
6
|
+
from opengeodeweb_back import geode_functions, utils_functions
|
|
7
|
+
from . import schemas
|
|
8
|
+
|
|
9
|
+
routes = flask.Blueprint("models", __name__, url_prefix="/models")
|
|
10
|
+
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@routes.route(
|
|
14
|
+
schemas_dict["vtm_component_indices"]["route"],
|
|
15
|
+
methods=schemas_dict["vtm_component_indices"]["methods"],
|
|
16
|
+
)
|
|
17
|
+
def uuid_to_flat_index() -> flask.Response:
|
|
18
|
+
utils_functions.validate_request(
|
|
19
|
+
flask.request, schemas_dict["vtm_component_indices"]
|
|
20
|
+
)
|
|
21
|
+
params = schemas.VtmComponentIndices.from_dict(flask.request.get_json())
|
|
22
|
+
vtm_file_path = geode_functions.data_file_path(params.id, "viewable.vtm")
|
|
23
|
+
tree = ET.parse(vtm_file_path)
|
|
24
|
+
root = tree.find("vtkMultiBlockDataSet")
|
|
25
|
+
if root is None:
|
|
26
|
+
raise Exception("Failed to read viewable file")
|
|
27
|
+
uuid_to_flat_index = {}
|
|
28
|
+
current_index = 0
|
|
29
|
+
for elem in root.iter():
|
|
30
|
+
if "uuid" in elem.attrib and elem.tag == "DataSet":
|
|
31
|
+
uuid_to_flat_index[elem.attrib["uuid"]] = current_index
|
|
32
|
+
current_index += 1
|
|
33
|
+
return flask.make_response({"uuid_to_flat_index": uuid_to_flat_index}, 200)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@routes.route(
|
|
37
|
+
schemas_dict["mesh_components"]["route"],
|
|
38
|
+
methods=schemas_dict["mesh_components"]["methods"],
|
|
39
|
+
)
|
|
40
|
+
def extract_uuids_endpoint() -> flask.Response:
|
|
41
|
+
utils_functions.validate_request(flask.request, schemas_dict["mesh_components"])
|
|
42
|
+
params = schemas.MeshComponents.from_dict(flask.request.get_json())
|
|
43
|
+
model = geode_functions.load_data(params.id)
|
|
44
|
+
mesh_components = model.mesh_components()
|
|
45
|
+
uuid_dict = {}
|
|
46
|
+
for mesh_component, ids in mesh_components.items():
|
|
47
|
+
component_name = mesh_component.get()
|
|
48
|
+
uuid_dict[component_name] = [id.string() for id in ids]
|
|
49
|
+
return flask.make_response({"uuid_dict": uuid_dict}, 200)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from .vertex_attribute_names import *
|
|
2
|
+
from .upload_file import *
|
|
3
|
+
from .texture_coordinates import *
|
|
4
|
+
from .save_viewable_file import *
|
|
5
|
+
from .polyhedron_attribute_names import *
|
|
6
|
+
from .polygon_attribute_names import *
|
|
7
|
+
from .ping import *
|
|
8
|
+
from .missing_files import *
|
|
9
|
+
from .kill import *
|
|
10
|
+
from .inspect_file import *
|
|
11
|
+
from .geographic_coordinate_systems import *
|
|
12
|
+
from .geode_objects_and_output_extensions import *
|
|
13
|
+
from .allowed_objects import *
|
|
14
|
+
from .allowed_files import *
|