Переглянути джерело

add missing data exception handler

highing666 2 роки тому
батько
коміт
dd4e1cfe9b
2 змінених файлів з 12 додано та 22 видалено
  1. 9 14
      app/api/errors/iot.py
  2. 3 8
      app/main.py

+ 9 - 14
app/api/errors/iot.py

@@ -1,20 +1,15 @@
-from functools import wraps
+from fastapi import FastAPI, Request
+from fastapi.responses import JSONResponse
 
-from fastapi import HTTPException
+app = FastAPI()
 
 
 class MissingIOTDataError(Exception):
-    def __init__(self):
-        super().__init__(f"Missing IOT data error.")
+    pass
 
 
-def missing_iot_data_handler(func):
-    @wraps(func)
-    async def inner_function(*args, **kwargs):
-        try:
-            results = await func(*args, **kwargs)
-        except MissingIOTDataError:
-            raise HTTPException(status_code=400, detail="Missing data.")
-        return results
-
-    return inner_function
+async def missing_data_exception_handler(request: Request, exc: MissingIOTDataError):
+    return JSONResponse(
+        status_code=400,
+        content={"message": "Missing data"}
+    )

+ 3 - 8
app/main.py

@@ -1,12 +1,11 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from pathlib import Path
 
 import uvicorn
 from fastapi import FastAPI
-from loguru import logger
 
+from app.api.errors.iot import MissingIOTDataError, missing_data_exception_handler
 from app.api.routers import (
     algorithms,
     targets,
@@ -25,12 +24,6 @@ from app.db.session import Base, engine
 Base.metadata.create_all(bind=engine)
 
 logging.getLogger().handlers = [InterceptHandler()]
-# logger.add(
-#     Path(settings.LOGS_DIR, "env_fastapi.log"),
-#     level="INFO",
-#     rotation="00:00",
-#     encoding="utf-8",
-# )
 
 
 def get_application() -> FastAPI:
@@ -51,6 +44,8 @@ def get_application() -> FastAPI:
     application.include_router(space.router, prefix="/room", tags=["Spaces"])
     application.include_router(targets.router, prefix="/target", tags=["Targets"])
 
+    application.add_exception_handler(MissingIOTDataError, missing_data_exception_handler)
+
     return application