Files
xiaobaifupan/app/backend/http/errors.py
T

32 lines
973 B
Python

from __future__ import annotations
from http import HTTPStatus
from typing import Any
STATUS_CODES = {
HTTPStatus.BAD_REQUEST: "bad_request",
HTTPStatus.UNAUTHORIZED: "authentication_required",
HTTPStatus.FORBIDDEN: "access_denied",
HTTPStatus.NOT_FOUND: "not_found",
HTTPStatus.CONFLICT: "conflict",
HTTPStatus.INTERNAL_SERVER_ERROR: "internal_error",
HTTPStatus.SERVICE_UNAVAILABLE: "service_unavailable",
}
def normalize_error_payload(
payload: dict[str, Any], status: int | HTTPStatus, request_id: str,
) -> dict[str, Any]:
if "error" not in payload:
return payload
status_value = HTTPStatus(int(status))
message = str(payload.get("message") or payload.get("error") or status_value.phrase)
return {
**payload,
"error": message,
"code": str(payload.get("code") or STATUS_CODES.get(status_value) or "request_failed"),
"message": message,
"request_id": request_id,
}