-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
40 lines (30 loc) · 935 Bytes
/
app.py
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
from typing import Callable
from fastapi import FastAPI, Request
from fastapi.responses import Response
from database.connect import db_session
from api.countries import router as countries_router
from api.products import router as products_router
from api.clusters import router as clusters_router
app = FastAPI()
routers = {
'countries': countries_router,
'clusters': clusters_router,
'products': products_router,
}
def include_router(api, key):
api.include_router(
routers[key],
prefix='/' + '_'.join(key.split()),
tags=[key]
)
return api
for router in routers.keys():
include_router(app, router)
@app.middleware('http')
async def db_session_middleware(request: Request, call_next: Callable) -> Response:
try:
request.state.db = next(db_session())
response = await call_next(request)
finally:
request.state.db.close()
return response