""" Application root file: Inits the FastAPI application """ from contextlib import asynccontextmanager from typing import AsyncGenerator from fastapi import FastAPI from starlette.middleware.sessions import SessionMiddleware from starlette.middleware.cors import CORSMiddleware from src.config import settings from src.api import api_router from src.auth.config import auth_settings @asynccontextmanager async def lifespan(_application: FastAPI) -> AsyncGenerator: # Startup yield # Shutdown if settings.ENVIRONMENT.is_deployed: # Do this only on prod pass app = FastAPI( swagger_ui_init_oauth={ "clientId": auth_settings.CLIENT_ID, "usePkceWithAuthorizationCodeGrant": True, "scopes": "openid profile email", } ) app.add_middleware(SessionMiddleware, secret_key=settings.SECRET_KEY.get_secret_value()) app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_origin_regex=settings.CORS_ORIGINS_REGEX, allow_credentials=True, allow_methods=("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"), allow_headers=settings.CORS_HEADERS, ) app.include_router(api_router)