main.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import logging
  2. from fastapi import FastAPI, HTTPException
  3. from fastapi.responses import JSONResponse
  4. from app.providers import (
  5. logging_provider,
  6. app_provider,
  7. handle_exception,
  8. pagination_provider,
  9. route_provider,
  10. auth_provider,
  11. )
  12. from config.config import settings
  13. import uvicorn
  14. def create_app() -> FastAPI:
  15. _app = FastAPI()
  16. register(_app, logging_provider)
  17. register(_app, app_provider)
  18. register(_app, handle_exception)
  19. register(_app, pagination_provider)
  20. register(_app, auth_provider)
  21. boot(_app, route_provider)
  22. return _app
  23. def register(_app, provider):
  24. provider.register(_app)
  25. logging.info(provider.__name__ + " registered")
  26. def boot(_app, provider):
  27. provider.boot(_app)
  28. logging.info(provider.__name__ + " booted")
  29. app = create_app()
  30. @app.get("/")
  31. async def root():
  32. return "Welcome to Open Assistant Api"
  33. if __name__ == "__main__":
  34. # app.run(host="0.0.0.0", port=settings.SERVER_PORT)
  35. uvicorn.run(
  36. app=app, # "main:app",
  37. host=settings.SERVER_HOST,
  38. port=settings.SERVER_PORT,
  39. # workers=settings.SERVER_WORKERS,
  40. reload=settings.ENV == "local",
  41. )
  42. # 添加全局异常处理器
  43. @app.exception_handler(HTTPException)
  44. async def http_exception_handler(request, exc: HTTPException):
  45. return JSONResponse(
  46. status_code=exc.status_code,
  47. content={"detail": exc.detail, "message": "Resource not found."},
  48. )