-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathdatabase_session.py
More file actions
59 lines (48 loc) · 1.81 KB
/
database_session.py
File metadata and controls
59 lines (48 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import logging
from fastapi import Request
from fast_api.routes.fastapi_resolve_info import FastAPIResolveInfo
from middleware.query_mapping import path_query_map
from submodules.model.business_objects import general
from controller.auth import manager as auth_manager
from middleware import log_storage
from fast_api.routes.client_response import GENERIC_FAILURE_RESPONSE
import traceback
from submodules.model.session_wrapper import run_db_async_with_session
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
async def handle_db_session(request: Request, call_next):
info = _prepare_info(request)
general.get_ctx_token()
try:
info.context = {"request": request}
request.state.info = info
request.state.parsed = {}
log_request = await run_db_async_with_session(auth_manager.extract_state_info, request, "log_request")
length = request.headers.get("content-length")
if length and int(length) > 0:
await log_storage.set_request_data(request)
response = await call_next(request)
if log_request:
# after call next so the path_params are mapped
await log_storage.log_request(request)
return response
except Exception:
print(traceback.format_exc(), flush=True)
return GENERIC_FAILURE_RESPONSE
finally:
general.remove_and_refresh_session()
def _prepare_info(request):
field_name = None
parent_type = None
for path, query in path_query_map.items():
if path in request.url.path:
field_name = query
if request.method == "GET":
parent_type = "Query"
else:
parent_type = "Mutation"
return FastAPIResolveInfo(
context={"request": None},
field_name=field_name,
parent_type=parent_type,
)