Spaces:
Sleeping
Sleeping
| """ | |
| FastAPI application entry point for the PDF Accessibility Pipeline web interface. | |
| """ | |
| from contextlib import asynccontextmanager | |
| import os | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from routes import upload, pipeline, elements, visualizations, download, stages, auth, sessions | |
| async def lifespan(app: FastAPI): | |
| import database | |
| database.init_db() | |
| from config import PIPELINE_DIR, JAR_PATH, YOLO_MODEL_PATH | |
| checks = [ | |
| (PIPELINE_DIR.is_dir(), f"PIPELINE_DIR : {PIPELINE_DIR}"), | |
| (JAR_PATH.exists(), f"pdftagger.jar : {JAR_PATH}"), | |
| (YOLO_MODEL_PATH.exists(), f"YOLO model : {YOLO_MODEL_PATH}"), | |
| ] | |
| for ok, label in checks: | |
| print(f"[startup] {'OK ' if ok else 'MISSING'} {label}", flush=True) | |
| yield | |
| app = FastAPI(title="PDF Accessibility Pipeline API", version="0.1.0", lifespan=lifespan) | |
| # CORS — allow the Vite dev server, local React app, and any configured public origins | |
| _extra_origins = [ | |
| o.strip() | |
| for o in os.environ.get("CORS_ORIGINS", "").split(",") | |
| if o.strip() | |
| ] | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=[ | |
| "http://localhost:5173", | |
| "http://localhost:3000", | |
| "https://itagpdf.com", | |
| "https://www.itagpdf.com", | |
| *_extra_origins, | |
| ], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Routers | |
| app.include_router(upload.router, prefix="/api") | |
| app.include_router(pipeline.router, prefix="/api") | |
| app.include_router(elements.router, prefix="/api") | |
| app.include_router(visualizations.router, prefix="/api") | |
| app.include_router(download.router, prefix="/api") | |
| app.include_router(stages.router, prefix="/api") | |
| app.include_router(auth.router, prefix="/api") | |
| app.include_router(sessions.router, prefix="/api") | |
| async def health(): | |
| return {"status": "ok"} | |
| if __name__ == "__main__": | |
| import uvicorn | |
| from config import BACKEND_PORT | |
| uvicorn.run("main:app", host="0.0.0.0", port=BACKEND_PORT, reload=True) | |