FastAPI_Base_Project
Шаблон
57 строк · 1.5 Кб
1from contextlib import asynccontextmanager2
3from fastapi import FastAPI, APIRouter4from fastapi.middleware.gzip import GZipMiddleware5from fastapi_cache import FastAPICache6from fastapi_cache.backends.redis import RedisBackend7from redis import asyncio as aioredis8
9# from src.api.v1 import doc_router, user_router
10from src.core import settings11from src.core.middleware.process_time import ProcessTimeMiddleware12from src.core.middleware.token_pass import PassByTokenMiddleware13from src.core.settings import ACCESS_TYPE14
15# add group router
16
17app = FastAPI()18
19
20# ping-pong router
21@app.get("/ping", tags=["Ping-Pong", ACCESS_TYPE.neutral])22async def ping_pong():23return "pong"24
25
26# Adding routers
27routers: list[APIRouter] = [28# doc_router,29# user_router,30]
31for router in routers:32app.include_router(router)33
34
35# Crete the dict of token_type_pass - uri
36pass_uri = {37settings.ACCESS_TYPE.access: (),38settings.ACCESS_TYPE.neutral: (),39settings.ACCESS_TYPE.refresh: (),40}
41for route in app.router.__dict__["routes"]:42if hasattr(route, "tags"):43pass_uri[route.__dict__["tags"][-1]] += (route.__dict__["path"],)44
45
46# Middlewares
47app.add_middleware(ProcessTimeMiddleware)48app.add_middleware(PassByTokenMiddleware, pass_uri=pass_uri)49app.add_middleware(GZipMiddleware)50
51
52# Adding caching
53@asynccontextmanager
54async def lifespan():55redis = aioredis.from_url(settings.redis.REDIS_URL, encoding="utf8", decode_responses=True)56FastAPICache.init(RedisBackend(redis), prefix="fastapi-cache")57yield58