Spaces:
Paused
Paused
| """Application implementation - ASGI.""" | |
| import os | |
| from fastapi import FastAPI, Request | |
| from fastapi.exceptions import RequestValidationError | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.responses import JSONResponse | |
| from fastapi.staticfiles import StaticFiles | |
| from loguru import logger | |
| from app.config import config | |
| from app.models.exception import HttpException | |
| from app.router import root_api_router | |
| from app.utils import utils | |
| def exception_handler(request: Request, e: HttpException): | |
| return JSONResponse( | |
| status_code=e.status_code, | |
| content=utils.get_response(e.status_code, e.data, e.message), | |
| ) | |
| def validation_exception_handler(request: Request, e: RequestValidationError): | |
| return JSONResponse( | |
| status_code=400, | |
| content=utils.get_response( | |
| status=400, data=e.errors(), message="field required" | |
| ), | |
| ) | |
| def get_application() -> FastAPI: | |
| """Initialize FastAPI application. | |
| Returns: | |
| FastAPI: Application object instance. | |
| """ | |
| instance = FastAPI( | |
| title=config.project_name, | |
| description=config.project_description, | |
| version=config.project_version, | |
| debug=False, | |
| ) | |
| instance.include_router(root_api_router) | |
| instance.add_exception_handler(HttpException, exception_handler) | |
| instance.add_exception_handler(RequestValidationError, validation_exception_handler) | |
| return instance | |
| app = get_application() | |
| # Configures the CORS middleware for the FastAPI app | |
| cors_allowed_origins_str = os.getenv("CORS_ALLOWED_ORIGINS", "") | |
| origins = cors_allowed_origins_str.split(",") if cors_allowed_origins_str else ["*"] | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=origins, | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| task_dir = utils.task_dir() | |
| app.mount( | |
| "/tasks", StaticFiles(directory=task_dir, html=True, follow_symlink=True), name="" | |
| ) | |
| public_dir = utils.public_dir() | |
| app.mount("/", StaticFiles(directory=public_dir, html=True), name="") | |
| def shutdown_event(): | |
| logger.info("shutdown event") | |
| def startup_event(): | |
| logger.info("startup event") | |