Source code for jp_diet_search.exceptions
from __future__ import annotations
from typing import List, Optional
[docs]
class DietSearchError(Exception):
"""Base exception for jp-diet-search."""
pass
[docs]
class DietSearchRequestError(DietSearchError):
"""Client-side errors (invalid params, misuse, parse failures)."""
pass
[docs]
class DietSearchParseError(DietSearchRequestError):
"""Raised when API responses cannot be parsed or decoded."""
pass
[docs]
class DietSearchAPIError(DietSearchError):
"""Server/API-side errors (HTTP errors, API error payloads)."""
def __init__(self, message: str, details: Optional[List[str]] = None):
self.message = message
self.details = details or []
super().__init__(self.__str__())
def __str__(self) -> str:
if self.details:
return f"{self.message} (details: {'; '.join(self.details)})"
return self.message
[docs]
class DietSearchRateLimitError(DietSearchAPIError):
"""Raised when the API signals rate limiting (e.g. HTTP 429)."""
pass