""" 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 tags_metadata = [ { "name": "User", "description": "User related operations, includes getting information about the current user", } ] app = FastAPI( swagger_ui_init_oauth={ "clientId": auth_settings.CLIENT_ID, "usePkceWithAuthorizationCodeGrant": True, "scopes": "openid profile email", }, openapi_tags=tags_metadata, ) # Type inspection disabled for middleware injection. # Known bug in FastAPI type checking: https://github.com/astral-sh/ty/issues/1635 # noinspection PyTypeChecker app.add_middleware(SessionMiddleware, secret_key=settings.SECRET_KEY.get_secret_value()) # noinspection PyTypeChecker 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)