exceptions.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """Exception hierarchy for chattolib."""
  2. from __future__ import annotations
  3. from typing import Any
  4. class ChattoError(Exception):
  5. """Base exception for all chattolib errors."""
  6. class ChattoConnectError(ChattoError):
  7. """A ConnectRPC call returned a protocol error.
  8. The Chatto Connect API returns errors as JSON bodies of the shape
  9. ``{"code": "<code>", "message": "<message>", "details": [...]}`` alongside a
  10. non-2xx HTTP status. See https://connectrpc.com/docs/protocol#error-codes for
  11. the canonical code list.
  12. """
  13. def __init__(
  14. self,
  15. code: str,
  16. message: str,
  17. *,
  18. status_code: int | None = None,
  19. details: list[dict[str, Any]] | None = None,
  20. ) -> None:
  21. self.code = code
  22. self.message = message
  23. self.status_code = status_code
  24. self.details = details or []
  25. super().__init__(f"{code}: {message}")
  26. class ChattoAuthError(ChattoError):
  27. """Authentication failed (missing token, expired session, or bad credentials)."""