Skip to content

Commit 55af6cc

Browse files
committed
fix(FileSystem): using native instead of input_file & additional_files
1 parent a078183 commit 55af6cc

4 files changed

Lines changed: 20 additions & 52 deletions

File tree

src/opengeodeweb_back/routes/blueprint_routes.py

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ def export_project() -> flask.Response:
425425
export_vease_path = os.path.join(project_folder, filename)
426426

427427
with get_session() as session:
428-
rows = session.query(Data.id, Data.input_file, Data.additional_files).all()
428+
rows = session.query(Data.id, Data.native_file).all()
429429

430430
with zipfile.ZipFile(
431431
export_vease_path, "w", compression=zipfile.ZIP_DEFLATED
@@ -434,21 +434,12 @@ def export_project() -> flask.Response:
434434
if os.path.isfile(database_root_path):
435435
zip_file.write(database_root_path, "project.db")
436436

437-
for data_id, input_file, additional_files in rows:
437+
for data_id, native_file in rows:
438438
base_dir = os.path.join(project_folder, data_id)
439439

440-
input_path = os.path.join(base_dir, str(input_file))
441-
if os.path.isfile(input_path):
442-
zip_file.write(input_path, os.path.join(data_id, str(input_file)))
443-
444-
for relative_path in (
445-
additional_files if isinstance(additional_files, list) else []
446-
):
447-
additional_path = os.path.join(base_dir, relative_path)
448-
if os.path.isfile(additional_path):
449-
zip_file.write(
450-
additional_path, os.path.join(data_id, relative_path)
451-
)
440+
native_path = os.path.join(base_dir, str(native_file))
441+
if os.path.isfile(native_path):
442+
zip_file.write(native_path, os.path.join(data_id, str(native_file)))
452443

453444
zip_file.writestr("snapshot.json", flask.json.dumps(params.snapshot))
454445

@@ -523,17 +514,17 @@ def import_project() -> flask.Response:
523514
if os.path.isfile(vpath):
524515
continue
525516

526-
input_file = str(data.input_file or "")
527-
if not input_file:
517+
native_file = str(data.native_file or "")
518+
if not native_file:
528519
continue
529520

530-
input_full = geode_functions.data_file_path(data.id, input_file)
531-
if not os.path.isfile(input_full):
521+
native_full = geode_functions.data_file_path(data.id, native_file)
522+
if not os.path.isfile(native_full):
532523
continue
533524

534525
geode_object = geode_functions.geode_object_from_string(
535526
data.geode_object
536-
).load(input_full)
527+
).load(native_full)
537528
utils_functions.save_all_viewables_and_return_info(
538529
geode_object, data, data_path
539530
)

src/opengeodeweb_back/utils_functions.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ def save_all_viewables_and_return_info(
188188
geode_object: GeodeObject,
189189
data: Data,
190190
data_path: str,
191+
native_filename: str | None = None,
191192
) -> dict[str, str | list[str]]:
192193
with ThreadPoolExecutor() as executor:
193194
native_files, viewable_path, light_path = executor.map(
@@ -196,7 +197,10 @@ def save_all_viewables_and_return_info(
196197
(
197198
geode_object.save,
198199
os.path.join(
199-
data_path, "native." + geode_object.native_extension()
200+
data_path,
201+
native_filename
202+
if native_filename is not None
203+
else "native." + geode_object.native_extension(),
200204
),
201205
),
202206
(geode_object.save_viewable, os.path.join(data_path, "viewable")),
@@ -212,9 +216,6 @@ def save_all_viewables_and_return_info(
212216
data.viewable_file = os.path.basename(viewable_path)
213217
data.light_viewable_file = os.path.basename(light_path)
214218

215-
if not data.input_file:
216-
data.input_file = data.native_file
217-
218219
assert data.native_file is not None
219220
assert data.viewable_file is not None
220221
assert data.light_viewable_file is not None
@@ -226,8 +227,6 @@ def save_all_viewables_and_return_info(
226227
"viewer_type": data.viewer_object,
227228
"binary_light_viewable": binary_light_viewable.decode("utf-8"),
228229
"geode_object_type": data.geode_object,
229-
"input_file": data.input_file or "",
230-
"additional_files": data.additional_files or [],
231230
}
232231

233232

@@ -251,15 +250,13 @@ def generate_native_viewable_and_light_viewable_from_file(
251250
geode_object=geode_object_type,
252251
viewer_object=generic_geode_object.viewer_type(),
253252
viewer_elements_type=generic_geode_object.viewer_elements_type(),
254-
input_file=input_file,
255253
)
256254

257255
data_path = create_data_folder_from_id(data.id)
258256

259257
full_input_filename = geode_functions.upload_file_path(input_file)
260-
copied_full_path = os.path.join(
261-
data_path, werkzeug.utils.secure_filename(input_file)
262-
)
258+
secure_input_file = werkzeug.utils.secure_filename(input_file)
259+
copied_full_path = os.path.join(data_path, secure_input_file)
263260
shutil.copy2(full_input_filename, copied_full_path)
264261

265262
additional_files_copied: list[str] = []
@@ -278,9 +275,9 @@ def generate_native_viewable_and_light_viewable_from_file(
278275
additional_files_copied.append(additional_file.filename)
279276

280277
geode_object = generic_geode_object.load(copied_full_path)
281-
data.additional_files = additional_files_copied
282278
return save_all_viewables_and_return_info(
283279
geode_object,
284280
data,
285281
data_path,
282+
native_filename=secure_input_file,
286283
)

tests/test_routes.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,6 @@ def test_texture_coordinates(client: FlaskClient, test_id: str) -> None:
205205
geode_object=GeodePolygonalSurface3D.geode_object_type(),
206206
viewer_object=GeodePolygonalSurface3D.viewer_type(),
207207
viewer_elements_type=GeodePolygonalSurface3D.viewer_elements_type(),
208-
input_file=file,
209208
)
210209
data.native_file = file
211210
session = get_session()
@@ -234,7 +233,6 @@ def test_vertex_attribute_names(client: FlaskClient, test_id: str) -> None:
234233
geode_object=GeodePolygonalSurface3D.geode_object_type(),
235234
viewer_object=GeodePolygonalSurface3D.viewer_type(),
236235
viewer_elements_type=GeodePolygonalSurface3D.viewer_elements_type(),
237-
input_file=file,
238236
)
239237
data.native_file = file
240238
session = get_session()
@@ -263,7 +261,6 @@ def test_cell_attribute_names(client: FlaskClient, test_id: str) -> None:
263261
geode_object=GeodeRegularGrid2D.geode_object_type(),
264262
viewer_object=GeodeRegularGrid2D.viewer_type(),
265263
viewer_elements_type=GeodeRegularGrid2D.viewer_elements_type(),
266-
input_file=file,
267264
)
268265
data.native_file = file
269266
session = get_session()
@@ -292,7 +289,6 @@ def test_polygon_attribute_names(client: FlaskClient, test_id: str) -> None:
292289
geode_object=GeodePolygonalSurface3D.geode_object_type(),
293290
viewer_object=GeodePolygonalSurface3D.viewer_type(),
294291
viewer_elements_type=GeodePolygonalSurface3D.viewer_elements_type(),
295-
input_file=file,
296292
)
297293
data.native_file = file
298294
session = get_session()
@@ -321,7 +317,6 @@ def test_polyhedron_attribute_names(client: FlaskClient, test_id: str) -> None:
321317
geode_object=GeodePolyhedralSolid3D.geode_object_type(),
322318
viewer_object=GeodePolyhedralSolid3D.viewer_type(),
323319
viewer_elements_type=GeodePolyhedralSolid3D.viewer_elements_type(),
324-
input_file=file,
325320
)
326321
data.native_file = file
327322
session = get_session()
@@ -354,7 +349,6 @@ def test_edge_attribute_names(client: FlaskClient, test_id: str) -> None:
354349
geode_object=GeodeEdgedCurve3D.geode_object_type(),
355350
viewer_object=GeodeEdgedCurve3D.viewer_type(),
356351
viewer_elements_type=GeodeEdgedCurve3D.viewer_elements_type(),
357-
input_file=file,
358352
)
359353
data.native_file = file
360354
session = get_session()

tests/test_utils_functions.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,11 @@ def test_save_all_viewables_and_return_info(client: FlaskClient) -> None:
105105
assert os.path.exists(expected_db_path)
106106

107107
geode_object = GeodeBRep.load(os.path.join(data_dir, "test.og_brep"))
108-
input_file = "test.og_brep"
109-
additional_files = ["additional_file.txt"]
110108

111109
data_entry = Data.create(
112110
geode_object=geode_object.geode_object_type(),
113111
viewer_object=geode_object.viewer_type(),
114112
viewer_elements_type=geode_object.viewer_elements_type(),
115-
input_file=input_file,
116-
additional_files=additional_files,
117113
)
118114
data_path = utils_functions.create_data_folder_from_id(data_entry.id)
119115

@@ -124,7 +120,7 @@ def test_save_all_viewables_and_return_info(client: FlaskClient) -> None:
124120
assert isinstance(result, dict)
125121
native_file = result["native_file"]
126122
assert isinstance(native_file, str)
127-
assert native_file.startswith("native.")
123+
assert native_file == "native.og_brep"
128124
viewable_file = result["viewable_file"]
129125
assert isinstance(viewable_file, str)
130126
assert viewable_file.endswith(".vtm")
@@ -134,15 +130,12 @@ def test_save_all_viewables_and_return_info(client: FlaskClient) -> None:
134130
assert isinstance(result["viewer_type"], str)
135131
assert isinstance(result["binary_light_viewable"], str)
136132
assert result["geode_object_type"] == geode_object.geode_object_type()
137-
assert result["input_file"] == input_file
138133

139134
db_entry = Data.get(result["id"])
140135
assert db_entry is not None
141136
assert db_entry.native_file == result["native_file"]
142137
assert db_entry.viewable_file == result["viewable_file"]
143138
assert db_entry.geode_object == geode_object.geode_object_type()
144-
assert db_entry.input_file == input_file
145-
assert db_entry.additional_files == additional_files
146139

147140
expected_data_path = os.path.join(app.config["DATA_FOLDER_PATH"], result["id"])
148141
assert os.path.exists(expected_data_path)
@@ -152,13 +145,10 @@ def test_save_all_viewables_commits_to_db(client: FlaskClient) -> None:
152145
app = client.application
153146
with app.app_context():
154147
geode_object = GeodeBRep.load(os.path.join(data_dir, "test.og_brep"))
155-
input_file = "test.og_brep"
156148
data_entry = Data.create(
157149
geode_object=geode_object.geode_object_type(),
158150
viewer_object=geode_object.viewer_type(),
159151
viewer_elements_type=geode_object.viewer_elements_type(),
160-
input_file=input_file,
161-
additional_files=[],
162152
)
163153
data_path = utils_functions.create_data_folder_from_id(data_entry.id)
164154

@@ -196,11 +186,8 @@ def test_generate_native_viewable_and_light_viewable_from_object(
196186
assert isinstance(result["binary_light_viewable"], str)
197187
assert result["binary_light_viewable"].startswith('<?xml version="1.0"?>')
198188

199-
assert result["input_file"] == result["native_file"]
200-
201189
data = Data.get(result["id"])
202190
assert data is not None
203-
assert data.input_file == data.native_file
204191
assert data.light_viewable_file is not None
205192
assert data.light_viewable_file.endswith(".vtp")
206193

@@ -221,14 +208,13 @@ def test_generate_native_viewable_and_light_viewable_from_file(
221208

222209
assert isinstance(result, dict)
223210
assert isinstance(result["native_file"], str)
224-
assert result["native_file"].startswith("native.")
211+
assert result["native_file"] == "test.og_brep"
225212
assert isinstance(result["viewable_file"], str)
226213
assert result["viewable_file"].endswith(".vtm")
227214
assert isinstance(result["id"], str)
228215
assert re.match(r"[0-9a-f]{32}", result["id"])
229216
assert isinstance(result["viewer_type"], str)
230217
assert isinstance(result["binary_light_viewable"], str)
231-
assert isinstance(result["input_file"], str)
232218

233219

234220
def test_send_file_multiple_returns_zip(client: FlaskClient, tmp_path: Path) -> None:

0 commit comments

Comments
 (0)