"""FastAPI application factory.""" import os import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from starlette.middleware.sessions import SessionMiddleware from torrent2drive.config import STATIC_DIR from torrent2drive.routes import register_routes from torrent2drive.session import start_gc_loop def create_app() -> FastAPI: application = FastAPI(title="Torrent2Space") application.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) application.add_middleware( SessionMiddleware, secret_key=os.environ.get("SESSION_SECRET", "torrent2space-change-me"), same_site="lax", ) register_routes(application) assets_dir = os.path.join(STATIC_DIR, "assets") if os.path.isdir(assets_dir): application.mount("/assets", StaticFiles(directory=assets_dir), name="assets") if os.path.isdir(STATIC_DIR): application.mount("/static", StaticFiles(directory=STATIC_DIR), name="static") return application app = create_app() start_gc_loop() def main(): uvicorn.run( "torrent2drive.app:app", host="0.0.0.0", port=int(os.environ.get("PORT", "7860")), reload=os.environ.get("T2D_RELOAD", "").lower() in ("1", "true", "yes"), ) if __name__ == "__main__": main()