58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
"""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)
|