OpenGeodeWeb-Back 5.10.5rc1__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.

Files changed (37) hide show
  1. opengeodeweb_back/app.py +11 -10
  2. opengeodeweb_back/geode_functions.py +2 -2
  3. opengeodeweb_back/routes/blueprint_routes.py +92 -206
  4. opengeodeweb_back/routes/create/blueprint_create.py +71 -0
  5. opengeodeweb_back/routes/create/schemas/__init__.py +2 -0
  6. opengeodeweb_back/routes/create/schemas/create_aoi.json +46 -0
  7. opengeodeweb_back/routes/create/schemas/create_aoi.py +19 -0
  8. opengeodeweb_back/routes/create/schemas/create_point.json +29 -0
  9. opengeodeweb_back/routes/create/schemas/create_point.py +10 -0
  10. opengeodeweb_back/routes/models/blueprint_models.py +22 -27
  11. opengeodeweb_back/routes/models/schemas/__init__.py +2 -0
  12. opengeodeweb_back/routes/models/schemas/mesh_components.py +7 -0
  13. opengeodeweb_back/routes/models/schemas/vtm_component_indices.py +7 -0
  14. opengeodeweb_back/routes/schemas/__init__.py +14 -0
  15. opengeodeweb_back/routes/schemas/allowed_files.py +8 -0
  16. opengeodeweb_back/routes/schemas/allowed_objects.py +9 -0
  17. opengeodeweb_back/routes/schemas/geode_objects_and_output_extensions.py +8 -0
  18. opengeodeweb_back/routes/schemas/geographic_coordinate_systems.py +7 -0
  19. opengeodeweb_back/routes/schemas/inspect_file.py +8 -0
  20. opengeodeweb_back/routes/schemas/kill.py +7 -0
  21. opengeodeweb_back/routes/schemas/missing_files.py +8 -0
  22. opengeodeweb_back/routes/schemas/ping.py +7 -0
  23. opengeodeweb_back/routes/schemas/polygon_attribute_names.py +7 -0
  24. opengeodeweb_back/routes/schemas/polyhedron_attribute_names.py +7 -0
  25. opengeodeweb_back/routes/schemas/save_viewable_file.py +8 -0
  26. opengeodeweb_back/routes/schemas/texture_coordinates.py +7 -0
  27. opengeodeweb_back/routes/schemas/upload_file.py +8 -0
  28. opengeodeweb_back/routes/schemas/vertex_attribute_names.py +7 -0
  29. opengeodeweb_back/utils_functions.py +3 -4
  30. {opengeodeweb_back-5.10.5rc1.dist-info → opengeodeweb_back-5.11.1.dist-info}/METADATA +9 -9
  31. opengeodeweb_back-5.11.1.dist-info/RECORD +56 -0
  32. opengeodeweb_back/routes/schemas/create_point.json +0 -29
  33. opengeodeweb_back-5.10.5rc1.dist-info/RECORD +0 -33
  34. {opengeodeweb_back-5.10.5rc1.dist-info → opengeodeweb_back-5.11.1.dist-info}/WHEEL +0 -0
  35. {opengeodeweb_back-5.10.5rc1.dist-info → opengeodeweb_back-5.11.1.dist-info}/entry_points.txt +0 -0
  36. {opengeodeweb_back-5.10.5rc1.dist-info → opengeodeweb_back-5.11.1.dist-info}/licenses/LICENSE +0 -0
  37. {opengeodeweb_back-5.10.5rc1.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 .. import geode_functions, utils_functions
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
- allowed_files_json["route"],
37
- methods=allowed_files_json["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, allowed_files_json)
41
- extensions = geode_functions.list_input_extensions(
42
- flask.request.get_json()["supported_feature"]
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
- upload_file_json["route"],
56
- methods=upload_file_json["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
- allowed_objects_json["route"],
80
- methods=allowed_objects_json["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, allowed_objects_json)
87
- file_absolute_path = geode_functions.upload_file_path(
88
- flask.request.get_json()["filename"]
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, flask.request.get_json()["supported_feature"]
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
- missing_files_json["route"],
105
- methods=missing_files_json["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, missing_files_json)
109
- file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"])
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
- flask.request.get_json()["input_geode_object"],
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
- geographic_coordinate_systems_json["route"],
151
- methods=geographic_coordinate_systems_json["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(flask.request, geographic_coordinate_systems_json)
155
- infos = geode_functions.geographic_coordinate_systems(
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
- inspect_file_json["route"],
178
- methods=inspect_file_json["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, inspect_file_json)
182
-
183
- file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"])
184
- data = geode_functions.load(
185
- flask.request.get_json()["input_geode_object"], file_path
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
- geode_objects_and_output_extensions_json["route"],
203
- methods=geode_objects_and_output_extensions_json["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, geode_objects_and_output_extensions_json
153
+ flask.request, schemas_dict["geode_objects_and_output_extensions"]
208
154
  )
209
- file_path = geode_functions.upload_file_path(flask.request.get_json()["filename"])
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
- flask.request.get_json()["input_geode_object"],
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
- save_viewable_file_json["route"],
234
- methods=save_viewable_file_json["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, save_viewable_file_json)
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=flask.request.get_json()["input_geode_object"],
241
- input_filename=flask.request.get_json()["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
- texture_coordinates_json["route"],
277
- methods=texture_coordinates_json["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, texture_coordinates_json)
281
- data = geode_functions.load_data(flask.request.get_json().get("id"))
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
- vertex_attribute_names_json["route"],
295
- methods=vertex_attribute_names_json["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(flask.request, vertex_attribute_names_json)
299
- data = geode_functions.load_data(flask.request.get_json().get("id"))
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
- polygon_attribute_names_json["route"],
318
- methods=polygon_attribute_names_json["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(flask.request, polygon_attribute_names_json)
322
- data = geode_functions.load_data(flask.request.get_json().get("id"))
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
- polyhedron_attribute_names_json["route"],
341
- methods=polyhedron_attribute_names_json["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(flask.request, polyhedron_attribute_names_json)
345
- data = geode_functions.load_data(flask.request.get_json().get("id"))
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
- ping_json["route"],
364
- methods=ping_json["methods"],
256
+ schemas_dict["ping"]["route"],
257
+ methods=schemas_dict["ping"]["methods"],
365
258
  )
366
- def ping():
367
- utils_functions.validate_request(flask.request, ping_json)
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
- with open(
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,2 @@
1
+ from .create_point import *
2
+ from .create_aoi import *
@@ -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
+ }
@@ -0,0 +1,10 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class CreatePoint(DataClassJsonMixin):
7
+ name: str
8
+ x: float
9
+ y: float
10
+ z: float
@@ -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 ... import geode_functions, utils_functions
4
+ from opengeodeweb_microservice.schemas import get_schemas_dict
6
5
 
7
- routes = flask.Blueprint("models", __name__, url_prefix="/models")
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
- with open(os.path.join(schemas, "vtm_component_indices.json"), "r") as file:
13
- vtm_component_indices_json = json.load(file)
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
- vtm_component_indices_json["route"], methods=vtm_component_indices_json["methods"]
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(flask.request, vtm_component_indices_json)
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
- def extract_model_uuids(model):
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,2 @@
1
+ from .vtm_component_indices import *
2
+ from .mesh_components import *
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class MeshComponents(DataClassJsonMixin):
7
+ id: str
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class VtmComponentIndices(DataClassJsonMixin):
7
+ id: str
@@ -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 *
@@ -0,0 +1,8 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+ from typing import Optional
4
+
5
+
6
+ @dataclass
7
+ class AllowedFiles(DataClassJsonMixin):
8
+ supported_feature: Optional[str] = None
@@ -0,0 +1,9 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+ from typing import Optional
4
+
5
+
6
+ @dataclass
7
+ class AllowedObjects(DataClassJsonMixin):
8
+ filename: str
9
+ supported_feature: Optional[str] = None
@@ -0,0 +1,8 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class GeodeObjectsAndOutputExtensions(DataClassJsonMixin):
7
+ filename: str
8
+ input_geode_object: str
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class GeographicCoordinateSystems(DataClassJsonMixin):
7
+ input_geode_object: str
@@ -0,0 +1,8 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class InspectFile(DataClassJsonMixin):
7
+ filename: str
8
+ input_geode_object: str
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class Kill(DataClassJsonMixin):
7
+ pass
@@ -0,0 +1,8 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class MissingFiles(DataClassJsonMixin):
7
+ filename: str
8
+ input_geode_object: str
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class Ping(DataClassJsonMixin):
7
+ pass
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class PolygonAttributeNames(DataClassJsonMixin):
7
+ id: str
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class PolyhedronAttributeNames(DataClassJsonMixin):
7
+ id: str
@@ -0,0 +1,8 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class SaveViewableFile(DataClassJsonMixin):
7
+ filename: str
8
+ input_geode_object: str
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class TextureCoordinates(DataClassJsonMixin):
7
+ id: str
@@ -0,0 +1,8 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+ from typing import Optional
4
+
5
+
6
+ @dataclass
7
+ class UploadFile(DataClassJsonMixin):
8
+ filename: Optional[str] = None
@@ -0,0 +1,7 @@
1
+ from dataclasses_json import DataClassJsonMixin
2
+ from dataclasses import dataclass
3
+
4
+
5
+ @dataclass
6
+ class VertexAttributeNames(DataClassJsonMixin):
7
+ id: str
@@ -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: dict[str, str]) -> None:
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.10.5rc1
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.0
20
- Requires-Dist: geode-viewables==3.3.0
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.27.4
25
- Requires-Dist: opengeode-geosciences==9.4.1
26
- Requires-Dist: opengeode-geosciencesio==5.8.0
27
- Requires-Dist: opengeode-inspector==6.8.1
28
- Requires-Dist: opengeode-io==7.4.0
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.5rc1
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.5rc1.dist-info/licenses/LICENSE,sha256=LoTB-aqQvzTGxoTRXNnhNV0LKiqdk2bQv6MB34l8zkI,1079
29
- opengeodeweb_back-5.10.5rc1.dist-info/METADATA,sha256=6LnIyanx13uNBllBS48qFz4J41ZJ7nAOZDnPu9nIyKs,2668
30
- opengeodeweb_back-5.10.5rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
- opengeodeweb_back-5.10.5rc1.dist-info/entry_points.txt,sha256=3W_t5GFc9ROHSIZ55IGvYU3DLHUFQmYOM4Bm9u3Z0cE,71
32
- opengeodeweb_back-5.10.5rc1.dist-info/top_level.txt,sha256=tN1FZeLIVBrdja2-pbmhg5-tK-JILmmT9OeIBnhlUrQ,18
33
- opengeodeweb_back-5.10.5rc1.dist-info/RECORD,,