diff --git a/requirements.new b/requirements.new deleted file mode 100644 index e69de29b..00000000 diff --git a/requirements.txt b/requirements.txt index 3b9ca443..1972ac0e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -60,4 +60,3 @@ werkzeug==3.1.2 # flask # flask-cors -opengeodeweb-microservice==1.*,>=1.0.4 diff --git a/src/opengeodeweb_back/app.py b/src/opengeodeweb_back/app.py index 1c5e9779..bda8bba8 100644 --- a/src/opengeodeweb_back/app.py +++ b/src/opengeodeweb_back/app.py @@ -14,7 +14,7 @@ from opengeodeweb_back import utils_functions, app_config from opengeodeweb_back.routes import blueprint_routes from opengeodeweb_back.routes.models import blueprint_models -from opengeodeweb_microservice.database.connection import init_database +from opengeodeweb_microservice.database import connection """ Global config """ @@ -39,6 +39,16 @@ ) +@app.before_request +def before_request() -> None: + utils_functions.before_request(flask.current_app) + + +@app.teardown_request +def teardown_request(exception: BaseException | None) -> None: + utils_functions.teardown_request(flask.current_app, exception) + + app.register_blueprint( blueprint_routes.routes, url_prefix="/opengeodeweb_back", @@ -146,7 +156,7 @@ def run_server() -> None: app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{db_path}" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False - init_database(db_path) + connection.init_database(db_path) print(f"Database initialized at: {db_path}", flush=True) app.run(debug=args.debug, host=args.host, port=args.port, ssl_context=SSL) diff --git a/src/opengeodeweb_back/routes/blueprint_routes.py b/src/opengeodeweb_back/routes/blueprint_routes.py index cfd5684a..13b3bfaf 100644 --- a/src/opengeodeweb_back/routes/blueprint_routes.py +++ b/src/opengeodeweb_back/routes/blueprint_routes.py @@ -16,20 +16,6 @@ routes = flask.Blueprint("routes", __name__, url_prefix="/opengeodeweb_back") -@routes.before_request -def before_request(): - if "ping" not in flask.request.path: - utils_functions.increment_request_counter(flask.current_app) - - -@routes.teardown_request -def teardown_request(exception): - - if "ping" not in flask.request.path: - utils_functions.decrement_request_counter(flask.current_app) - utils_functions.update_last_request_time(flask.current_app) - - routes.register_blueprint( blueprint_models.routes, url_prefix=blueprint_models.routes.url_prefix, diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index c5695197..f60a104a 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -41,13 +41,28 @@ def update_last_request_time(current_app: flask.Flask) -> None: current_app.config.update(LAST_REQUEST_TIME=LAST_REQUEST_TIME) +def terminate_session(exception: BaseException | None) -> None: + session = flask.g.pop("session", None) + if session is None: + return + if exception is None: + session.commit() + else: + session.rollback() + session.close() + + def before_request(current_app: flask.Flask) -> None: increment_request_counter(current_app) + flask.g.session = get_session() -def teardown_request(current_app: flask.Flask) -> None: +def teardown_request( + current_app: flask.Flask, exception: BaseException | None = None +) -> None: decrement_request_counter(current_app) update_last_request_time(current_app) + terminate_session(exception) def kill_task(current_app: flask.Flask) -> None: @@ -202,10 +217,6 @@ def save_all_viewables_and_return_info( data_entry.viewable_file_name = os.path.basename(saved_viewable_file_path) data_entry.light_viewable = os.path.basename(saved_light_viewable_file_path) - session = get_session() - if session: - session.commit() - return { "native_file_name": data_entry.native_file_name, "viewable_file_name": data_entry.viewable_file_name, @@ -228,7 +239,6 @@ def generate_native_viewable_and_light_viewable_from_file( geode_object: str, input_filename: str ) -> dict[str, Any]: - session = get_session() temp_data_entry = Data.create( geode_object=geode_object, input_file=input_filename, @@ -260,11 +270,6 @@ def generate_native_viewable_and_light_viewable_from_file( data = geode_functions.load(geode_object, copied_full_path) - if session: - session.delete(temp_data_entry) - session.flush() - session.commit() - return save_all_viewables_and_return_info( geode_object, data, diff --git a/tests/test_utils_functions.py b/tests/test_utils_functions.py index 4aae5408..7f7e9786 100644 --- a/tests/test_utils_functions.py +++ b/tests/test_utils_functions.py @@ -143,13 +143,6 @@ def test_save_all_viewables_commits_to_db(client): db_entry_before = Data.get(data_id) assert db_entry_before is not None assert db_entry_before.native_file_name == result["native_file_name"] - session = get_session() - session.rollback() - db_entry_after = Data.get(data_id) - assert ( - db_entry_after is not None - ), "database.session.commit() was not called - entry missing after rollback" - assert db_entry_after.native_file_name == result["native_file_name"] def test_generate_native_viewable_and_light_viewable_from_object(client):