-
Notifications
You must be signed in to change notification settings - Fork 3
/
exception_handler.py
32 lines (24 loc) · 1.28 KB
/
exception_handler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import traceback
from fastapi import Request
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import HTTPException, RequestValidationError
from fastapi.responses import JSONResponse
from app.utils.slack_notification_utils import send_slack_message
from app.middlewares.request_id_injection import request_id_contextvar
async def validation_exception_handler(request: Request, exc: RequestValidationError):
return JSONResponse(
status_code=400,
content=jsonable_encoder({"message": "Validation error", "detail": exc.errors()[0]["msg"]}),
)
async def http_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(status_code=exc.status_code, content={"success": False, "message": exc.detail})
async def exception_handler(request: Request, exc: Exception):
error_message = f"Error: {str(exc)}"
# Include the traceback in the response for debugging purposes
traceback_str = traceback.format_exc(chain=False)
send_slack_message(
{
"text": f"```\nRequestID: {request_id_contextvar.get()}\nRequest URL: {str(request.url)} \nRequest_method: {str(request.method)} \nTraceback: {traceback_str}```"
}
)
return JSONResponse(status_code=500, content={"success": False, "message": error_message})