"""Application implementation - ASGI.""" from fastapi import FastAPI, Request from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse from loguru import logger from fastapi.staticfiles import StaticFiles 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() public_dir = utils.public_dir() app.mount("/", StaticFiles(directory=public_dir, html=True), name="") @app.on_event("shutdown") def shutdown_event(): logger.info("shutdown event") @app.on_event("startup") def startup_event(): logger.info("startup event")