import logging.config import uvicorn from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.cron import CronTrigger from fastapi import FastAPI from fastapi import HTTPException, Request from fastapi.responses import JSONResponse from app.api.api_route import router from app.core.config import settings from app.core.record_api_count import count_api_calls from app.schemas.response_template import ResponseModel from app.service.recommend.service import load_resources from logging_env import LOGGER_CONFIG_DICT logging.config.dictConfig(LOGGER_CONFIG_DICT) logging.getLogger("pika").setLevel(logging.WARNING) from starlette.middleware.cors import CORSMiddleware logger = logging.getLogger(__name__) def get_application() -> FastAPI: application = FastAPI( title=settings.PROJECT_NAME, docs_url="/docs", redoc_url='/re-docs', openapi_url=f"{settings.API_PREFIX}/openapi.json", description=''' Base frame with FastAPI - Super Resolution API ''' ) application.add_middleware( CORSMiddleware, allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) application.middleware("http")(count_api_calls) application.include_router(router=router, prefix=settings.API_PREFIX) return application app = get_application() @app.exception_handler(HTTPException) async def http_exception_handler(request: Request, exc: HTTPException): return JSONResponse( status_code=exc.status_code, content=ResponseModel(code=exc.status_code, msg=exc.detail, data=exc.detail).dict() ) if __name__ == '__main__': uvicorn.run(app, host="0.0.0.0", port=8000)