"""Exception classes for Summarizer API errors.""" from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from httpx import Response class SummarizerAPIError(Exception): """Base exception for Summarizer API errors.""" def __init__(self, message: str, status_code: int | None = None) -> None: super().__init__(message) self.message = message self.status_code = status_code def __str__(self) -> str: if self.status_code: return f"[{self.status_code}] {self.message}" return self.message class SummarizerConnectionError(SummarizerAPIError): """Raised when connection to the API fails.""" def __init__(self, message: str = "Failed to connect to Summarizer API") -> None: super().__init__(message) class SummarizerTimeoutError(SummarizerAPIError): """Raised when API request times out.""" def __init__(self, message: str = "Request to Summarizer API timed out") -> None: super().__init__(message) class SummarizerBadRequestError(SummarizerAPIError): """Raised for 400 Bad Request errors.""" def __init__(self, message: str, response: Response | None = None) -> None: super().__init__(message, status_code=400) self.response = response class SummarizerServerError(SummarizerAPIError): """Raised for 5xx server errors.""" def __init__(self, message: str, status_code: int = 500) -> None: super().__init__(message, status_code=status_code) class SummarizerRateLimitError(SummarizerAPIError): """Raised when rate limit is exceeded.""" def __init__(self, message: str = "Rate limit exceeded") -> None: super().__init__(message, status_code=429)