Skip to content

Commit b8e6ffc

Browse files
committed
new test session.commit to see if it is relevant
used non legacy SQLAlchemy methods mypy typing
1 parent a985ba5 commit b8e6ffc

File tree

4 files changed

+58
-12
lines changed

4 files changed

+58
-12
lines changed

src/opengeodeweb_back/data.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from sqlalchemy import String, JSON
22
from .database import database
33
import uuid
4+
from typing import List
45

56

67
class Data(database.Model):
@@ -20,12 +21,23 @@ class Data(database.Model):
2021
additional_files = database.Column(JSON, nullable=True)
2122

2223
@staticmethod
23-
def create(name, geode_object, input_file, additional_files=[]):
24+
def create(
25+
name: str,
26+
geode_object: str,
27+
input_file: str,
28+
additional_files: List[str]
29+
) -> 'Data':
30+
if additional_files is None:
31+
additional_files = []
32+
2433
data_entry = Data(
2534
name=name,
2635
geode_object=geode_object,
2736
input_file=input_file,
2837
additional_files=additional_files,
38+
native_file_name="",
39+
viewable_file_name="",
40+
light_viewable="",
2941
)
3042

3143
database.session.add(data_entry)

src/opengeodeweb_back/database.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
from flask import Flask
12
from flask_sqlalchemy import SQLAlchemy
23

34
DATABASE_FILENAME = "project.db"
45

56
database = SQLAlchemy()
67

78

8-
def initialize_database(app):
9+
def initialize_database(app: Flask) -> SQLAlchemy:
910
database.init_app(app)
1011
with app.app_context():
1112
database.create_all()

src/opengeodeweb_back/utils_functions.py

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import threading
44
import time
55
import zipfile
6+
from typing import List, Dict, Any
67

78
# Third party imports
89
import flask
@@ -154,8 +155,11 @@ def create_data_folder_from_id(data_id: str) -> str:
154155

155156

156157
def save_all_viewables_and_return_info(
157-
geode_object, data, input_file, additional_files=None
158-
):
158+
geode_object: str,
159+
data: Any,
160+
input_file: List[str],
161+
additional_files: List[str] = []
162+
) -> Dict[str, Any]:
159163
data_entry = Data.create(
160164
name=data.name(),
161165
geode_object=geode_object,
@@ -191,18 +195,27 @@ def save_all_viewables_and_return_info(
191195
"object_type": geode_functions.get_object_type(geode_object),
192196
"binary_light_viewable": binary_light_viewable.decode("utf-8"),
193197
"geode_object": data_entry.geode_object,
194-
"input_files": data_entry.additional_files,
198+
"input_files": data_entry.input_file,
199+
"additional_files": data_entry.additional_files,
195200
}
196201

197202

198-
def generate_native_viewable_and_light_viewable_from_object(geode_object, data):
199-
return save_all_viewables_and_return_info(geode_object, data)
203+
def generate_native_viewable_and_light_viewable_from_object(
204+
geode_object: str,
205+
data: Any
206+
) -> Dict[str, Any]:
207+
return save_all_viewables_and_return_info(geode_object, data, input_file=[])
200208

201209

202-
def generate_native_viewable_and_light_viewable_from_file(geode_object, input_filename):
203-
temp_data_entry = Data.create_and_get_id(
210+
def generate_native_viewable_and_light_viewable_from_file(
211+
geode_object: str,
212+
input_filename: str
213+
) -> Dict[str, Any]:
214+
temp_data_entry = Data.create(
204215
name="temp",
205-
geode_object=geode_object
216+
geode_object=geode_object,
217+
input_file=[input_filename],
218+
additional_files=[],
206219
)
207220

208221
data_path = create_data_folder_from_id(temp_data_entry.id)
@@ -213,7 +226,7 @@ def generate_native_viewable_and_light_viewable_from_file(geode_object, input_fi
213226
)
214227
shutil.copy2(full_input_filename, copied_full_path)
215228

216-
additional_files_copied = []
229+
additional_files_copied: List[str] = []
217230
additional = geode_functions.additional_files(geode_object, full_input_filename)
218231
for additional_file in additional.mandatory_files + additional.optional_files:
219232
if additional_file.is_missing:
@@ -236,5 +249,6 @@ def generate_native_viewable_and_light_viewable_from_file(geode_object, input_fi
236249
return save_all_viewables_and_return_info(
237250
geode_object,
238251
data,
252+
input_file=[input_filename],
239253
additional_files=additional_files_copied,
240254
)

tests/test_utils_functions.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def test_save_all_viewables_and_return_info(client):
119119
assert result["geode_object"] == geode_object
120120
assert result["input_files"] == input_file
121121

122-
db_entry = Data.query.get(result["id"])
122+
db_entry = database.session.get(Data, result["id"])
123123
assert db_entry is not None
124124
assert db_entry.name == data.name()
125125
assert db_entry.native_file_name == result["native_file_name"]
@@ -132,6 +132,25 @@ def test_save_all_viewables_and_return_info(client):
132132
assert os.path.exists(expected_data_path)
133133

134134

135+
def test_save_all_viewables_commits_to_db_properly(client):
136+
app = client.application
137+
with app.app_context():
138+
geode_object = "BRep"
139+
data = geode_functions.load(geode_object, "./tests/data/test.og_brep")
140+
input_file = ["test.og_brep"]
141+
result = utils_functions.save_all_viewables_and_return_info(
142+
geode_object, data, input_file
143+
)
144+
data_id = result["id"]
145+
db_entry_before = database.session.get(Data,data_id)
146+
assert db_entry_before is not None
147+
assert db_entry_before.native_file_name == result["native_file_name"]
148+
database.session.rollback()
149+
db_entry_after = database.session.get(Data, data_id)
150+
assert db_entry_after is not None, "database.session.commit() was not called - entry missing after rollback"
151+
assert db_entry_after.native_file_name == result["native_file_name"]
152+
153+
135154
def test_generate_native_viewable_and_light_viewable_from_object(client):
136155
app = client.application
137156
with app.app_context():

0 commit comments

Comments
 (0)