OpenGeodeWeb-Back 5.8.3__tar.gz → 5.8.4__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.
- {opengeodeweb_back-5.8.3/src/OpenGeodeWeb_Back.egg-info → opengeodeweb_back-5.8.4}/PKG-INFO +2 -3
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/pyproject.toml +1 -1
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/requirements.txt +3 -5
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4/src/OpenGeodeWeb_Back.egg-info}/PKG-INFO +2 -3
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/requires.txt +1 -2
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/blueprint_routes.py +7 -71
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/test_utils.py +4 -5
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/utils_functions.py +54 -5
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/LICENSE +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/README.md +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/setup.cfg +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/dependency_links.txt +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/top_level.txt +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/__init__.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/app_config.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/geode_functions.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/geode_objects.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/models/blueprint_models.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/models/schemas/mesh_components.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/models/schemas/vtm_component_indices.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/allowed_files.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/allowed_objects.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/create_point.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/inspect_file.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/missing_files.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/ping.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/polygon_attribute_names.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/save_viewable_file.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/texture_coordinates.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/upload_file.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/vertex_attribute_names.json +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/tests/test_geode_functions.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/tests/test_models_routes.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/tests/test_routes.py +0 -0
- {opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/tests/test_utils_functions.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: OpenGeodeWeb-Back
|
3
|
-
Version: 5.8.
|
3
|
+
Version: 5.8.4
|
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
|
@@ -15,6 +15,7 @@ Requires-Dist: asgiref==3.8.1
|
|
15
15
|
Requires-Dist: attrs==25.3.0
|
16
16
|
Requires-Dist: blinker==1.9.0
|
17
17
|
Requires-Dist: click==8.2.1
|
18
|
+
Requires-Dist: fastjsonschema==2.21.1
|
18
19
|
Requires-Dist: flask[async]==3.1.1
|
19
20
|
Requires-Dist: flask-cors==6.0.1
|
20
21
|
Requires-Dist: geode-background==9.2.9
|
@@ -27,8 +28,6 @@ Requires-Dist: geode-simplex==9.4.2
|
|
27
28
|
Requires-Dist: geode-viewables==3.1.4
|
28
29
|
Requires-Dist: itsdangerous==2.2.0
|
29
30
|
Requires-Dist: jinja2==3.1.6
|
30
|
-
Requires-Dist: jsonschema==4.24.0
|
31
|
-
Requires-Dist: jsonschema-specifications==2025.4.1
|
32
31
|
Requires-Dist: markupsafe==3.0.2
|
33
32
|
Requires-Dist: opengeode-core==15.21.2
|
34
33
|
Requires-Dist: opengeode-geosciences==9.0.0
|
@@ -14,6 +14,8 @@ blinker==1.9.0
|
|
14
14
|
# via flask
|
15
15
|
click==8.2.1
|
16
16
|
# via flask
|
17
|
+
fastjsonschema==2.21.1
|
18
|
+
# via -r requirements.in
|
17
19
|
flask[async]==3.1.1
|
18
20
|
# via
|
19
21
|
# -r requirements.in
|
@@ -60,10 +62,6 @@ itsdangerous==2.2.0
|
|
60
62
|
# via flask
|
61
63
|
jinja2==3.1.6
|
62
64
|
# via flask
|
63
|
-
jsonschema==4.24.0
|
64
|
-
# via -r requirements.in
|
65
|
-
jsonschema-specifications==2025.4.1
|
66
|
-
# via jsonschema
|
67
65
|
markupsafe==3.0.2
|
68
66
|
# via
|
69
67
|
# flask
|
@@ -120,4 +118,4 @@ werkzeug==3.1.3
|
|
120
118
|
# via
|
121
119
|
# -r requirements.in
|
122
120
|
# flask
|
123
|
-
# flask-cors
|
121
|
+
# flask-cors
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: OpenGeodeWeb-Back
|
3
|
-
Version: 5.8.
|
3
|
+
Version: 5.8.4
|
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
|
@@ -15,6 +15,7 @@ Requires-Dist: asgiref==3.8.1
|
|
15
15
|
Requires-Dist: attrs==25.3.0
|
16
16
|
Requires-Dist: blinker==1.9.0
|
17
17
|
Requires-Dist: click==8.2.1
|
18
|
+
Requires-Dist: fastjsonschema==2.21.1
|
18
19
|
Requires-Dist: flask[async]==3.1.1
|
19
20
|
Requires-Dist: flask-cors==6.0.1
|
20
21
|
Requires-Dist: geode-background==9.2.9
|
@@ -27,8 +28,6 @@ Requires-Dist: geode-simplex==9.4.2
|
|
27
28
|
Requires-Dist: geode-viewables==3.1.4
|
28
29
|
Requires-Dist: itsdangerous==2.2.0
|
29
30
|
Requires-Dist: jinja2==3.1.6
|
30
|
-
Requires-Dist: jsonschema==4.24.0
|
31
|
-
Requires-Dist: jsonschema-specifications==2025.4.1
|
32
31
|
Requires-Dist: markupsafe==3.0.2
|
33
32
|
Requires-Dist: opengeode-core==15.21.2
|
34
33
|
Requires-Dist: opengeode-geosciences==9.0.0
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/requires.txt
RENAMED
@@ -2,6 +2,7 @@ asgiref==3.8.1
|
|
2
2
|
attrs==25.3.0
|
3
3
|
blinker==1.9.0
|
4
4
|
click==8.2.1
|
5
|
+
fastjsonschema==2.21.1
|
5
6
|
flask[async]==3.1.1
|
6
7
|
flask-cors==6.0.1
|
7
8
|
geode-background==9.2.9
|
@@ -14,8 +15,6 @@ geode-simplex==9.4.2
|
|
14
15
|
geode-viewables==3.1.4
|
15
16
|
itsdangerous==2.2.0
|
16
17
|
jinja2==3.1.6
|
17
|
-
jsonschema==4.24.0
|
18
|
-
jsonschema-specifications==2025.4.1
|
19
18
|
markupsafe==3.0.2
|
20
19
|
opengeode-core==15.21.2
|
21
20
|
opengeode-geosciences==9.0.0
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/blueprint_routes.py
RENAMED
@@ -241,61 +241,16 @@ with open(
|
|
241
241
|
methods=save_viewable_file_json["methods"],
|
242
242
|
)
|
243
243
|
def save_viewable_file():
|
244
|
+
utils_functions.validate_request(flask.request, save_viewable_file_json)
|
244
245
|
UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
|
245
246
|
DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
|
246
|
-
utils_functions.validate_request(flask.request, save_viewable_file_json)
|
247
|
-
|
248
247
|
secure_filename = werkzeug.utils.secure_filename(flask.request.json["filename"])
|
249
248
|
file_path = os.path.abspath(os.path.join(UPLOAD_FOLDER, secure_filename))
|
250
249
|
data = geode_functions.load(flask.request.json["input_geode_object"], file_path)
|
251
|
-
|
252
|
-
|
253
|
-
name = data.name()
|
254
|
-
native_extension = data.native_extension()
|
255
|
-
|
256
|
-
absolute_native_file_path = os.path.join(
|
257
|
-
UPLOAD_FOLDER, generated_id + "." + native_extension
|
258
|
-
)
|
259
|
-
|
260
|
-
saved_viewable_file_path = geode_functions.save_viewable(
|
261
|
-
flask.request.json["input_geode_object"], data, DATA_FOLDER_PATH, generated_id
|
262
|
-
)
|
263
|
-
|
264
|
-
saved_light_viewable_file_path = geode_functions.save_light_viewable(
|
265
|
-
flask.request.json["input_geode_object"],
|
266
|
-
data,
|
267
|
-
DATA_FOLDER_PATH,
|
268
|
-
"light_" + generated_id,
|
269
|
-
)
|
270
|
-
|
271
|
-
f = open(saved_light_viewable_file_path, "rb")
|
272
|
-
binary_light_viewable = f.read()
|
273
|
-
f.close()
|
274
|
-
|
275
|
-
geode_functions.save(
|
276
|
-
flask.request.json["input_geode_object"],
|
277
|
-
data,
|
278
|
-
DATA_FOLDER_PATH,
|
279
|
-
generated_id + "." + native_extension,
|
280
|
-
)
|
281
|
-
os.remove(os.path.join(UPLOAD_FOLDER, secure_filename))
|
282
|
-
object_type = geode_functions.get_object_type(
|
283
|
-
flask.request.json["input_geode_object"]
|
284
|
-
)
|
285
|
-
|
286
|
-
native_file_name = os.path.basename(absolute_native_file_path)
|
287
|
-
viewable_file_name = os.path.basename(saved_viewable_file_path)
|
288
|
-
return flask.make_response(
|
289
|
-
{
|
290
|
-
"name": name,
|
291
|
-
"native_file_name": native_file_name,
|
292
|
-
"viewable_file_name": viewable_file_name,
|
293
|
-
"id": generated_id,
|
294
|
-
"object_type": object_type,
|
295
|
-
"binary_light_viewable": str(binary_light_viewable, "utf-8"),
|
296
|
-
},
|
297
|
-
200,
|
250
|
+
response_data = utils_functions.create_response_with_binary_light_viewable(
|
251
|
+
flask.request.json["input_geode_object"], data, DATA_FOLDER_PATH
|
298
252
|
)
|
253
|
+
return flask.jsonify(response_data), 200
|
299
254
|
|
300
255
|
|
301
256
|
with open(os.path.join(schemas, "create_point.json"), "r") as file:
|
@@ -315,29 +270,10 @@ def create_point():
|
|
315
270
|
builder = geode_functions.create_builder("PointSet3D", PointSet3D)
|
316
271
|
builder.create_point(opengeode.Point3D([x, y, z]))
|
317
272
|
builder.set_name(title)
|
318
|
-
name = PointSet3D.name()
|
319
|
-
generated_id = str(uuid.uuid4()).replace("-", "")
|
320
|
-
object_type = geode_functions.get_object_type("PointSet3D")
|
321
|
-
saved_native_file_path = geode_functions.save(
|
322
|
-
"PointSet3D", PointSet3D, DATA_FOLDER_PATH, generated_id + ".og_pts3d"
|
323
|
-
)
|
324
|
-
saved_viewable_file_path = geode_functions.save_viewable(
|
325
|
-
"PointSet3D", PointSet3D, DATA_FOLDER_PATH, generated_id
|
326
|
-
)
|
327
|
-
|
328
|
-
native_file_name = os.path.basename(saved_native_file_path[0])
|
329
|
-
viewable_file_name = os.path.basename(saved_viewable_file_path)
|
330
|
-
|
331
273
|
return flask.make_response(
|
332
|
-
|
333
|
-
"
|
334
|
-
|
335
|
-
"name": name,
|
336
|
-
"native_file_name": native_file_name,
|
337
|
-
"viewable_file_name": viewable_file_name,
|
338
|
-
"object_type": object_type,
|
339
|
-
"geode_object": "PointSet3D",
|
340
|
-
},
|
274
|
+
utils_functions.create_response_with_binary_light_viewable(
|
275
|
+
"PointSet3D", PointSet3D, DATA_FOLDER_PATH
|
276
|
+
),
|
341
277
|
200,
|
342
278
|
)
|
343
279
|
|
@@ -12,14 +12,13 @@ def test_route_wrong_params(client, route, get_full_data):
|
|
12
12
|
response = client.post(route, json=json)
|
13
13
|
assert response.status_code == 400
|
14
14
|
error_description = response.json["description"]
|
15
|
-
assert
|
15
|
+
assert "data must contain" in error_description
|
16
|
+
assert f"'{key}'" in error_description
|
16
17
|
|
17
18
|
json = get_full_data()
|
18
19
|
json["dumb_key"] = "dumb_value"
|
19
20
|
response = client.post(route, json=json)
|
20
21
|
assert response.status_code == 400
|
21
22
|
error_description = response.json["description"]
|
22
|
-
assert
|
23
|
-
|
24
|
-
== "Validation error: Additional properties are not allowed ('dumb_key' was unexpected)"
|
25
|
-
)
|
23
|
+
assert "data must not contain" in error_description
|
24
|
+
assert "'dumb_key'" in error_description
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/utils_functions.py
RENAMED
@@ -2,15 +2,16 @@
|
|
2
2
|
import os
|
3
3
|
import threading
|
4
4
|
import time
|
5
|
+
import uuid
|
5
6
|
import zipfile
|
6
7
|
|
7
8
|
# Third party imports
|
8
9
|
import flask
|
9
|
-
|
10
|
-
from jsonschema.exceptions import ValidationError
|
10
|
+
import fastjsonschema
|
11
11
|
import importlib.metadata as metadata
|
12
12
|
|
13
13
|
# Local application imports
|
14
|
+
from . import geode_functions
|
14
15
|
|
15
16
|
|
16
17
|
def increment_request_counter(current_app):
|
@@ -82,9 +83,11 @@ def validate_request(request, schema):
|
|
82
83
|
json_data = {}
|
83
84
|
|
84
85
|
try:
|
85
|
-
validate
|
86
|
-
|
87
|
-
|
86
|
+
validate = fastjsonschema.compile(schema)
|
87
|
+
validate(json_data)
|
88
|
+
except fastjsonschema.JsonSchemaException as e:
|
89
|
+
error_msg = str(e)
|
90
|
+
flask.abort(400, error_msg)
|
88
91
|
|
89
92
|
|
90
93
|
def set_interval(func, sec, args=None):
|
@@ -138,3 +141,49 @@ def handle_exception(e):
|
|
138
141
|
)
|
139
142
|
response.content_type = "application/json"
|
140
143
|
return response
|
144
|
+
|
145
|
+
|
146
|
+
def save_native_viewable_binary_file_names(geode_object, data, folder_absolute_path):
|
147
|
+
generated_id = str(uuid.uuid4()).replace("-", "")
|
148
|
+
saved_native_file_path = geode_functions.save(
|
149
|
+
geode_object,
|
150
|
+
data,
|
151
|
+
folder_absolute_path,
|
152
|
+
generated_id + "." + data.native_extension(),
|
153
|
+
)
|
154
|
+
saved_viewable_file_path = geode_functions.save_viewable(
|
155
|
+
geode_object, data, folder_absolute_path, generated_id
|
156
|
+
)
|
157
|
+
saved_light_viewable_file_path = geode_functions.save_light_viewable(
|
158
|
+
geode_object, data, folder_absolute_path, "light_" + generated_id
|
159
|
+
)
|
160
|
+
f = open(saved_light_viewable_file_path, "rb")
|
161
|
+
binary_light_viewable = f.read()
|
162
|
+
f.close()
|
163
|
+
return {
|
164
|
+
"native_file_name": os.path.basename(saved_native_file_path[0]),
|
165
|
+
"viewable_file_name": os.path.basename(saved_viewable_file_path[0]),
|
166
|
+
"binary_light_viewable": str(binary_light_viewable, "utf-8"),
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
def create_response_with_binary_light_viewable(
|
171
|
+
geode_object, data, folder_absolute_path
|
172
|
+
):
|
173
|
+
generated_id = str(uuid.uuid4()).replace("-", "")
|
174
|
+
name = data.name()
|
175
|
+
object_type = geode_functions.get_object_type(geode_object)
|
176
|
+
|
177
|
+
native_file_name, viewable_file_name, binary_light_viewable = (
|
178
|
+
save_native_viewable_binary_file_names(geode_object, data, folder_absolute_path)
|
179
|
+
)
|
180
|
+
|
181
|
+
return {
|
182
|
+
"name": name,
|
183
|
+
"native_file_name": native_file_name,
|
184
|
+
"viewable_file_name": viewable_file_name,
|
185
|
+
"id": generated_id,
|
186
|
+
"object_type": object_type,
|
187
|
+
"binary_light_viewable": binary_light_viewable,
|
188
|
+
"geode_object": geode_object,
|
189
|
+
}
|
File without changes
|
File without changes
|
File without changes
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/SOURCES.txt
RENAMED
File without changes
|
File without changes
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/OpenGeodeWeb_Back.egg-info/top_level.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/geode_functions.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{opengeodeweb_back-5.8.3 → opengeodeweb_back-5.8.4}/src/opengeodeweb_back/routes/schemas/ping.json
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|