OpenGeodeWeb-Back 5.10.5__py3-none-any.whl → 5.11.1__py3-none-any.whl
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/app.py +11 -10
- opengeodeweb_back/geode_functions.py +2 -2
- opengeodeweb_back/routes/blueprint_routes.py +92 -206
- opengeodeweb_back/routes/create/blueprint_create.py +71 -0
- opengeodeweb_back/routes/create/schemas/__init__.py +2 -0
- opengeodeweb_back/routes/create/schemas/create_aoi.json +46 -0
- opengeodeweb_back/routes/create/schemas/create_aoi.py +19 -0
- opengeodeweb_back/routes/create/schemas/create_point.json +29 -0
- opengeodeweb_back/routes/create/schemas/create_point.py +10 -0
- opengeodeweb_back/routes/models/blueprint_models.py +22 -27
- opengeodeweb_back/routes/models/schemas/__init__.py +2 -0
- opengeodeweb_back/routes/models/schemas/mesh_components.py +7 -0
- opengeodeweb_back/routes/models/schemas/vtm_component_indices.py +7 -0
- opengeodeweb_back/routes/schemas/__init__.py +14 -0
- opengeodeweb_back/routes/schemas/allowed_files.py +8 -0
- opengeodeweb_back/routes/schemas/allowed_objects.py +9 -0
- opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +8 -0
- opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +7 -0
- opengeodeweb_back/routes/schemas/inspect_file.py +8 -0
- opengeodeweb_back/routes/schemas/kill.py +7 -0
- opengeodeweb_back/routes/schemas/missing_files.py +8 -0
- opengeodeweb_back/routes/schemas/ping.py +7 -0
- opengeodeweb_back/routes/schemas/polygon_attribute_names.py +7 -0
- opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +7 -0
- opengeodeweb_back/routes/schemas/save_viewable_file.py +8 -0
- opengeodeweb_back/routes/schemas/texture_coordinates.py +7 -0
- opengeodeweb_back/routes/schemas/upload_file.py +8 -0
- opengeodeweb_back/routes/schemas/vertex_attribute_names.py +7 -0
- opengeodeweb_back/utils_functions.py +3 -4
- {opengeodeweb_back-5.10.5.dist-info → opengeodeweb_back-5.11.1.dist-info}/METADATA +9 -9
- opengeodeweb_back-5.11.1.dist-info/RECORD +56 -0
- opengeodeweb_back/routes/schemas/create_point.json +0 -29
- opengeodeweb_back-5.10.5.dist-info/RECORD +0 -33
- {opengeodeweb_back-5.10.5.dist-info → opengeodeweb_back-5.11.1.dist-info}/WHEEL +0 -0
- {opengeodeweb_back-5.10.5.dist-info → opengeodeweb_back-5.11.1.dist-info}/entry_points.txt +0 -0
- {opengeodeweb_back-5.10.5.dist-info → opengeodeweb_back-5.11.1.dist-info}/licenses/LICENSE +0 -0
- {opengeodeweb_back-5.10.5.dist-info → opengeodeweb_back-5.11.1.dist-info}/top_level.txt +0 -0
opengeodeweb_back/app.py
CHANGED
|
@@ -4,30 +4,26 @@ import argparse
|
|
|
4
4
|
import os
|
|
5
5
|
import time
|
|
6
6
|
from typing import Any
|
|
7
|
-
|
|
8
7
|
import flask
|
|
9
8
|
import flask_cors # type: ignore
|
|
10
9
|
from flask import Flask, Response
|
|
11
10
|
from flask_cors import cross_origin
|
|
12
11
|
from werkzeug.exceptions import HTTPException
|
|
13
|
-
|
|
14
12
|
from opengeodeweb_back import utils_functions, app_config
|
|
15
13
|
from opengeodeweb_back.routes import blueprint_routes
|
|
16
14
|
from opengeodeweb_back.routes.models import blueprint_models
|
|
15
|
+
from opengeodeweb_back.routes.create import blueprint_create
|
|
17
16
|
from opengeodeweb_microservice.database import connection
|
|
18
17
|
|
|
19
|
-
|
|
20
18
|
""" Global config """
|
|
21
19
|
app: Flask = flask.Flask(__name__)
|
|
22
20
|
|
|
23
21
|
""" Config variables """
|
|
24
22
|
FLASK_DEBUG = True if os.environ.get("FLASK_DEBUG", default=None) == "True" else False
|
|
25
|
-
|
|
26
23
|
if FLASK_DEBUG == False:
|
|
27
24
|
app.config.from_object(app_config.ProdConfig)
|
|
28
25
|
else:
|
|
29
26
|
app.config.from_object(app_config.DevConfig)
|
|
30
|
-
|
|
31
27
|
DEFAULT_HOST: str = app.config.get("DEFAULT_HOST") or "localhost"
|
|
32
28
|
DEFAULT_PORT: int = int(app.config.get("DEFAULT_PORT") or 5000)
|
|
33
29
|
DEFAULT_DATA_FOLDER_PATH: str = app.config.get("DEFAULT_DATA_FOLDER_PATH") or "./data"
|
|
@@ -54,12 +50,16 @@ app.register_blueprint(
|
|
|
54
50
|
url_prefix="/opengeodeweb_back",
|
|
55
51
|
name="opengeodeweb_back",
|
|
56
52
|
)
|
|
57
|
-
|
|
58
53
|
app.register_blueprint(
|
|
59
54
|
blueprint_models.routes,
|
|
60
55
|
url_prefix="/opengeodeweb_back/models",
|
|
61
56
|
name="opengeodeweb_models",
|
|
62
57
|
)
|
|
58
|
+
app.register_blueprint(
|
|
59
|
+
blueprint_create.routes,
|
|
60
|
+
url_prefix="/opengeodeweb_back/create",
|
|
61
|
+
name="opengeodeweb_create",
|
|
62
|
+
)
|
|
63
63
|
|
|
64
64
|
if FLASK_DEBUG == False:
|
|
65
65
|
utils_functions.set_interval(
|
|
@@ -72,6 +72,11 @@ def errorhandler(e: HTTPException) -> tuple[dict[str, Any], int] | Response:
|
|
|
72
72
|
return utils_functions.handle_exception(e)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
+
@app.errorhandler(Exception)
|
|
76
|
+
def handle_generic_exception(e: Exception) -> Response:
|
|
77
|
+
return flask.make_response({"error": str(e)}, 500)
|
|
78
|
+
|
|
79
|
+
|
|
75
80
|
@app.route(
|
|
76
81
|
"/error",
|
|
77
82
|
methods=["POST"],
|
|
@@ -136,13 +141,10 @@ def run_server() -> None:
|
|
|
136
141
|
help="Number of minutes before the server times out",
|
|
137
142
|
)
|
|
138
143
|
args = parser.parse_args()
|
|
139
|
-
|
|
140
144
|
app.config.update(DATA_FOLDER_PATH=args.data_folder_path)
|
|
141
145
|
app.config.update(UPLOAD_FOLDER=args.upload_folder_path)
|
|
142
146
|
app.config.update(MINUTES_BEFORE_TIMEOUT=args.timeout)
|
|
143
|
-
|
|
144
147
|
flask_cors.CORS(app, origins=args.allowed_origins)
|
|
145
|
-
|
|
146
148
|
print(
|
|
147
149
|
f"Host: {args.host}, Port: {args.port}, Debug: {args.debug}, "
|
|
148
150
|
f"Data folder path: {args.data_folder_path}, Timeout: {args.timeout}, "
|
|
@@ -158,7 +160,6 @@ def run_server() -> None:
|
|
|
158
160
|
|
|
159
161
|
connection.init_database(db_path)
|
|
160
162
|
print(f"Database initialized at: {db_path}", flush=True)
|
|
161
|
-
|
|
162
163
|
app.run(debug=args.debug, host=args.host, port=args.port, ssl_context=SSL)
|
|
163
164
|
|
|
164
165
|
|
|
@@ -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(
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
# Standard library imports
|
|
2
|
-
import json
|
|
3
2
|
import os
|
|
4
3
|
import time
|
|
5
4
|
|
|
6
5
|
# Third party imports
|
|
7
6
|
import flask
|
|
8
|
-
import opengeode
|
|
9
7
|
import werkzeug
|
|
8
|
+
from opengeodeweb_microservice.schemas import get_schemas_dict
|
|
10
9
|
|
|
11
10
|
# Local application imports
|
|
12
|
-
from
|
|
13
|
-
|
|
11
|
+
from opengeodeweb_back import geode_functions, utils_functions
|
|
14
12
|
from .models import blueprint_models
|
|
13
|
+
from . import schemas
|
|
15
14
|
|
|
16
15
|
routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back")
|
|
17
16
|
|
|
@@ -22,40 +21,25 @@ routes.register_blueprint(
|
|
|
22
21
|
name=blueprint_models.routes.name,
|
|
23
22
|
)
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
schemas = os.path.join(os.path.dirname(__file__), "schemas")
|
|
27
|
-
|
|
28
|
-
with open(
|
|
29
|
-
os.path.join(schemas, "allowed_files.json"),
|
|
30
|
-
"r",
|
|
31
|
-
) as file:
|
|
32
|
-
allowed_files_json = json.load(file)
|
|
24
|
+
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
|
|
33
25
|
|
|
34
26
|
|
|
35
27
|
@routes.route(
|
|
36
|
-
|
|
37
|
-
methods=
|
|
28
|
+
schemas_dict["allowed_files"]["route"],
|
|
29
|
+
methods=schemas_dict["allowed_files"]["methods"],
|
|
38
30
|
)
|
|
39
|
-
def allowed_files():
|
|
40
|
-
utils_functions.validate_request(flask.request,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
)
|
|
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)
|
|
44
35
|
return flask.make_response({"extensions": extensions}, 200)
|
|
45
36
|
|
|
46
37
|
|
|
47
|
-
with open(
|
|
48
|
-
os.path.join(schemas, "upload_file.json"),
|
|
49
|
-
"r",
|
|
50
|
-
) as file:
|
|
51
|
-
upload_file_json = json.load(file)
|
|
52
|
-
|
|
53
|
-
|
|
54
38
|
@routes.route(
|
|
55
|
-
|
|
56
|
-
methods=
|
|
39
|
+
schemas_dict["upload_file"]["route"],
|
|
40
|
+
methods=schemas_dict["upload_file"]["methods"],
|
|
57
41
|
)
|
|
58
|
-
def upload_file():
|
|
42
|
+
def upload_file() -> flask.Response:
|
|
59
43
|
if flask.request.method == "OPTIONS":
|
|
60
44
|
return flask.make_response({}, 200)
|
|
61
45
|
|
|
@@ -68,48 +52,34 @@ def upload_file():
|
|
|
68
52
|
return flask.make_response({"message": "File uploaded"}, 201)
|
|
69
53
|
|
|
70
54
|
|
|
71
|
-
with open(
|
|
72
|
-
os.path.join(schemas, "allowed_objects.json"),
|
|
73
|
-
"r",
|
|
74
|
-
) as file:
|
|
75
|
-
allowed_objects_json = json.load(file)
|
|
76
|
-
|
|
77
|
-
|
|
78
55
|
@routes.route(
|
|
79
|
-
|
|
80
|
-
methods=
|
|
56
|
+
schemas_dict["allowed_objects"]["route"],
|
|
57
|
+
methods=schemas_dict["allowed_objects"]["methods"],
|
|
81
58
|
)
|
|
82
|
-
def allowed_objects():
|
|
59
|
+
def allowed_objects() -> flask.Response:
|
|
83
60
|
if flask.request.method == "OPTIONS":
|
|
84
61
|
return flask.make_response({}, 200)
|
|
85
62
|
|
|
86
|
-
utils_functions.validate_request(flask.request,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
)
|
|
63
|
+
utils_functions.validate_request(flask.request, schemas_dict["allowed_objects"])
|
|
64
|
+
params = schemas.AllowedObjects.from_dict(flask.request.get_json())
|
|
65
|
+
file_absolute_path = geode_functions.upload_file_path(params.filename)
|
|
90
66
|
allowed_objects = geode_functions.list_geode_objects(
|
|
91
|
-
file_absolute_path,
|
|
67
|
+
file_absolute_path, params.supported_feature
|
|
92
68
|
)
|
|
93
69
|
return flask.make_response({"allowed_objects": allowed_objects}, 200)
|
|
94
70
|
|
|
95
71
|
|
|
96
|
-
with open(
|
|
97
|
-
os.path.join(schemas, "missing_files.json"),
|
|
98
|
-
"r",
|
|
99
|
-
) as file:
|
|
100
|
-
missing_files_json = json.load(file)
|
|
101
|
-
|
|
102
|
-
|
|
103
72
|
@routes.route(
|
|
104
|
-
|
|
105
|
-
methods=
|
|
73
|
+
schemas_dict["missing_files"]["route"],
|
|
74
|
+
methods=schemas_dict["missing_files"]["methods"],
|
|
106
75
|
)
|
|
107
|
-
def missing_files():
|
|
108
|
-
utils_functions.validate_request(flask.request,
|
|
109
|
-
|
|
76
|
+
def missing_files() -> flask.Response:
|
|
77
|
+
utils_functions.validate_request(flask.request, schemas_dict["missing_files"])
|
|
78
|
+
params = schemas.MissingFiles.from_dict(flask.request.get_json())
|
|
79
|
+
file_path = geode_functions.upload_file_path(params.filename)
|
|
110
80
|
|
|
111
81
|
additional_files = geode_functions.additional_files(
|
|
112
|
-
|
|
82
|
+
params.input_geode_object,
|
|
113
83
|
file_path,
|
|
114
84
|
)
|
|
115
85
|
|
|
@@ -139,22 +109,16 @@ def missing_files():
|
|
|
139
109
|
)
|
|
140
110
|
|
|
141
111
|
|
|
142
|
-
with open(
|
|
143
|
-
os.path.join(schemas, "geographic_coordinate_systems.json"),
|
|
144
|
-
"r",
|
|
145
|
-
) as file:
|
|
146
|
-
geographic_coordinate_systems_json = json.load(file)
|
|
147
|
-
|
|
148
|
-
|
|
149
112
|
@routes.route(
|
|
150
|
-
|
|
151
|
-
methods=
|
|
113
|
+
schemas_dict["geographic_coordinate_systems"]["route"],
|
|
114
|
+
methods=schemas_dict["geographic_coordinate_systems"]["methods"],
|
|
152
115
|
)
|
|
153
|
-
def crs_converter_geographic_coordinate_systems():
|
|
154
|
-
utils_functions.validate_request(
|
|
155
|
-
|
|
156
|
-
flask.request.get_json()["input_geode_object"]
|
|
116
|
+
def crs_converter_geographic_coordinate_systems() -> flask.Response:
|
|
117
|
+
utils_functions.validate_request(
|
|
118
|
+
flask.request, schemas_dict["geographic_coordinate_systems"]
|
|
157
119
|
)
|
|
120
|
+
params = schemas.GeographicCoordinateSystems.from_dict(flask.request.get_json())
|
|
121
|
+
infos = geode_functions.geographic_coordinate_systems(params.input_geode_object)
|
|
158
122
|
crs_list = []
|
|
159
123
|
for info in infos:
|
|
160
124
|
crs = {}
|
|
@@ -166,55 +130,36 @@ def crs_converter_geographic_coordinate_systems():
|
|
|
166
130
|
return flask.make_response({"crs_list": crs_list}, 200)
|
|
167
131
|
|
|
168
132
|
|
|
169
|
-
with open(
|
|
170
|
-
os.path.join(schemas, "inspect_file.json"),
|
|
171
|
-
"r",
|
|
172
|
-
) as file:
|
|
173
|
-
inspect_file_json = json.load(file)
|
|
174
|
-
|
|
175
|
-
|
|
176
133
|
@routes.route(
|
|
177
|
-
|
|
178
|
-
methods=
|
|
134
|
+
schemas_dict["inspect_file"]["route"],
|
|
135
|
+
methods=schemas_dict["inspect_file"]["methods"],
|
|
179
136
|
)
|
|
180
|
-
def inspect_file():
|
|
181
|
-
utils_functions.validate_request(flask.request,
|
|
182
|
-
|
|
183
|
-
file_path = geode_functions.upload_file_path(
|
|
184
|
-
data = geode_functions.load(
|
|
185
|
-
|
|
186
|
-
)
|
|
187
|
-
class_inspector = geode_functions.inspect(
|
|
188
|
-
flask.request.get_json()["input_geode_object"], data
|
|
189
|
-
)
|
|
137
|
+
def inspect_file() -> flask.Response:
|
|
138
|
+
utils_functions.validate_request(flask.request, schemas_dict["inspect_file"])
|
|
139
|
+
params = schemas.InspectFile.from_dict(flask.request.get_json())
|
|
140
|
+
file_path = geode_functions.upload_file_path(params.filename)
|
|
141
|
+
data = geode_functions.load(params.input_geode_object, file_path)
|
|
142
|
+
class_inspector = geode_functions.inspect(params.input_geode_object, data)
|
|
190
143
|
inspection_result = geode_functions.get_inspector_children(class_inspector)
|
|
191
144
|
return flask.make_response({"inspection_result": inspection_result}, 200)
|
|
192
145
|
|
|
193
146
|
|
|
194
|
-
with open(
|
|
195
|
-
os.path.join(schemas, "geode_objects_and_output_extensions.json"),
|
|
196
|
-
"r",
|
|
197
|
-
) as file:
|
|
198
|
-
geode_objects_and_output_extensions_json = json.load(file)
|
|
199
|
-
|
|
200
|
-
|
|
201
147
|
@routes.route(
|
|
202
|
-
|
|
203
|
-
methods=
|
|
148
|
+
schemas_dict["geode_objects_and_output_extensions"]["route"],
|
|
149
|
+
methods=schemas_dict["geode_objects_and_output_extensions"]["methods"],
|
|
204
150
|
)
|
|
205
|
-
def geode_objects_and_output_extensions():
|
|
151
|
+
def geode_objects_and_output_extensions() -> flask.Response:
|
|
206
152
|
utils_functions.validate_request(
|
|
207
|
-
flask.request,
|
|
153
|
+
flask.request, schemas_dict["geode_objects_and_output_extensions"]
|
|
208
154
|
)
|
|
209
|
-
|
|
155
|
+
params = schemas.GeodeObjectsAndOutputExtensions.from_dict(flask.request.get_json())
|
|
156
|
+
file_path = geode_functions.upload_file_path(params.filename)
|
|
210
157
|
data = geode_functions.load(
|
|
211
|
-
|
|
158
|
+
params.input_geode_object,
|
|
212
159
|
file_path,
|
|
213
160
|
)
|
|
214
161
|
geode_objects_and_output_extensions = (
|
|
215
|
-
geode_functions.geode_objects_output_extensions(
|
|
216
|
-
flask.request.get_json()["input_geode_object"], data
|
|
217
|
-
)
|
|
162
|
+
geode_functions.geode_objects_output_extensions(params.input_geode_object, data)
|
|
218
163
|
)
|
|
219
164
|
return flask.make_response(
|
|
220
165
|
{"geode_objects_and_output_extensions": geode_objects_and_output_extensions},
|
|
@@ -222,81 +167,44 @@ def geode_objects_and_output_extensions():
|
|
|
222
167
|
)
|
|
223
168
|
|
|
224
169
|
|
|
225
|
-
with open(
|
|
226
|
-
os.path.join(schemas, "save_viewable_file.json"),
|
|
227
|
-
"r",
|
|
228
|
-
) as file:
|
|
229
|
-
save_viewable_file_json = json.load(file)
|
|
230
|
-
|
|
231
|
-
|
|
232
170
|
@routes.route(
|
|
233
|
-
|
|
234
|
-
methods=
|
|
171
|
+
schemas_dict["save_viewable_file"]["route"],
|
|
172
|
+
methods=schemas_dict["save_viewable_file"]["methods"],
|
|
235
173
|
)
|
|
236
|
-
def save_viewable_file():
|
|
237
|
-
utils_functions.validate_request(flask.request,
|
|
174
|
+
def save_viewable_file() -> flask.Response:
|
|
175
|
+
utils_functions.validate_request(flask.request, schemas_dict["save_viewable_file"])
|
|
176
|
+
params = schemas.SaveViewableFile.from_dict(flask.request.get_json())
|
|
238
177
|
return flask.make_response(
|
|
239
178
|
utils_functions.generate_native_viewable_and_light_viewable_from_file(
|
|
240
|
-
geode_object=
|
|
241
|
-
input_filename=
|
|
242
|
-
),
|
|
243
|
-
200,
|
|
244
|
-
)
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
with open(os.path.join(schemas, "create_point.json"), "r") as file:
|
|
248
|
-
create_point_json = json.load(file)
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
@routes.route(create_point_json["route"], methods=create_point_json["methods"])
|
|
252
|
-
def create_point():
|
|
253
|
-
utils_functions.validate_request(flask.request, create_point_json)
|
|
254
|
-
title = flask.request.get_json()["title"]
|
|
255
|
-
x = flask.request.get_json()["x"]
|
|
256
|
-
y = flask.request.get_json()["y"]
|
|
257
|
-
z = flask.request.get_json()["z"]
|
|
258
|
-
class_ = geode_functions.geode_object_class("PointSet3D")
|
|
259
|
-
PointSet3D = class_.create()
|
|
260
|
-
builder = geode_functions.create_builder("PointSet3D", PointSet3D)
|
|
261
|
-
builder.create_point(opengeode.Point3D([x, y, z]))
|
|
262
|
-
builder.set_name(title)
|
|
263
|
-
return flask.make_response(
|
|
264
|
-
utils_functions.generate_native_viewable_and_light_viewable_from_object(
|
|
265
|
-
"PointSet3D", PointSet3D
|
|
179
|
+
geode_object=params.input_geode_object,
|
|
180
|
+
input_filename=params.filename,
|
|
266
181
|
),
|
|
267
182
|
200,
|
|
268
183
|
)
|
|
269
184
|
|
|
270
185
|
|
|
271
|
-
with open(os.path.join(schemas, "texture_coordinates.json"), "r") as file:
|
|
272
|
-
texture_coordinates_json = json.load(file)
|
|
273
|
-
|
|
274
|
-
|
|
275
186
|
@routes.route(
|
|
276
|
-
|
|
277
|
-
methods=
|
|
187
|
+
schemas_dict["texture_coordinates"]["route"],
|
|
188
|
+
methods=schemas_dict["texture_coordinates"]["methods"],
|
|
278
189
|
)
|
|
279
|
-
def texture_coordinates():
|
|
280
|
-
utils_functions.validate_request(flask.request,
|
|
281
|
-
|
|
190
|
+
def texture_coordinates() -> flask.Response:
|
|
191
|
+
utils_functions.validate_request(flask.request, schemas_dict["texture_coordinates"])
|
|
192
|
+
params = schemas.TextureCoordinates.from_dict(flask.request.get_json())
|
|
193
|
+
data = geode_functions.load_data(params.id)
|
|
282
194
|
texture_coordinates = data.texture_manager().texture_names()
|
|
283
195
|
return flask.make_response({"texture_coordinates": texture_coordinates}, 200)
|
|
284
196
|
|
|
285
197
|
|
|
286
|
-
with open(
|
|
287
|
-
os.path.join(schemas, "vertex_attribute_names.json"),
|
|
288
|
-
"r",
|
|
289
|
-
) as file:
|
|
290
|
-
vertex_attribute_names_json = json.load(file)
|
|
291
|
-
|
|
292
|
-
|
|
293
198
|
@routes.route(
|
|
294
|
-
|
|
295
|
-
methods=
|
|
199
|
+
schemas_dict["vertex_attribute_names"]["route"],
|
|
200
|
+
methods=schemas_dict["vertex_attribute_names"]["methods"],
|
|
296
201
|
)
|
|
297
|
-
def vertex_attribute_names():
|
|
298
|
-
utils_functions.validate_request(
|
|
299
|
-
|
|
202
|
+
def vertex_attribute_names() -> flask.Response:
|
|
203
|
+
utils_functions.validate_request(
|
|
204
|
+
flask.request, schemas_dict["vertex_attribute_names"]
|
|
205
|
+
)
|
|
206
|
+
params = schemas.VertexAttributeNames.from_dict(flask.request.get_json())
|
|
207
|
+
data = geode_functions.load_data(params.id)
|
|
300
208
|
vertex_attribute_names = data.vertex_attribute_manager().attribute_names()
|
|
301
209
|
return flask.make_response(
|
|
302
210
|
{
|
|
@@ -306,20 +214,16 @@ def vertex_attribute_names():
|
|
|
306
214
|
)
|
|
307
215
|
|
|
308
216
|
|
|
309
|
-
with open(
|
|
310
|
-
os.path.join(schemas, "polygon_attribute_names.json"),
|
|
311
|
-
"r",
|
|
312
|
-
) as file:
|
|
313
|
-
polygon_attribute_names_json = json.load(file)
|
|
314
|
-
|
|
315
|
-
|
|
316
217
|
@routes.route(
|
|
317
|
-
|
|
318
|
-
methods=
|
|
218
|
+
schemas_dict["polygon_attribute_names"]["route"],
|
|
219
|
+
methods=schemas_dict["polygon_attribute_names"]["methods"],
|
|
319
220
|
)
|
|
320
|
-
def polygon_attribute_names():
|
|
321
|
-
utils_functions.validate_request(
|
|
322
|
-
|
|
221
|
+
def polygon_attribute_names() -> flask.Response:
|
|
222
|
+
utils_functions.validate_request(
|
|
223
|
+
flask.request, schemas_dict["polygon_attribute_names"]
|
|
224
|
+
)
|
|
225
|
+
params = schemas.PolygonAttributeNames.from_dict(flask.request.get_json())
|
|
226
|
+
data = geode_functions.load_data(params.id)
|
|
323
227
|
polygon_attribute_names = data.polygon_attribute_manager().attribute_names()
|
|
324
228
|
return flask.make_response(
|
|
325
229
|
{
|
|
@@ -329,20 +233,16 @@ def polygon_attribute_names():
|
|
|
329
233
|
)
|
|
330
234
|
|
|
331
235
|
|
|
332
|
-
with open(
|
|
333
|
-
os.path.join(schemas, "polyhedron_attribute_names.json"),
|
|
334
|
-
"r",
|
|
335
|
-
) as file:
|
|
336
|
-
polyhedron_attribute_names_json = json.load(file)
|
|
337
|
-
|
|
338
|
-
|
|
339
236
|
@routes.route(
|
|
340
|
-
|
|
341
|
-
methods=
|
|
237
|
+
schemas_dict["polyhedron_attribute_names"]["route"],
|
|
238
|
+
methods=schemas_dict["polyhedron_attribute_names"]["methods"],
|
|
342
239
|
)
|
|
343
|
-
def polyhedron_attribute_names():
|
|
344
|
-
utils_functions.validate_request(
|
|
345
|
-
|
|
240
|
+
def polyhedron_attribute_names() -> flask.Response:
|
|
241
|
+
utils_functions.validate_request(
|
|
242
|
+
flask.request, schemas_dict["polyhedron_attribute_names"]
|
|
243
|
+
)
|
|
244
|
+
params = schemas.PolyhedronAttributeNames.from_dict(flask.request.get_json())
|
|
245
|
+
data = geode_functions.load_data(params.id)
|
|
346
246
|
polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names()
|
|
347
247
|
return flask.make_response(
|
|
348
248
|
{
|
|
@@ -352,31 +252,17 @@ def polyhedron_attribute_names():
|
|
|
352
252
|
)
|
|
353
253
|
|
|
354
254
|
|
|
355
|
-
with open(
|
|
356
|
-
os.path.join(schemas, "ping.json"),
|
|
357
|
-
"r",
|
|
358
|
-
) as file:
|
|
359
|
-
ping_json = json.load(file)
|
|
360
|
-
|
|
361
|
-
|
|
362
255
|
@routes.route(
|
|
363
|
-
|
|
364
|
-
methods=
|
|
256
|
+
schemas_dict["ping"]["route"],
|
|
257
|
+
methods=schemas_dict["ping"]["methods"],
|
|
365
258
|
)
|
|
366
|
-
def ping():
|
|
367
|
-
utils_functions.validate_request(flask.request,
|
|
259
|
+
def ping() -> flask.Response:
|
|
260
|
+
utils_functions.validate_request(flask.request, schemas_dict["ping"])
|
|
368
261
|
flask.current_app.config.update(LAST_PING_TIME=time.time())
|
|
369
262
|
return flask.make_response({"message": "Flask server is running"}, 200)
|
|
370
263
|
|
|
371
264
|
|
|
372
|
-
|
|
373
|
-
os.path.join(schemas, "kill.json"),
|
|
374
|
-
"r",
|
|
375
|
-
) as file:
|
|
376
|
-
kill_json = json.load(file)
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
@routes.route(kill_json["route"], methods=kill_json["methods"])
|
|
265
|
+
@routes.route(schemas_dict["kill"]["route"], methods=schemas_dict["kill"]["methods"])
|
|
380
266
|
def kill() -> flask.Response:
|
|
381
267
|
print("Manual server kill, shutting down...", flush=True)
|
|
382
268
|
os._exit(0)
|
|
@@ -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,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"route": "/create_aoi",
|
|
3
|
+
"methods": [
|
|
4
|
+
"POST"
|
|
5
|
+
],
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Name of the AOI"
|
|
11
|
+
},
|
|
12
|
+
"points": {
|
|
13
|
+
"type": "array",
|
|
14
|
+
"items": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": {
|
|
17
|
+
"x": {
|
|
18
|
+
"type": "number"
|
|
19
|
+
},
|
|
20
|
+
"y": {
|
|
21
|
+
"type": "number"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"required": [
|
|
25
|
+
"x",
|
|
26
|
+
"y"
|
|
27
|
+
],
|
|
28
|
+
"additionalProperties": false
|
|
29
|
+
},
|
|
30
|
+
"minItems": 4,
|
|
31
|
+
"maxItems": 4
|
|
32
|
+
},
|
|
33
|
+
"z": {
|
|
34
|
+
"type": "number"
|
|
35
|
+
},
|
|
36
|
+
"id": {
|
|
37
|
+
"type": "string"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"points",
|
|
43
|
+
"z"
|
|
44
|
+
],
|
|
45
|
+
"additionalProperties": false
|
|
46
|
+
}
|
|
@@ -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,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"route": "/create_point",
|
|
3
|
+
"methods": [
|
|
4
|
+
"POST"
|
|
5
|
+
],
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"minLength": 1
|
|
11
|
+
},
|
|
12
|
+
"x": {
|
|
13
|
+
"type": "number"
|
|
14
|
+
},
|
|
15
|
+
"y": {
|
|
16
|
+
"type": "number"
|
|
17
|
+
},
|
|
18
|
+
"z": {
|
|
19
|
+
"type": "number"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": [
|
|
23
|
+
"name",
|
|
24
|
+
"x",
|
|
25
|
+
"y",
|
|
26
|
+
"z"
|
|
27
|
+
],
|
|
28
|
+
"additionalProperties": false
|
|
29
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import json
|
|
2
1
|
import os
|
|
3
2
|
import xml.etree.ElementTree as ET
|
|
4
3
|
import flask
|
|
5
|
-
from
|
|
4
|
+
from opengeodeweb_microservice.schemas import get_schemas_dict
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
schemas = os.path.join(os.path.dirname(__file__), "schemas")
|
|
6
|
+
from opengeodeweb_back import geode_functions, utils_functions
|
|
7
|
+
from . import schemas
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
routes = flask.Blueprint("models", __name__, url_prefix="/models")
|
|
10
|
+
schemas_dict = get_schemas_dict(os.path.join(os.path.dirname(__file__), "schemas"))
|
|
14
11
|
|
|
15
12
|
|
|
16
13
|
@routes.route(
|
|
17
|
-
|
|
14
|
+
schemas_dict["vtm_component_indices"]["route"],
|
|
15
|
+
methods=schemas_dict["vtm_component_indices"]["methods"],
|
|
18
16
|
)
|
|
19
|
-
def uuid_to_flat_index():
|
|
20
|
-
utils_functions.validate_request(
|
|
21
|
-
|
|
22
|
-
vtm_file_path = geode_functions.data_file_path(
|
|
23
|
-
flask.request.get_json().get("id"), "viewable.vtm"
|
|
17
|
+
def uuid_to_flat_index() -> flask.Response:
|
|
18
|
+
utils_functions.validate_request(
|
|
19
|
+
flask.request, schemas_dict["vtm_component_indices"]
|
|
24
20
|
)
|
|
21
|
+
params = schemas.VtmComponentIndices.from_dict(flask.request.get_json())
|
|
22
|
+
vtm_file_path = geode_functions.data_file_path(params.id, "viewable.vtm")
|
|
25
23
|
tree = ET.parse(vtm_file_path)
|
|
26
24
|
root = tree.find("vtkMultiBlockDataSet")
|
|
25
|
+
if root is None:
|
|
26
|
+
raise Exception("Failed to read viewable file")
|
|
27
27
|
uuid_to_flat_index = {}
|
|
28
28
|
current_index = 0
|
|
29
29
|
for elem in root.iter():
|
|
@@ -33,22 +33,17 @@ def uuid_to_flat_index():
|
|
|
33
33
|
return flask.make_response({"uuid_to_flat_index": uuid_to_flat_index}, 200)
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
|
|
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)
|
|
37
44
|
mesh_components = model.mesh_components()
|
|
38
45
|
uuid_dict = {}
|
|
39
46
|
for mesh_component, ids in mesh_components.items():
|
|
40
47
|
component_name = mesh_component.get()
|
|
41
48
|
uuid_dict[component_name] = [id.string() for id in ids]
|
|
42
|
-
return uuid_dict
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
with open(os.path.join(schemas, "mesh_components.json"), "r") as file:
|
|
46
|
-
mesh_components_json = json.load(file)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
@routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"])
|
|
50
|
-
def extract_uuids_endpoint():
|
|
51
|
-
utils_functions.validate_request(flask.request, mesh_components_json)
|
|
52
|
-
model = geode_functions.load_data(flask.request.get_json().get("id"))
|
|
53
|
-
uuid_dict = extract_model_uuids(model)
|
|
54
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 *
|
|
@@ -16,6 +16,7 @@ import werkzeug
|
|
|
16
16
|
|
|
17
17
|
# Local application imports
|
|
18
18
|
from . import geode_functions
|
|
19
|
+
from opengeodeweb_microservice.schemas import SchemaDict
|
|
19
20
|
from opengeodeweb_microservice.database.data import Data
|
|
20
21
|
from opengeodeweb_microservice.database.connection import get_session
|
|
21
22
|
|
|
@@ -97,7 +98,7 @@ def versions(list_packages: list[str]) -> list[dict[str, str]]:
|
|
|
97
98
|
return list_with_versions
|
|
98
99
|
|
|
99
100
|
|
|
100
|
-
def validate_request(request: flask.Request, schema:
|
|
101
|
+
def validate_request(request: flask.Request, schema: SchemaDict) -> None:
|
|
101
102
|
json_data = request.get_json(force=True, silent=True)
|
|
102
103
|
|
|
103
104
|
if json_data is None:
|
|
@@ -211,6 +212,7 @@ def save_all_viewables_and_return_info(
|
|
|
211
212
|
"native_file_name": data_entry.native_file_name,
|
|
212
213
|
"viewable_file_name": data_entry.viewable_file_name,
|
|
213
214
|
"id": data_entry.id,
|
|
215
|
+
"name": data.name(), # type: ignore
|
|
214
216
|
"object_type": geode_functions.get_object_type(geode_object),
|
|
215
217
|
"binary_light_viewable": binary_light_viewable.decode("utf-8"),
|
|
216
218
|
"geode_object": data_entry.geode_object,
|
|
@@ -225,8 +227,6 @@ def generate_native_viewable_and_light_viewable_from_object(
|
|
|
225
227
|
data_entry = Data.create(
|
|
226
228
|
geode_object=geode_object,
|
|
227
229
|
viewer_object=geode_functions.get_object_type(geode_object),
|
|
228
|
-
input_file="",
|
|
229
|
-
additional_files=[],
|
|
230
230
|
)
|
|
231
231
|
data_path = create_data_folder_from_id(data_entry.id)
|
|
232
232
|
return save_all_viewables_and_return_info(geode_object, data, data_entry, data_path)
|
|
@@ -239,7 +239,6 @@ def generate_native_viewable_and_light_viewable_from_file(
|
|
|
239
239
|
geode_object=geode_object,
|
|
240
240
|
viewer_object=geode_functions.get_object_type(geode_object),
|
|
241
241
|
input_file=input_filename,
|
|
242
|
-
additional_files=[],
|
|
243
242
|
)
|
|
244
243
|
|
|
245
244
|
data_path = create_data_folder_from_id(data_entry.id)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OpenGeodeWeb-Back
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.11.1
|
|
4
4
|
Summary: OpenGeodeWeb-Back is an open source framework that proposes handy python functions and wrappers for the OpenGeode ecosystem
|
|
5
5
|
Author-email: Geode-solutions <team-web@geode-solutions.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Geode-solutions/OpenGeodeWeb-Back
|
|
@@ -16,18 +16,18 @@ Requires-Dist: blinker>=1
|
|
|
16
16
|
Requires-Dist: click>=8
|
|
17
17
|
Requires-Dist: flask[async]>=3
|
|
18
18
|
Requires-Dist: flask-cors==6.0.1
|
|
19
|
-
Requires-Dist: geode-common==33.11.
|
|
20
|
-
Requires-Dist: geode-viewables==3.3.
|
|
19
|
+
Requires-Dist: geode-common==33.11.3
|
|
20
|
+
Requires-Dist: geode-viewables==3.3.2
|
|
21
21
|
Requires-Dist: itsdangerous>=2
|
|
22
22
|
Requires-Dist: jinja2>=3
|
|
23
23
|
Requires-Dist: markupsafe>=3
|
|
24
|
-
Requires-Dist: opengeode-core==15.
|
|
25
|
-
Requires-Dist: opengeode-geosciences==9.
|
|
26
|
-
Requires-Dist: opengeode-geosciencesio==5.8.
|
|
27
|
-
Requires-Dist: opengeode-inspector==6.8.
|
|
28
|
-
Requires-Dist: opengeode-io==7.4.
|
|
24
|
+
Requires-Dist: opengeode-core==15.29.2
|
|
25
|
+
Requires-Dist: opengeode-geosciences==9.5.0
|
|
26
|
+
Requires-Dist: opengeode-geosciencesio==5.8.1
|
|
27
|
+
Requires-Dist: opengeode-inspector==6.8.2
|
|
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.6
|
|
31
31
|
Dynamic: license-file
|
|
32
32
|
|
|
33
33
|
<h1 align="center">OpenGeodeWeb-Back<sup><i>by Geode-solutions</i></sup></h1>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
opengeodeweb_back/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
opengeodeweb_back/app.py,sha256=SX7csXbWxlfeazrgSYuplJu9Z4LxupCd5T8O6bFN36g,5090
|
|
3
|
+
opengeodeweb_back/app_config.py,sha256=z-omTiGj3-y0BZ1IchAM6EoTdC7vAX6B4OymEnuM0T4,843
|
|
4
|
+
opengeodeweb_back/geode_functions.py,sha256=ot7JTJCdAIV9VIgVHElEevYJgltIySBvxt0ToMckqcU,10831
|
|
5
|
+
opengeodeweb_back/geode_objects.py,sha256=_NclGPa024kCwUHdORkFuXYtiZBmQpgq6sO3LRkBhe8,27776
|
|
6
|
+
opengeodeweb_back/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
|
7
|
+
opengeodeweb_back/test_utils.py,sha256=18AbRW9-tfKkPcmRGilTTHXI7S3armYyV7Vdy5UvUKM,794
|
|
8
|
+
opengeodeweb_back/utils_functions.py,sha256=lpsjkI1nN26t4yXPUHXTtYfjFZipHBLyqMgZD9Vy528,9348
|
|
9
|
+
opengeodeweb_back/routes/blueprint_routes.py,sha256=ZnngJ-nm2a2ByzN1gC0dcf7CBhzCrerNIqKx1PH5ySo,9471
|
|
10
|
+
opengeodeweb_back/routes/create/blueprint_create.py,sha256=QPqNW8pm5XdMdXODubMPt5v_fJ3g5yKhyanyMdBaFwo,2626
|
|
11
|
+
opengeodeweb_back/routes/create/schemas/__init__.py,sha256=4IibXXKIb2Z0miuAuAbooCq3ALeVwl0Ogg0DuJe3uqo,54
|
|
12
|
+
opengeodeweb_back/routes/create/schemas/create_aoi.json,sha256=bFL5ZqhKAKsBmGwIQANzdIp1vGeH5WAHnRpZYsUZ1tQ,999
|
|
13
|
+
opengeodeweb_back/routes/create/schemas/create_aoi.py,sha256=cAquXr36qscsBJIZVstnh6MYNhbAAw-5hIT8cWC4DGw,345
|
|
14
|
+
opengeodeweb_back/routes/create/schemas/create_point.json,sha256=ddfDzWKj4cMYhF6oJzvRh0bpTiQo1hqLFODK-vJjxHQ,484
|
|
15
|
+
opengeodeweb_back/routes/create/schemas/create_point.py,sha256=WOBtyhRYd_QDtmQLOyQANoZxw7lx-271oL6RHn93Bus,187
|
|
16
|
+
opengeodeweb_back/routes/models/blueprint_models.py,sha256=nSI-yorSfj3SCQbKNnz8AQglKDKFC21Es-VlFdU2C6A,1935
|
|
17
|
+
opengeodeweb_back/routes/models/schemas/__init__.py,sha256=kNhYSdP7ti6BEalSO3fNfJJf_S7u0kEQDFRdBTDVNQY,68
|
|
18
|
+
opengeodeweb_back/routes/models/schemas/mesh_components.json,sha256=JmQUvpy7HpGS6FlThZLx1YjHqiInRTqUZ_Ft5MfOzEE,239
|
|
19
|
+
opengeodeweb_back/routes/models/schemas/mesh_components.py,sha256=qjbOb4yvIOTyzZ9GMufYs2b_jbU-Vh6F-cAPA8UMatk,149
|
|
20
|
+
opengeodeweb_back/routes/models/schemas/vtm_component_indices.json,sha256=0XILVxhAxi0RhQFDZZoUeGcAnBMroWz3kNJS7-6_dKQ,239
|
|
21
|
+
opengeodeweb_back/routes/models/schemas/vtm_component_indices.py,sha256=ky2OptukQp9ioMOgoQkXW_EWy5WAsY9aGXuMMT4BLZg,154
|
|
22
|
+
opengeodeweb_back/routes/schemas/__init__.py,sha256=dj4cevHiakkiHR4bynqd4Mo75gwmBQwhfucVj6WdEL8,468
|
|
23
|
+
opengeodeweb_back/routes/schemas/allowed_files.json,sha256=pRsGf39LiJpl3zEGLg4IqvRtm7iUx3Wq4Tb4tSFXGV0,234
|
|
24
|
+
opengeodeweb_back/routes/schemas/allowed_files.py,sha256=tDOH58oBeTeeIS4CqHjgMd7TgSEIFXKtYElIuTEhSIA,207
|
|
25
|
+
opengeodeweb_back/routes/schemas/allowed_objects.json,sha256=oy_YYpFzgDICx-keWqNIUpQM3zzB4eE3H6mPNxH9rWc,361
|
|
26
|
+
opengeodeweb_back/routes/schemas/allowed_objects.py,sha256=Ov82leuMXKUCIJvvxO_Ms3Tf9tqsU1yJGIv4mBwG9QE,227
|
|
27
|
+
opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json,sha256=tp83tPQaxTltQrdL8D3TnG8pqY_2fgAaYVeTWPXO0qI,371
|
|
28
|
+
opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py,sha256=RFdr-thObKND33WJ7JI7JkBkozJ4C8aKO8ZlofeCJs4,200
|
|
29
|
+
opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json,sha256=lnPqevRRlUASF4ObmpG8ChH3c2LHNB99Si292S3OsLU,279
|
|
30
|
+
opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py,sha256=FLh9V1zK8ICttpEjnNO-5ND_b0FOp7WbjUue5ohnNEI,178
|
|
31
|
+
opengeodeweb_back/routes/schemas/inspect_file.json,sha256=WoFF2hgZCUfqSDFJRq1sLpivjCQ6TCvSHPH8pKFY6KM,348
|
|
32
|
+
opengeodeweb_back/routes/schemas/inspect_file.py,sha256=hU0HWhypidcLuOZFAs1jffEKxxZ5V-4YR4DuBQRuxgs,180
|
|
33
|
+
opengeodeweb_back/routes/schemas/kill.json,sha256=tZEv4TuTNNthet2MsxUPLV3ivW6tIGjYTfxd6Jl9zaM,144
|
|
34
|
+
opengeodeweb_back/routes/schemas/kill.py,sha256=H1Vgo6wN-TITi889SCijzw_JScwSZcVq81_UfvQyIwQ,136
|
|
35
|
+
opengeodeweb_back/routes/schemas/missing_files.json,sha256=eOBAkiphA-2xG6e-OAy7wcJK2FeY0YFYXJlLdr8SNSc,349
|
|
36
|
+
opengeodeweb_back/routes/schemas/missing_files.py,sha256=YZY9ONvd3OrEZA8ac68xLdualtzLMbukAhMaNCtzr9A,181
|
|
37
|
+
opengeodeweb_back/routes/schemas/ping.json,sha256=MhI5jtrjMsAsfIKEzdY8p1HyV9xv4O3hYfESWw6tkyE,162
|
|
38
|
+
opengeodeweb_back/routes/schemas/ping.py,sha256=J34dAqLmHdMKw-slfrrQD3Jh57XB-i6L_NrTfNy-KpI,136
|
|
39
|
+
opengeodeweb_back/routes/schemas/polygon_attribute_names.json,sha256=1BrpfjcbRL1ZOL4azHIHirqXIc8tpu4xGnMRFEMEshU,241
|
|
40
|
+
opengeodeweb_back/routes/schemas/polygon_attribute_names.py,sha256=e9CjlQ-kEj5Ilbm0xMdLVxONHBcDJi65IlkGhV48xSg,156
|
|
41
|
+
opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json,sha256=Tt6fWBGOWgxOVC-n76_JbOQcZ-Ss-foPghMrQOY-DIE,244
|
|
42
|
+
opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py,sha256=kKRdCTuse75leBA1WomAsl_3iC9kbaS4L-a9n2YfH-c,159
|
|
43
|
+
opengeodeweb_back/routes/schemas/save_viewable_file.json,sha256=pvvEdaC7bNASPMrl3bXzlcA5blgflK0EYp2hBDf74qY,424
|
|
44
|
+
opengeodeweb_back/routes/schemas/save_viewable_file.py,sha256=5KTdx7bPEHXWPFxrUSxe9MsM0NU0o9v3k4ZZMdl3b8I,185
|
|
45
|
+
opengeodeweb_back/routes/schemas/texture_coordinates.json,sha256=2uQueIl1jOmxFG_gIi_vJETR4IurrwuSf8GAnzphk9g,237
|
|
46
|
+
opengeodeweb_back/routes/schemas/texture_coordinates.py,sha256=OdN-yTmPzxU510Ll5ZNm_ebYzAgC8NsQBfBu-qlnaY0,153
|
|
47
|
+
opengeodeweb_back/routes/schemas/upload_file.json,sha256=LJ3U3L5ApKuQDVFIpVT_y2alq4HW_suTvZ3HUucNbhg,219
|
|
48
|
+
opengeodeweb_back/routes/schemas/upload_file.py,sha256=lCgK21UiXYk0BSNsW8BZil9O67gobwie6YdT1ahYuhs,196
|
|
49
|
+
opengeodeweb_back/routes/schemas/vertex_attribute_names.json,sha256=ECIflohiqPZNsflAdkfEzksL4we0JvZhIxUd84Ubctg,240
|
|
50
|
+
opengeodeweb_back/routes/schemas/vertex_attribute_names.py,sha256=aOVLsOuAxxzm-0B04wKZ-mCwoLv8uKGTB6sbuBNlX7g,155
|
|
51
|
+
opengeodeweb_back-5.11.1.dist-info/licenses/LICENSE,sha256=LoTB-aqQvzTGxoTRXNnhNV0LKiqdk2bQv6MB34l8zkI,1079
|
|
52
|
+
opengeodeweb_back-5.11.1.dist-info/METADATA,sha256=EliJm0J-uDYvgS5xafr06aW2bPv5oZ8gkAYuPg9AJeU,2662
|
|
53
|
+
opengeodeweb_back-5.11.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
54
|
+
opengeodeweb_back-5.11.1.dist-info/entry_points.txt,sha256=3W_t5GFc9ROHSIZ55IGvYU3DLHUFQmYOM4Bm9u3Z0cE,71
|
|
55
|
+
opengeodeweb_back-5.11.1.dist-info/top_level.txt,sha256=tN1FZeLIVBrdja2-pbmhg5-tK-JILmmT9OeIBnhlUrQ,18
|
|
56
|
+
opengeodeweb_back-5.11.1.dist-info/RECORD,,
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"route": "/create_point",
|
|
3
|
-
"methods": [
|
|
4
|
-
"POST"
|
|
5
|
-
],
|
|
6
|
-
"type": "object",
|
|
7
|
-
"properties": {
|
|
8
|
-
"title": {
|
|
9
|
-
"type": "string",
|
|
10
|
-
"minLength": 1
|
|
11
|
-
},
|
|
12
|
-
"x": {
|
|
13
|
-
"type": "number"
|
|
14
|
-
},
|
|
15
|
-
"y": {
|
|
16
|
-
"type": "number"
|
|
17
|
-
},
|
|
18
|
-
"z": {
|
|
19
|
-
"type": "number"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"required": [
|
|
23
|
-
"title",
|
|
24
|
-
"x",
|
|
25
|
-
"y",
|
|
26
|
-
"z"
|
|
27
|
-
],
|
|
28
|
-
"additionalProperties": false
|
|
29
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
opengeodeweb_back/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
opengeodeweb_back/app.py,sha256=_ws9UCqbR-_Hd4kE-Xh7FaGSulVRd7Au3KbOM3GUQ8I,4766
|
|
3
|
-
opengeodeweb_back/app_config.py,sha256=z-omTiGj3-y0BZ1IchAM6EoTdC7vAX6B4OymEnuM0T4,843
|
|
4
|
-
opengeodeweb_back/geode_functions.py,sha256=NzELy9s6AETDnm7tyA_uM2N89zrfeLdblRhzYrBONmw,10804
|
|
5
|
-
opengeodeweb_back/geode_objects.py,sha256=_NclGPa024kCwUHdORkFuXYtiZBmQpgq6sO3LRkBhe8,27776
|
|
6
|
-
opengeodeweb_back/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
|
7
|
-
opengeodeweb_back/test_utils.py,sha256=18AbRW9-tfKkPcmRGilTTHXI7S3armYyV7Vdy5UvUKM,794
|
|
8
|
-
opengeodeweb_back/utils_functions.py,sha256=tHU6VjyW-QwohDihdcoVSiD2TdGLeB0EtBjCorvVb8I,9327
|
|
9
|
-
opengeodeweb_back/routes/blueprint_routes.py,sha256=eTEKwKt9qc6cH1MDQ3lwmcnzLLxU_W8cYwu8HcUbXxo,10998
|
|
10
|
-
opengeodeweb_back/routes/models/blueprint_models.py,sha256=Jo9pUDeu1nO3_IbBiuHGk57cc4_fhwxjM0EKNyv1FT0,1874
|
|
11
|
-
opengeodeweb_back/routes/models/schemas/mesh_components.json,sha256=JmQUvpy7HpGS6FlThZLx1YjHqiInRTqUZ_Ft5MfOzEE,239
|
|
12
|
-
opengeodeweb_back/routes/models/schemas/vtm_component_indices.json,sha256=0XILVxhAxi0RhQFDZZoUeGcAnBMroWz3kNJS7-6_dKQ,239
|
|
13
|
-
opengeodeweb_back/routes/schemas/allowed_files.json,sha256=pRsGf39LiJpl3zEGLg4IqvRtm7iUx3Wq4Tb4tSFXGV0,234
|
|
14
|
-
opengeodeweb_back/routes/schemas/allowed_objects.json,sha256=oy_YYpFzgDICx-keWqNIUpQM3zzB4eE3H6mPNxH9rWc,361
|
|
15
|
-
opengeodeweb_back/routes/schemas/create_point.json,sha256=XjmXLMkr4jgWYHUKSwAhsxz1oLDZi8r8J0SY-QuEvks,386
|
|
16
|
-
opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json,sha256=tp83tPQaxTltQrdL8D3TnG8pqY_2fgAaYVeTWPXO0qI,371
|
|
17
|
-
opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json,sha256=lnPqevRRlUASF4ObmpG8ChH3c2LHNB99Si292S3OsLU,279
|
|
18
|
-
opengeodeweb_back/routes/schemas/inspect_file.json,sha256=WoFF2hgZCUfqSDFJRq1sLpivjCQ6TCvSHPH8pKFY6KM,348
|
|
19
|
-
opengeodeweb_back/routes/schemas/kill.json,sha256=tZEv4TuTNNthet2MsxUPLV3ivW6tIGjYTfxd6Jl9zaM,144
|
|
20
|
-
opengeodeweb_back/routes/schemas/missing_files.json,sha256=eOBAkiphA-2xG6e-OAy7wcJK2FeY0YFYXJlLdr8SNSc,349
|
|
21
|
-
opengeodeweb_back/routes/schemas/ping.json,sha256=MhI5jtrjMsAsfIKEzdY8p1HyV9xv4O3hYfESWw6tkyE,162
|
|
22
|
-
opengeodeweb_back/routes/schemas/polygon_attribute_names.json,sha256=1BrpfjcbRL1ZOL4azHIHirqXIc8tpu4xGnMRFEMEshU,241
|
|
23
|
-
opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json,sha256=Tt6fWBGOWgxOVC-n76_JbOQcZ-Ss-foPghMrQOY-DIE,244
|
|
24
|
-
opengeodeweb_back/routes/schemas/save_viewable_file.json,sha256=pvvEdaC7bNASPMrl3bXzlcA5blgflK0EYp2hBDf74qY,424
|
|
25
|
-
opengeodeweb_back/routes/schemas/texture_coordinates.json,sha256=2uQueIl1jOmxFG_gIi_vJETR4IurrwuSf8GAnzphk9g,237
|
|
26
|
-
opengeodeweb_back/routes/schemas/upload_file.json,sha256=LJ3U3L5ApKuQDVFIpVT_y2alq4HW_suTvZ3HUucNbhg,219
|
|
27
|
-
opengeodeweb_back/routes/schemas/vertex_attribute_names.json,sha256=ECIflohiqPZNsflAdkfEzksL4we0JvZhIxUd84Ubctg,240
|
|
28
|
-
opengeodeweb_back-5.10.5.dist-info/licenses/LICENSE,sha256=LoTB-aqQvzTGxoTRXNnhNV0LKiqdk2bQv6MB34l8zkI,1079
|
|
29
|
-
opengeodeweb_back-5.10.5.dist-info/METADATA,sha256=witM1SWUd0fK7VL60vA4ocXSlEgY7isCPTwurQf_X8Q,2665
|
|
30
|
-
opengeodeweb_back-5.10.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
31
|
-
opengeodeweb_back-5.10.5.dist-info/entry_points.txt,sha256=3W_t5GFc9ROHSIZ55IGvYU3DLHUFQmYOM4Bm9u3Z0cE,71
|
|
32
|
-
opengeodeweb_back-5.10.5.dist-info/top_level.txt,sha256=tN1FZeLIVBrdja2-pbmhg5-tK-JILmmT9OeIBnhlUrQ,18
|
|
33
|
-
opengeodeweb_back-5.10.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|