presenton/servers/fastapi/api/main.py

51 lines
1.3 KiB
Python

from contextlib import asynccontextmanager
import os
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from sqlmodel import SQLModel
from api.v1.ppt.router import API_V1_PPT_ROUTER
from services import SQL_ENGINE
from utils.check_llm_model_availability import check_llm_model_availability
from utils.get_env import get_can_change_keys_env
from utils.user_config import update_env_with_user_config
# Lifespan
@asynccontextmanager
async def app_lifespan(_: FastAPI):
os.makedirs(os.getenv("APP_DATA_DIRECTORY"), exist_ok=True)
SQLModel.metadata.create_all(SQL_ENGINE)
await check_llm_model_availability()
yield
# App
APP = FastAPI(lifespan=app_lifespan)
# Static files
APP.mount("/static", StaticFiles(directory="static"), name="static")
# APP.mount("/static/app-data", StaticFiles(directory=get_app_data_directory_env()))
# Routers
APP.include_router(API_V1_PPT_ROUTER)
# Middlewares
origins = ["*"]
APP.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@APP.middleware("http")
async def update_env_middleware(request: Request, call_next):
if get_can_change_keys_env() != "false":
update_env_with_user_config()
return await call_next(request)