import uuid from rest_framework.views import exception_handler from rest_framework.response import Response def custom_exception_handler(exc, context): response = exception_handler(exc, context) if response is None: return None request = context.get("request") request_id = ( getattr(request, "META", {}).get("HTTP_X_REQUEST_ID") or str(uuid.uuid4()) ) code = getattr(exc, "default_code", "error") message = str(exc.detail) if hasattr(exc, "detail") else str(exc) details = exc.detail if isinstance(getattr(exc, "detail", None), dict) else {} response.data = { "error": { "code": code, "message": message, "details": details, "request_id": request_id, } } return response