"""chart.amow.com FastAPI backend.""" import asyncio from contextlib import asynccontextmanager from pathlib import Path from fastapi import FastAPI from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles from app.api.meta import router as meta_router from app.api.routes import router as api_router from app.api.ws import router as ws_router from app.config import Settings from app.runtime import Runtime BASE_DIR = Path(__file__).parent STATIC_DIR = BASE_DIR / "static" @asynccontextmanager async def lifespan(app: FastAPI): runtime = Runtime(Settings()) app.state.runtime = runtime task = await runtime.start() yield runtime.stream.stop() task.cancel() try: await task except asyncio.CancelledError: pass app = FastAPI(title="chart", lifespan=lifespan) app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static") app.include_router(meta_router) app.include_router(api_router) app.include_router(ws_router) @app.get("/") def index(): return FileResponse(STATIC_DIR / "index.html")