diff --git a/app/api/__init__.py b/app/api/__init__.py index 039b4e0..7a57d3a 100644 --- a/app/api/__init__.py +++ b/app/api/__init__.py @@ -5,7 +5,7 @@ from app.core.logger import make_log app = Sanic(__name__) -from app.api.middleware import attach_user_to_request, close_db_session +from app.api.middleware import attach_user_to_request, close_db_session, close_request_handler app.register_middleware(attach_user_to_request, "request") app.register_middleware(close_db_session, "response") @@ -30,15 +30,13 @@ app.add_route(s_api_v1_custodial_upload_content, "/api/v1/custodial.uploadConten @app.exception(BaseException) async def s_handle_exception(request, exception): - try: - request.ctx.db_session.close() - except BaseException as e: - pass + response_buffer = response.json({"error": "An internal server error occurred"}, status=500) + request, response_buffer = await close_request_handler(request, response_buffer) try: raise exception except BaseException as e: make_log("sanic_exception", f"Exception: {e}" + '\n' + str(traceback.format_exc()), level='error') - return response.json({"error": "An internal server error occurred"}, status=500) + return response_buffer diff --git a/app/api/middleware.py b/app/api/middleware.py index 29a6475..6275b33 100644 --- a/app/api/middleware.py +++ b/app/api/middleware.py @@ -2,6 +2,7 @@ from app.core.models.user import User from app.core.models.keys import KnownKey from app.core.storage import Session from app.core.logger import make_log +from sanic import response as sanic_response from base58 import b58encode, b58decode @@ -58,15 +59,20 @@ async def attach_user_to_request(request): await try_authorization(request) -async def close_db_session(request, response): +async def close_request_handler(request, response): if request.method == 'OPTIONS': - response = response.text("OK") + response = sanic_response.text("OK") try: request.ctx.db_session.close() except BaseException as e: pass + return request, response + + +async def close_db_session(request, response): + request, response = await close_request_handler(request, response) response.headers["Access-Control-Allow-Origin"] = "*" response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS" response.headers["Access-Control-Allow-Headers"] = "Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token, Authorization, Refer"