OpenGeodeWeb-Back 5.8.7__py3-none-any.whl → 5.9.0rc1__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.
@@ -4,6 +4,8 @@ import os
4
4
  # Third party imports
5
5
  import opengeode_geosciences as og_gs
6
6
  import opengeode as og
7
+ import werkzeug
8
+ import flask
7
9
 
8
10
  # Local application imports
9
11
  from .geode_objects import geode_objects_dict
@@ -38,6 +40,26 @@ def load(geode_object: str, file_absolute_path: str):
38
40
  return geode_object_value(geode_object)["load"](file_absolute_path)
39
41
 
40
42
 
43
+ def data_file_path(data_id: str, filename: str) -> str:
44
+ data_folder_path = flask.current_app.config["DATA_FOLDER_PATH"]
45
+ return os.path.join(
46
+ data_folder_path,
47
+ data_id,
48
+ werkzeug.utils.secure_filename(filename),
49
+ )
50
+
51
+
52
+ def load_data(geode_object: str, data_id: str, filename: str):
53
+ file_absolute_path = data_file_path(data_id, filename)
54
+ return load(geode_object, file_absolute_path)
55
+
56
+
57
+ def upload_file_path(filename):
58
+ upload_folder = flask.current_app.config["UPLOAD_FOLDER"]
59
+ secure_filename = werkzeug.utils.secure_filename(filename)
60
+ return os.path.abspath(os.path.join(upload_folder, secure_filename))
61
+
62
+
41
63
  def is_saveable(geode_object: str, data, filename: str):
42
64
  return geode_object_value(geode_object)["is_saveable"](data, filename)
43
65
 
@@ -97,9 +97,10 @@ def allowed_objects():
97
97
  if flask.request.method == "OPTIONS":
98
98
  return flask.make_response({}, 200)
99
99
 
100
- UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
101
100
  utils_functions.validate_request(flask.request, allowed_objects_json)
102
- file_absolute_path = os.path.join(UPLOAD_FOLDER, flask.request.json["filename"])
101
+ file_absolute_path = geode_functions.upload_file_path(
102
+ flask.request.json["filename"]
103
+ )
103
104
  allowed_objects = geode_functions.list_geode_objects(
104
105
  file_absolute_path, flask.request.json["supported_feature"]
105
106
  )
@@ -118,12 +119,11 @@ with open(
118
119
  methods=missing_files_json["methods"],
119
120
  )
120
121
  def missing_files():
121
- UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
122
122
  utils_functions.validate_request(flask.request, missing_files_json)
123
-
123
+ file_path = geode_functions.upload_file_path(flask.request.json["filename"])
124
124
  missing_files = geode_functions.missing_files(
125
125
  flask.request.json["input_geode_object"],
126
- os.path.join(UPLOAD_FOLDER, flask.request.json["filename"]),
126
+ file_path,
127
127
  )
128
128
  has_missing_files = missing_files.has_missing_files()
129
129
 
@@ -184,11 +184,9 @@ with open(
184
184
  methods=inspect_file_json["methods"],
185
185
  )
186
186
  def inspect_file():
187
- UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
188
187
  utils_functions.validate_request(flask.request, inspect_file_json)
189
188
 
190
- secure_filename = werkzeug.utils.secure_filename(flask.request.json["filename"])
191
- file_path = os.path.abspath(os.path.join(UPLOAD_FOLDER, secure_filename))
189
+ file_path = geode_functions.upload_file_path(flask.request.json["filename"])
192
190
  data = geode_functions.load(flask.request.json["input_geode_object"], file_path)
193
191
  class_inspector = geode_functions.inspect(
194
192
  flask.request.json["input_geode_object"], data
@@ -209,13 +207,13 @@ with open(
209
207
  methods=geode_objects_and_output_extensions_json["methods"],
210
208
  )
211
209
  def geode_objects_and_output_extensions():
212
- UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
213
210
  utils_functions.validate_request(
214
211
  flask.request, geode_objects_and_output_extensions_json
215
212
  )
213
+ file_path = geode_functions.upload_file_path(flask.request.json["filename"])
216
214
  data = geode_functions.load(
217
215
  flask.request.json["input_geode_object"],
218
- os.path.join(UPLOAD_FOLDER, flask.request.json["filename"]),
216
+ file_path,
219
217
  )
220
218
  geode_objects_and_output_extensions = (
221
219
  geode_functions.geode_objects_output_extensions(
@@ -241,14 +239,12 @@ with open(
241
239
  )
242
240
  def save_viewable_file():
243
241
  utils_functions.validate_request(flask.request, save_viewable_file_json)
244
- UPLOAD_FOLDER = flask.current_app.config["UPLOAD_FOLDER"]
245
- DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
246
- secure_filename = werkzeug.utils.secure_filename(flask.request.json["filename"])
247
- file_path = os.path.abspath(os.path.join(UPLOAD_FOLDER, secure_filename))
242
+
243
+ file_path = geode_functions.upload_file_path(flask.request.json["filename"])
248
244
  data = geode_functions.load(flask.request.json["input_geode_object"], file_path)
249
245
  return flask.make_response(
250
246
  utils_functions.generate_native_viewable_and_light_viewable(
251
- flask.request.json["input_geode_object"], data, DATA_FOLDER_PATH
247
+ flask.request.json["input_geode_object"], data
252
248
  ),
253
249
  200,
254
250
  )
@@ -261,7 +257,6 @@ with open(os.path.join(schemas, "create_point.json"), "r") as file:
261
257
  @routes.route(create_point_json["route"], methods=create_point_json["methods"])
262
258
  def create_point():
263
259
  utils_functions.validate_request(flask.request, create_point_json)
264
- DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
265
260
  title = flask.request.json["title"]
266
261
  x = flask.request.json["x"]
267
262
  y = flask.request.json["y"]
@@ -273,7 +268,7 @@ def create_point():
273
268
  builder.set_name(title)
274
269
  return flask.make_response(
275
270
  utils_functions.generate_native_viewable_and_light_viewable(
276
- "PointSet3D", PointSet3D, DATA_FOLDER_PATH
271
+ "PointSet3D", PointSet3D
277
272
  ),
278
273
  200,
279
274
  )
@@ -288,12 +283,13 @@ with open(os.path.join(schemas, "texture_coordinates.json"), "r") as file:
288
283
  methods=texture_coordinates_json["methods"],
289
284
  )
290
285
  def texture_coordinates():
291
- DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
292
286
  utils_functions.validate_request(flask.request, texture_coordinates_json)
293
- data = geode_functions.load(
287
+ data = geode_functions.load_data(
294
288
  flask.request.json["input_geode_object"],
295
- os.path.join(DATA_FOLDER_PATH, flask.request.json["filename"]),
289
+ flask.request.json["id"],
290
+ flask.request.json["filename"],
296
291
  )
292
+
297
293
  texture_coordinates = data.texture_manager().texture_names()
298
294
 
299
295
  return flask.make_response({"texture_coordinates": texture_coordinates}, 200)
@@ -311,14 +307,13 @@ with open(
311
307
  methods=vertex_attribute_names_json["methods"],
312
308
  )
313
309
  def vertex_attribute_names():
314
- DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
315
310
  utils_functions.validate_request(flask.request, vertex_attribute_names_json)
316
- file_absolute_path = os.path.join(
317
- DATA_FOLDER_PATH, werkzeug.utils.secure_filename(flask.request.json["filename"])
318
- )
319
- data = geode_functions.load(
320
- flask.request.json["input_geode_object"], file_absolute_path
311
+ data = geode_functions.load_data(
312
+ flask.request.json["input_geode_object"],
313
+ flask.request.json["id"],
314
+ flask.request.json["filename"],
321
315
  )
316
+
322
317
  vertex_attribute_names = data.vertex_attribute_manager().attribute_names()
323
318
 
324
319
  return flask.make_response(
@@ -341,14 +336,13 @@ with open(
341
336
  methods=polygon_attribute_names_json["methods"],
342
337
  )
343
338
  def polygon_attribute_names():
344
- DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
345
339
  utils_functions.validate_request(flask.request, polygon_attribute_names_json)
346
- file_absolute_path = os.path.join(
347
- DATA_FOLDER_PATH, werkzeug.utils.secure_filename(flask.request.json["filename"])
348
- )
349
- data = geode_functions.load(
350
- flask.request.json["input_geode_object"], file_absolute_path
340
+ data = geode_functions.load_data(
341
+ flask.request.json["input_geode_object"],
342
+ flask.request.json["id"],
343
+ flask.request.json["filename"],
351
344
  )
345
+
352
346
  polygon_attribute_names = data.polygon_attribute_manager().attribute_names()
353
347
 
354
348
  return flask.make_response(
@@ -371,14 +365,13 @@ with open(
371
365
  methods=polyhedron_attribute_names_json["methods"],
372
366
  )
373
367
  def polyhedron_attribute_names():
374
- DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
375
- utils_functions.validate_request(flask.request, vertex_attribute_names_json)
376
- file_absolute_path = os.path.join(
377
- DATA_FOLDER_PATH, werkzeug.utils.secure_filename(flask.request.json["filename"])
378
- )
379
- data = geode_functions.load(
380
- flask.request.json["input_geode_object"], file_absolute_path
368
+ utils_functions.validate_request(flask.request, polyhedron_attribute_names_json)
369
+ data = geode_functions.load_data(
370
+ flask.request.json["input_geode_object"],
371
+ flask.request.json["id"],
372
+ flask.request.json["filename"],
381
373
  )
374
+
382
375
  polyhedron_attribute_names = data.polyhedron_attribute_manager().attribute_names()
383
376
 
384
377
  return flask.make_response(
@@ -18,36 +18,27 @@ with open(os.path.join(schemas, "vtm_component_indices.json"), "r") as file:
18
18
  )
19
19
  def uuid_to_flat_index():
20
20
  utils_functions.validate_request(flask.request, vtm_component_indices_json)
21
- vtm_file_path = os.path.join(
22
- flask.current_app.config["DATA_FOLDER_PATH"], flask.request.json["id"] + ".vtm"
21
+
22
+ vtm_file_path = geode_functions.data_file_path(
23
+ flask.request.json["id"], "viewable.vtm"
23
24
  )
24
25
  tree = ET.parse(vtm_file_path)
25
26
  root = tree.find("vtkMultiBlockDataSet")
26
27
  uuid_to_flat_index = {}
27
28
  current_index = 0
28
-
29
29
  for elem in root.iter():
30
30
  if "uuid" in elem.attrib and elem.tag == "DataSet":
31
31
  uuid_to_flat_index[elem.attrib["uuid"]] = current_index
32
-
33
32
  current_index += 1
34
-
35
- return flask.make_response(
36
- {"uuid_to_flat_index": uuid_to_flat_index},
37
- 200,
38
- )
33
+ return flask.make_response({"uuid_to_flat_index": uuid_to_flat_index}, 200)
39
34
 
40
35
 
41
- def extract_model_uuids(geode_object, file_path):
42
- model = geode_functions.load(geode_object, file_path)
36
+ def extract_model_uuids(model):
43
37
  mesh_components = model.mesh_components()
44
-
45
38
  uuid_dict = {}
46
-
47
39
  for mesh_component, ids in mesh_components.items():
48
40
  component_name = mesh_component.get()
49
41
  uuid_dict[component_name] = [id.string() for id in ids]
50
-
51
42
  return uuid_dict
52
43
 
53
44
 
@@ -58,10 +49,12 @@ with open(os.path.join(schemas, "mesh_components.json"), "r") as file:
58
49
  @routes.route(mesh_components_json["route"], methods=mesh_components_json["methods"])
59
50
  def extract_uuids_endpoint():
60
51
  utils_functions.validate_request(flask.request, mesh_components_json)
61
- file_path = os.path.join(
62
- flask.current_app.config["DATA_FOLDER_PATH"], flask.request.json["filename"]
52
+
53
+ model = geode_functions.load_data(
54
+ flask.request.json["geode_object"],
55
+ flask.request.json["id"],
56
+ flask.request.json["filename"],
63
57
  )
64
- if not os.path.exists(file_path):
65
- return flask.make_response({"error": "File not found"}, 404)
66
- uuid_dict = extract_model_uuids(flask.request.json["geode_object"], file_path)
58
+
59
+ uuid_dict = extract_model_uuids(model)
67
60
  return flask.make_response({"uuid_dict": uuid_dict}, 200)
@@ -5,14 +5,21 @@
5
5
  ],
6
6
  "type": "object",
7
7
  "properties": {
8
+ "id": {
9
+ "type": "string",
10
+ "minLength": 1
11
+ },
8
12
  "filename": {
9
- "type": "string"
13
+ "type": "string",
14
+ "minLength": 1
10
15
  },
11
16
  "geode_object": {
12
- "type": "string"
17
+ "type": "string",
18
+ "minLength": 1
13
19
  }
14
20
  },
15
21
  "required": [
22
+ "id",
16
23
  "filename",
17
24
  "geode_object"
18
25
  ],
@@ -6,7 +6,8 @@
6
6
  "type": "object",
7
7
  "properties": {
8
8
  "id": {
9
- "type": "string"
9
+ "type": "string",
10
+ "minLength": 1
10
11
  }
11
12
  },
12
13
  "required": [
@@ -12,11 +12,16 @@
12
12
  "filename": {
13
13
  "type": "string",
14
14
  "minLength": 1
15
+ },
16
+ "id": {
17
+ "type": "string",
18
+ "minLength": 1
15
19
  }
16
20
  },
17
21
  "required": [
18
22
  "input_geode_object",
19
- "filename"
23
+ "filename",
24
+ "id"
20
25
  ],
21
26
  "additionalProperties": false
22
27
  }
@@ -12,11 +12,16 @@
12
12
  "filename": {
13
13
  "type": "string",
14
14
  "minLength": 1
15
+ },
16
+ "id": {
17
+ "type": "string",
18
+ "minLength": 1
15
19
  }
16
20
  },
17
21
  "required": [
18
22
  "input_geode_object",
19
- "filename"
23
+ "filename",
24
+ "id"
20
25
  ],
21
26
  "additionalProperties": false
22
27
  }
@@ -12,10 +12,15 @@
12
12
  "filename": {
13
13
  "type": "string",
14
14
  "minLength": 1
15
+ },
16
+ "id": {
17
+ "type": "string",
18
+ "minLength": 1
15
19
  }
16
20
  },
17
21
  "required": [
18
22
  "input_geode_object",
23
+ "id",
19
24
  "filename"
20
25
  ],
21
26
  "additionalProperties": false
@@ -12,11 +12,16 @@
12
12
  "filename": {
13
13
  "type": "string",
14
14
  "minLength": 1
15
+ },
16
+ "id": {
17
+ "type": "string",
18
+ "minLength": 1
15
19
  }
16
20
  },
17
21
  "required": [
18
22
  "input_geode_object",
19
- "filename"
23
+ "filename",
24
+ "id"
20
25
  ],
21
26
  "additionalProperties": false
22
27
  }
@@ -143,24 +143,25 @@ def handle_exception(e):
143
143
  return response
144
144
 
145
145
 
146
- def generate_native_viewable_and_light_viewable(
147
- geode_object, data, folder_absolute_path
148
- ):
146
+ def generate_native_viewable_and_light_viewable(geode_object, data):
149
147
  generated_id = str(uuid.uuid4()).replace("-", "")
148
+ DATA_FOLDER_PATH = flask.current_app.config["DATA_FOLDER_PATH"]
149
+ data_path = os.path.join(DATA_FOLDER_PATH, generated_id)
150
150
  name = data.name()
151
151
  object_type = geode_functions.get_object_type(geode_object)
152
152
 
153
153
  saved_native_file_path = geode_functions.save(
154
154
  geode_object,
155
155
  data,
156
- folder_absolute_path,
157
- generated_id + "." + data.native_extension(),
156
+ data_path,
157
+ "native." + data.native_extension(),
158
158
  )
159
159
  saved_viewable_file_path = geode_functions.save_viewable(
160
- geode_object, data, folder_absolute_path, generated_id
160
+ geode_object, data, data_path, "viewable"
161
161
  )
162
+ viewable_file_name = os.path.basename(saved_viewable_file_path)
162
163
  saved_light_viewable_file_path = geode_functions.save_light_viewable(
163
- geode_object, data, folder_absolute_path, "light_" + generated_id
164
+ geode_object, data, data_path, "light_viewable"
164
165
  )
165
166
  f = open(saved_light_viewable_file_path, "rb")
166
167
  binary_light_viewable = f.read()
@@ -169,7 +170,7 @@ def generate_native_viewable_and_light_viewable(
169
170
  return {
170
171
  "name": name,
171
172
  "native_file_name": os.path.basename(saved_native_file_path[0]),
172
- "viewable_file_name": os.path.basename(saved_viewable_file_path),
173
+ "viewable_file_name": viewable_file_name,
173
174
  "id": generated_id,
174
175
  "object_type": object_type,
175
176
  "binary_light_viewable": str(binary_light_viewable, "utf-8"),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenGeodeWeb-Back
3
- Version: 5.8.7
3
+ Version: 5.9.0rc1
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
@@ -1,13 +1,13 @@
1
1
  opengeodeweb_back/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  opengeodeweb_back/app_config.py,sha256=gJfYxDJOa_PYLqjqgdXacp3W3F109uujE9LGPvzHOkc,728
3
- opengeodeweb_back/geode_functions.py,sha256=EPAM6pw9QwZfoeZjOxycFTKUANw6pdeXr2q3vsnPxt8,9121
3
+ opengeodeweb_back/geode_functions.py,sha256=JGUbVVDA-CFYbsOmUTKAvpAKwzlf0Wg_Pxuq1IibykY,9806
4
4
  opengeodeweb_back/geode_objects.py,sha256=13A9FTGugiA9ClSeYkBiCu5QGzm93nm8YJQwiWB4nNw,25995
5
5
  opengeodeweb_back/test_utils.py,sha256=18AbRW9-tfKkPcmRGilTTHXI7S3armYyV7Vdy5UvUKM,794
6
- opengeodeweb_back/utils_functions.py,sha256=RXMdQlCK3bLWYYDhkwOlYCeMpSRjMCejNlqDhxo2VNI,5254
7
- opengeodeweb_back/routes/blueprint_routes.py,sha256=uqcDIXa2Q7HRShEEVFJcOB6NAxPAYO1VyBMPxtyKl_0,12334
8
- opengeodeweb_back/routes/models/blueprint_models.py,sha256=EPSlgHnxZVeXwdzJ_TBAHlK6SsjXDk3f1sPYWR5eEL4,2183
9
- opengeodeweb_back/routes/models/schemas/mesh_components.json,sha256=3hgNqkxKDv691JGgjgMoqI_WgH2m7AtEFfjsOIqAz5Y,295
10
- opengeodeweb_back/routes/models/schemas/vtm_component_indices.json,sha256=0km8gzawPj-eFodhaGzAgNZjAEOl4wLy24f_Bs3pBlw,217
6
+ opengeodeweb_back/utils_functions.py,sha256=NWsrhn5MNggtOfqj6kWoGbO_wbAE7XV6rruQKbhxlOA,5348
7
+ opengeodeweb_back/routes/blueprint_routes.py,sha256=UKmp2QZXUxUaFHGlcHWYAn7pd-UFDnAceE_6Jqwc2kA,11290
8
+ opengeodeweb_back/routes/models/blueprint_models.py,sha256=PAyHSKjsvVm5gGfjUyWAnODmE0BJMsIWc1AWl0F3bO0,1955
9
+ opengeodeweb_back/routes/models/schemas/mesh_components.json,sha256=3OQvI4pUCe77WGC46tEr37rEWigQ6n2nsfGUTZRY074,419
10
+ opengeodeweb_back/routes/models/schemas/vtm_component_indices.json,sha256=0XILVxhAxi0RhQFDZZoUeGcAnBMroWz3kNJS7-6_dKQ,239
11
11
  opengeodeweb_back/routes/schemas/allowed_files.json,sha256=pRsGf39LiJpl3zEGLg4IqvRtm7iUx3Wq4Tb4tSFXGV0,234
12
12
  opengeodeweb_back/routes/schemas/allowed_objects.json,sha256=oy_YYpFzgDICx-keWqNIUpQM3zzB4eE3H6mPNxH9rWc,361
13
13
  opengeodeweb_back/routes/schemas/create_point.json,sha256=XjmXLMkr4jgWYHUKSwAhsxz1oLDZi8r8J0SY-QuEvks,386
@@ -16,14 +16,14 @@ opengeodeweb_back/routes/schemas/geographic_coordinate_systems.json,sha256=lnPqe
16
16
  opengeodeweb_back/routes/schemas/inspect_file.json,sha256=WoFF2hgZCUfqSDFJRq1sLpivjCQ6TCvSHPH8pKFY6KM,348
17
17
  opengeodeweb_back/routes/schemas/missing_files.json,sha256=eOBAkiphA-2xG6e-OAy7wcJK2FeY0YFYXJlLdr8SNSc,349
18
18
  opengeodeweb_back/routes/schemas/ping.json,sha256=MhI5jtrjMsAsfIKEzdY8p1HyV9xv4O3hYfESWw6tkyE,162
19
- opengeodeweb_back/routes/schemas/polygon_attribute_names.json,sha256=u-_ypRIejrDzbSc8tcb-6j6Av026SVJGC-RFPgaay7w,359
20
- opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json,sha256=ImKRR2-38Ug3jAHaVEzmNaPNMTSoDE10-ZoALsnSjyg,362
19
+ opengeodeweb_back/routes/schemas/polygon_attribute_names.json,sha256=HJ_zVLJNdVL1snoK2mSo5Rb0XOIgiPVq1VLaDTORe54,433
20
+ opengeodeweb_back/routes/schemas/polyhedron_attribute_names.json,sha256=Fw6rcYxuHaiEAc_AcVzPy5ibajcr4wW3jyb2r7T0m-c,436
21
21
  opengeodeweb_back/routes/schemas/save_viewable_file.json,sha256=pvvEdaC7bNASPMrl3bXzlcA5blgflK0EYp2hBDf74qY,424
22
- opengeodeweb_back/routes/schemas/texture_coordinates.json,sha256=m0EqxlvKojXVxK5Csucodu3rq1YMVJPwXJN_Wreb3qc,355
22
+ opengeodeweb_back/routes/schemas/texture_coordinates.json,sha256=oW84Vh34KfleK935fmMXnqJXy-vaLDd7g87O_PtSzfY,429
23
23
  opengeodeweb_back/routes/schemas/upload_file.json,sha256=LJ3U3L5ApKuQDVFIpVT_y2alq4HW_suTvZ3HUucNbhg,219
24
- opengeodeweb_back/routes/schemas/vertex_attribute_names.json,sha256=bya9KGtTmHFWjD-ur0_0UAY2yf3KkMeuNrk6E1UkjLM,358
25
- opengeodeweb_back-5.8.7.dist-info/licenses/LICENSE,sha256=LoTB-aqQvzTGxoTRXNnhNV0LKiqdk2bQv6MB34l8zkI,1079
26
- opengeodeweb_back-5.8.7.dist-info/METADATA,sha256=-cuE20GdFPhvimGMGWjGNcl-UYpZMWmOhLSGG-G-3bY,3033
27
- opengeodeweb_back-5.8.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- opengeodeweb_back-5.8.7.dist-info/top_level.txt,sha256=tN1FZeLIVBrdja2-pbmhg5-tK-JILmmT9OeIBnhlUrQ,18
29
- opengeodeweb_back-5.8.7.dist-info/RECORD,,
24
+ opengeodeweb_back/routes/schemas/vertex_attribute_names.json,sha256=bmXG0pzVHMUTZY_0iu6ruX7eMUVk8wr2H1o4eEtBlg0,432
25
+ opengeodeweb_back-5.9.0rc1.dist-info/licenses/LICENSE,sha256=LoTB-aqQvzTGxoTRXNnhNV0LKiqdk2bQv6MB34l8zkI,1079
26
+ opengeodeweb_back-5.9.0rc1.dist-info/METADATA,sha256=QJrrf0M7Uqa1SgQdvxGF2eihN1_8hvRcBp3JG2y1Wec,3036
27
+ opengeodeweb_back-5.9.0rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ opengeodeweb_back-5.9.0rc1.dist-info/top_level.txt,sha256=tN1FZeLIVBrdja2-pbmhg5-tK-JILmmT9OeIBnhlUrQ,18
29
+ opengeodeweb_back-5.9.0rc1.dist-info/RECORD,,