"""Custom exceptions for pyvergeos.
Note: Exception names are prefixed with 'Verge' to avoid shadowing
Python builtins (ConnectionError, TimeoutError).
"""
from typing import Optional
[docs]
class VergeError(Exception):
"""Base exception for all pyvergeos errors."""
pass
[docs]
class VergeConnectionError(VergeError):
"""Connection to VergeOS failed."""
pass
[docs]
class NotConnectedError(VergeError):
"""Operation attempted without an active connection."""
pass
[docs]
class VergeTimeoutError(VergeError):
"""Request timed out."""
pass
[docs]
class APIError(VergeError):
"""Base class for API errors."""
[docs]
def __init__(self, message: str, status_code: Optional[int] = None) -> None:
super().__init__(message)
self.status_code = status_code
[docs]
class AuthenticationError(APIError):
"""Authentication failed (401/403)."""
pass
[docs]
class NotFoundError(APIError):
"""Resource not found (404)."""
pass
[docs]
class ConflictError(APIError):
"""Resource conflict (409)."""
pass
[docs]
class ValidationError(APIError):
"""Validation error (422)."""
pass
[docs]
class TaskError(VergeError):
"""Task execution failed."""
[docs]
def __init__(self, message: str, task_id: Optional[int] = None) -> None:
super().__init__(message)
self.task_id = task_id
[docs]
class TaskTimeoutError(TaskError):
"""Task wait timed out."""
pass