ForcePilot/backend/package/yuxi/channels/adapters/bluebubbles/exceptions.py

31 lines
1.2 KiB
Python
Raw Normal View History

from yuxi.channels.exceptions import ChannelException
class BlueBubblesError(ChannelException):
def __init__(self, message: str, retryable: bool = False, retry_after_ms: int = 0):
super().__init__(message, retryable=retryable, retry_after_ms=retry_after_ms)
class BlueBubblesHTTPError(BlueBubblesError):
def __init__(self, status_code: int, message: str = "", headers: dict | None = None):
self.status_code = status_code
self.headers = headers or {}
retryable = status_code >= 500 or status_code == 429
detail = f"HTTP {status_code}: {message}" if message else f"HTTP {status_code}"
super().__init__(detail, retryable=retryable)
class BlueBubblesConnectionError(BlueBubblesError):
def __init__(self, message: str = ""):
super().__init__(message or "BlueBubbles connection failed", retryable=True, retry_after_ms=5000)
class BlueBubblesAuthenticationError(BlueBubblesError):
def __init__(self, message: str = ""):
super().__init__(message or "BlueBubbles authentication failed", retryable=False)
class TapbackError(BlueBubblesError):
def __init__(self, message: str = ""):
super().__init__(message or "Tapback operation failed", retryable=False)