Source code for chatsky_ui.main

from contextlib import asynccontextmanager

from fastapi import APIRouter, FastAPI, Response
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse

from chatsky_ui.api.api_v1.api import api_router
from chatsky_ui.api.deps import get_index
from chatsky_ui.core.config import settings

index_dict = {}


[docs]@asynccontextmanager async def lifespan(app: FastAPI): if settings.temp_conf.exists(): settings.refresh_work_dir() index_dict["instance"] = get_index() await index_dict["instance"].load() yield settings.temp_conf.unlink(missing_ok=True)
app = FastAPI(title="DF Designer", lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) root_router = APIRouter()
[docs]@root_router.get("/app/{path:path}") async def route_static_file(path: str): if not settings.start_page.exists(): return HTMLResponse(content="frontend is not built") file_path = settings.static_files / path.split("/")[-1] if file_path.suffix in (".js", ".css", ".html", ".ttf"): return FileResponse(file_path) return FileResponse(settings.static_files / "index.html")
[docs]@root_router.get("/") async def root() -> Response: """Redirect '/' to index.html""" return RedirectResponse(url="/app")
app.include_router(root_router) app.include_router(api_router)