Source code for scapi.exceptions
from dataclasses import dataclass
from typing import Any, ClassVar, Optional, Self
from yarl import URL
[docs]
class ScApiException(Exception):
"""Base exception for `scapi` errors."""
pass
[docs]
class ClientError(ScApiException):
"""Client request related error."""
pass
[docs]
class CredentialsError(ClientError):
"""Client missing credentials."""
pass
[docs]
@dataclass
class RequestError(ClientError):
"""HTTP request error."""
data: Any
status: int
method: str
url: URL
_registry: ClassVar[dict[int, type[Self]]] = {}
def __init_subclass__(cls, codes: Optional[set[int]] = None, **kwargs):
super().__init_subclass__(**kwargs)
if codes:
for code in codes:
cls._registry[code] = cls
@property
def message(self) -> str:
return str(self.data)[:500]
def __str__(self):
return f"HTTP {self.status} - {self.message}"
[docs]
class BadRequestError(RequestError, codes={400}):
"""Invalid request parameters or malformed data."""
pass
[docs]
class UnauthorizedError(RequestError, codes={401}):
"""Missing or invalid authentication credentials."""
pass
[docs]
class NotFoundError(RequestError, codes={404}):
"""Requested resource not found."""
pass
[docs]
class RateLimitError(RequestError, codes={429}):
"""API rate limit exceeded."""
pass
[docs]
class ServerError(RequestError, codes={500, 502, 503, 504}):
"""Server-side error during request."""
pass