37 lines
865 B
Python
37 lines
865 B
Python
from typing import Any, Optional
|
|
|
|
|
|
def map_status_to_code(status_code: int) -> str:
|
|
if status_code == 400:
|
|
return "bad_request"
|
|
if status_code == 401:
|
|
return "unauthorized"
|
|
if status_code == 403:
|
|
return "forbidden"
|
|
if status_code == 404:
|
|
return "not_found"
|
|
if status_code == 409:
|
|
return "conflict"
|
|
if status_code == 429:
|
|
return "rate_limited"
|
|
if status_code >= 500:
|
|
return "server_error"
|
|
return "error"
|
|
|
|
|
|
def build_error_payload(
|
|
*,
|
|
status_code: int,
|
|
message: str,
|
|
details: Optional[Any] = None,
|
|
code: Optional[str] = None,
|
|
) -> dict:
|
|
payload = {
|
|
"code": code or map_status_to_code(status_code),
|
|
"message": message,
|
|
"status": status_code,
|
|
}
|
|
if details is not None:
|
|
payload["details"] = details
|
|
return payload
|