Skip to content

Commit 7701c7a

Browse files
authored
Merge pull request #222 from Geode-solutions/fix/file_system
fix(FileSystem): using native instead of input_file & additional_files
2 parents b81f7f7 + ddf0325 commit 7701c7a

6 files changed

Lines changed: 23 additions & 89 deletions

File tree

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,3 @@ werkzeug==3.1.2
6060
# flask
6161
# flask-cors
6262

63-
opengeodeweb-microservice==1.*,>=1.0.14

src/opengeodeweb_back/routes/blueprint_routes.py

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

428428
with get_session() as session:
429-
rows = session.query(Data.id, Data.input_file, Data.additional_files).all()
429+
rows = session.query(Data.id, Data.native_file).all()
430430

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

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

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

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

@@ -524,17 +515,17 @@ def import_project() -> flask.Response:
524515
if os.path.isfile(vpath):
525516
continue
526517

527-
input_file = str(data.input_file or "")
528-
if not input_file:
518+
native_file = str(data.native_file or "")
519+
if not native_file:
529520
continue
530521

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

535526
geode_object = geode_functions.geode_object_from_string(
536527
data.geode_object
537-
).load(input_full)
528+
).load(native_full)
538529
utils_functions.save_all_viewables_and_return_info(
539530
geode_object, data, data_path
540531
)

src/opengeodeweb_back/utils_functions.py

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,6 @@ def save_all_viewables_and_return_info(
212212
data.viewable_file = os.path.basename(viewable_path)
213213
data.light_viewable_file = os.path.basename(light_path)
214214

215-
if not data.input_file:
216-
data.input_file = data.native_file
217-
218215
assert data.native_file is not None
219216
assert data.viewable_file is not None
220217
assert data.light_viewable_file is not None
@@ -226,8 +223,6 @@ def save_all_viewables_and_return_info(
226223
"viewer_type": data.viewer_object,
227224
"binary_light_viewable": binary_light_viewable.decode("utf-8"),
228225
"geode_object_type": data.geode_object,
229-
"input_file": data.input_file or "",
230-
"additional_files": data.additional_files or [],
231226
}
232227

233228

@@ -251,36 +246,9 @@ def generate_native_viewable_and_light_viewable_from_file(
251246
geode_object=geode_object_type,
252247
viewer_object=generic_geode_object.viewer_type(),
253248
viewer_elements_type=generic_geode_object.viewer_elements_type(),
254-
input_file=input_file,
255249
)
256-
257250
data_path = create_data_folder_from_id(data.id)
258-
259251
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-
)
263-
shutil.copy2(full_input_filename, copied_full_path)
264-
265-
additional_files_copied: list[str] = []
266-
additional = generic_geode_object.additional_files(full_input_filename)
267-
for additional_file in additional.mandatory_files + additional.optional_files:
268-
if additional_file.is_missing:
269-
continue
270-
source_path = os.path.join(
271-
os.path.dirname(full_input_filename), additional_file.filename
272-
)
273-
if not os.path.exists(source_path):
274-
continue
275-
dest_path = os.path.join(data_path, additional_file.filename)
276-
os.makedirs(os.path.dirname(dest_path), exist_ok=True)
277-
shutil.copy2(source_path, dest_path)
278-
additional_files_copied.append(additional_file.filename)
279-
280-
geode_object = generic_geode_object.load(copied_full_path)
281-
data.additional_files = additional_files_copied
282-
return save_all_viewables_and_return_info(
283-
geode_object,
284-
data,
285-
data_path,
286-
)
252+
geode_object = generic_geode_object.load(full_input_filename)
253+
geode_object.builder().set_name(input_file)
254+
return save_all_viewables_and_return_info(geode_object, data, data_path)

tests/test_models_routes.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,32 +77,28 @@ def test_export_project_route(client: FlaskClient, tmp_path: Path) -> None:
7777
geode_object="BRep",
7878
viewer_object="BRep",
7979
viewer_elements_type="default",
80-
input_file="test_native.txt",
81-
native_file="test_native.txt",
82-
additional_files=[],
80+
native_file="native.txt",
8381
)
8482
data2 = Data(
8583
id="test_data_2",
8684
geode_object="Section",
8785
viewer_object="Section",
8886
viewer_elements_type="default",
89-
input_file="test_input.txt",
90-
native_file="test_native2.txt",
91-
additional_files=[],
87+
native_file="native.txt",
9288
)
9389
session.add(data1)
9490
session.add(data2)
9591
session.commit()
9692

9793
data1_dir = os.path.join(project_folder, "test_data_1")
9894
os.makedirs(data1_dir, exist_ok=True)
99-
with open(os.path.join(data1_dir, "test_native.txt"), "w") as f:
95+
with open(os.path.join(data1_dir, "native.txt"), "w") as f:
10096
f.write("native file content")
10197

10298
data2_dir = os.path.join(project_folder, "test_data_2")
10399
os.makedirs(data2_dir, exist_ok=True)
104-
with open(os.path.join(data2_dir, "test_input.txt"), "w") as f:
105-
f.write("input file content")
100+
with open(os.path.join(data2_dir, "native.txt"), "w") as f:
101+
f.write("native file content")
106102

107103
response = client.post(route, json={"snapshot": snapshot, "filename": filename})
108104
assert response.status_code == 200
@@ -119,8 +115,8 @@ def test_export_project_route(client: FlaskClient, tmp_path: Path) -> None:
119115
parsed = json.loads(zip_file.read("snapshot.json").decode("utf-8"))
120116
assert parsed == snapshot
121117
assert "project.db" in names
122-
assert "test_data_1/test_native.txt" in names
123-
assert "test_data_2/test_input.txt" in names
118+
assert "test_data_1/native.txt" in names
119+
assert "test_data_2/native.txt" in names
124120

125121
response.close()
126122

@@ -147,7 +143,7 @@ def test_import_project_route(client: FlaskClient, tmp_path: Path) -> None:
147143
conn = sqlite3.connect(str(temp_db))
148144
conn.execute(
149145
"CREATE TABLE datas (id TEXT PRIMARY KEY, geode_object TEXT, viewer_object TEXT, viewer_elements_type TEXT, native_file TEXT, "
150-
"viewable_file TEXT, light_viewable_file TEXT, input_file TEXT, additional_files TEXT)"
146+
"viewable_file TEXT, light_viewable_file TEXT)"
151147
)
152148
conn.commit()
153149
conn.close()

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"] == "native.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)