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