23 lines
857 B
Python
23 lines
857 B
Python
from __future__ import annotations
|
|
|
|
|
|
class DomainError(Exception):
|
|
"""A domain rejection with a stable API error payload."""
|
|
|
|
def __init__(self, code: str, message: str, *, refs: list | None = None,
|
|
recovery: str = "none", status: int = 422):
|
|
super().__init__(message)
|
|
self.code, self.message, self.status = code, message, status
|
|
self.refs, self.recovery = refs or [], recovery
|
|
|
|
def payload(self) -> dict:
|
|
return {"code": self.code, "message": self.message,
|
|
"retryable": self.recovery == "retry_same_request",
|
|
"related_refs": self.refs, "recovery_action": self.recovery,
|
|
"retry_after_seconds": None}
|
|
|
|
|
|
def require(condition: bool, code: str, message: str, **kwargs) -> None:
|
|
if not condition:
|
|
raise DomainError(code, message, **kwargs)
|