Source code for pybdl.api.exceptions

"""Exceptions for pyBDL API client."""

from typing import Any


[docs] class GUSBDLError(Exception): """Base exception for all GUS BDL API errors.""" pass
[docs] class RateLimitError(GUSBDLError): """Raised when rate limit is exceeded.""" def __init__( self, retry_after: float, limit_info: dict[str, Any] | None = None, message: str | None = None, ) -> None: self.retry_after = retry_after self.limit_info = limit_info or {} if message is None: periods = ", ".join(f"{info['limit']} req/{info['period']}s" for info in self.limit_info.get("quotas", [])) message = f"Rate limit exceeded ({periods}). Retry after {retry_after:.1f}s." super().__init__(message)
[docs] class RateLimitDelayExceeded(RateLimitError): """Raised when required delay exceeds max_delay setting.""" def __init__( self, actual_delay: float, max_delay: float, limit_info: dict[str, Any] | None = None, ) -> None: self.actual_delay = actual_delay self.max_delay = max_delay message = f"Required delay ({actual_delay:.1f}s) exceeds maximum allowed delay ({max_delay:.1f}s)." super().__init__( retry_after=actual_delay, limit_info=limit_info, message=message, )