Skip to content

Commit 80715e5

Browse files
committed
fix(Session): handle session before_request and teardown
1 parent 8b4c24e commit 80715e5

File tree

5 files changed

+28
-34
lines changed

5 files changed

+28
-34
lines changed

requirements.new

Whitespace-only changes.

src/opengeodeweb_back/app.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from opengeodeweb_back import utils_functions, app_config
1515
from opengeodeweb_back.routes import blueprint_routes
1616
from opengeodeweb_back.routes.models import blueprint_models
17-
from opengeodeweb_microservice.database.connection import init_database
17+
from opengeodeweb_microservice.database import connection
1818

1919

2020
""" Global config """
@@ -39,6 +39,16 @@
3939
)
4040

4141

42+
@app.before_request
43+
def before_request() -> None:
44+
utils_functions.before_request(flask.current_app)
45+
46+
47+
@app.teardown_request
48+
def teardown_request(exception: BaseException | None) -> None:
49+
utils_functions.teardown_request(flask.current_app, exception)
50+
51+
4252
app.register_blueprint(
4353
blueprint_routes.routes,
4454
url_prefix="/opengeodeweb_back",
@@ -146,7 +156,7 @@ def run_server() -> None:
146156
app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{db_path}"
147157
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
148158

149-
init_database(db_path)
159+
connection.init_database(db_path)
150160
print(f"Database initialized at: {db_path}", flush=True)
151161

152162
app.run(debug=args.debug, host=args.host, port=args.port, ssl_context=SSL)

src/opengeodeweb_back/routes/blueprint_routes.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,6 @@
1616
routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back")
1717

1818

19-
@routes.before_request
20-
def before_request():
21-
if "ping" not in flask.request.path:
22-
utils_functions.increment_request_counter(flask.current_app)
23-
24-
25-
@routes.teardown_request
26-
def teardown_request(exception):
27-
28-
if "ping" not in flask.request.path:
29-
utils_functions.decrement_request_counter(flask.current_app)
30-
utils_functions.update_last_request_time(flask.current_app)
31-
32-
3319
routes.register_blueprint(
3420
blueprint_models.routes,
3521
url_prefix=blueprint_models.routes.url_prefix,

src/opengeodeweb_back/utils_functions.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,28 @@ def update_last_request_time(current_app: flask.Flask) -> None:
4141
current_app.config.update(LAST_REQUEST_TIME=LAST_REQUEST_TIME)
4242

4343

44+
def terminate_session(exception: BaseException | None) -> None:
45+
session = flask.g.pop("session", None)
46+
if session is None:
47+
return
48+
if exception is None:
49+
session.commit()
50+
else:
51+
session.rollback()
52+
session.close()
53+
54+
4455
def before_request(current_app: flask.Flask) -> None:
4556
increment_request_counter(current_app)
57+
flask.g.session = get_session()
4658

4759

48-
def teardown_request(current_app: flask.Flask) -> None:
60+
def teardown_request(
61+
current_app: flask.Flask, exception: BaseException | None = None
62+
) -> None:
4963
decrement_request_counter(current_app)
5064
update_last_request_time(current_app)
65+
terminate_session(exception)
5166

5267

5368
def kill_task(current_app: flask.Flask) -> None:
@@ -202,10 +217,6 @@ def save_all_viewables_and_return_info(
202217
data_entry.viewable_file_name = os.path.basename(saved_viewable_file_path)
203218
data_entry.light_viewable = os.path.basename(saved_light_viewable_file_path)
204219

205-
session = get_session()
206-
if session:
207-
session.commit()
208-
209220
return {
210221
"native_file_name": data_entry.native_file_name,
211222
"viewable_file_name": data_entry.viewable_file_name,
@@ -228,7 +239,6 @@ def generate_native_viewable_and_light_viewable_from_file(
228239
geode_object: str, input_filename: str
229240
) -> dict[str, Any]:
230241

231-
session = get_session()
232242
temp_data_entry = Data.create(
233243
geode_object=geode_object,
234244
input_file=input_filename,
@@ -260,11 +270,6 @@ def generate_native_viewable_and_light_viewable_from_file(
260270

261271
data = geode_functions.load(geode_object, copied_full_path)
262272

263-
if session:
264-
session.delete(temp_data_entry)
265-
session.flush()
266-
session.commit()
267-
268273
return save_all_viewables_and_return_info(
269274
geode_object,
270275
data,

tests/test_utils_functions.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,6 @@ def test_save_all_viewables_commits_to_db(client):
143143
db_entry_before = Data.get(data_id)
144144
assert db_entry_before is not None
145145
assert db_entry_before.native_file_name == result["native_file_name"]
146-
session = get_session()
147-
session.rollback()
148-
db_entry_after = Data.get(data_id)
149-
assert (
150-
db_entry_after is not None
151-
), "database.session.commit() was not called - entry missing after rollback"
152-
assert db_entry_after.native_file_name == result["native_file_name"]
153146

154147

155148
def test_generate_native_viewable_and_light_viewable_from_object(client):

0 commit comments

Comments
 (0)