Source code for acmeow.exceptions

"""Exception hierarchy for the ACME client library.

All exceptions inherit from AcmeError, allowing callers to catch all
ACME-related errors with a single except clause if desired.
"""

from __future__ import annotations


[docs] class AcmeError(Exception): """Base exception for all ACME errors. Args: message: Human-readable error description. """
[docs] def __init__(self, message: str) -> None: self.message = message super().__init__(message)
[docs] class AcmeServerError(AcmeError): """ACME server returned an error response. This exception is raised when the ACME server responds with an error status code and provides error details in the RFC 8555 format. Args: status_code: HTTP status code from the server. error_type: ACME error type URN (e.g., "urn:ietf:params:acme:error:malformed"). detail: Human-readable error description from the server. """
[docs] def __init__(self, status_code: int, error_type: str, detail: str) -> None: self.status_code = status_code self.error_type = error_type self.detail = detail message = f"ACME server error {status_code}: {error_type} - {detail}" super().__init__(message)
[docs] class AcmeAuthenticationError(AcmeError): """Account authentication failed. Raised when account creation, account key verification, or request signing fails. """
[docs] class AcmeAuthorizationError(AcmeError): """Challenge authorization failed. Raised when a challenge fails validation or an authorization enters an invalid state. Args: domain: The domain that failed authorization. message: Human-readable error description. """
[docs] def __init__(self, domain: str, message: str) -> None: self.domain = domain super().__init__(f"Authorization failed for {domain}: {message}")
[docs] class AcmeOrderError(AcmeError): """Order creation or finalization failed. Raised when an order cannot be created, enters an invalid state, or finalization fails. """
[docs] class AcmeCertificateError(AcmeError): """Certificate download or validation failed. Raised when the certificate cannot be downloaded, parsed, or saved to disk. """
[docs] class AcmeConfigurationError(AcmeError): """Invalid client configuration. Raised when the client is configured with invalid parameters, such as an invalid email address or unsupported key type. """
[docs] class AcmeNetworkError(AcmeError): """Network communication error. Raised when network communication with the ACME server fails, including connection errors, timeouts, and TLS errors. Args: message: Human-readable error description. original_error: The underlying exception that caused this error. """
[docs] def __init__(self, message: str, original_error: Exception | None = None) -> None: self.original_error = original_error super().__init__(message)
[docs] class AcmeTimeoutError(AcmeError): """Operation timed out. Raised when an operation exceeds its timeout, such as waiting for an order to become ready or a challenge to be validated. """
[docs] class AcmeRateLimitError(AcmeError): """Rate limit exceeded. Raised when the ACME server returns a 429 status code or a rateLimited error type. Args: message: Human-readable error description. retry_after: Suggested wait time in seconds, if provided by server. """
[docs] def __init__(self, message: str, retry_after: float | None = None) -> None: self.retry_after = retry_after super().__init__(message)
[docs] class AcmeDnsError(AcmeError): """DNS verification failed. Raised when DNS propagation check fails or DNS records cannot be verified. Args: domain: The domain that failed DNS verification. message: Human-readable error description. """
[docs] def __init__(self, domain: str, message: str) -> None: self.domain = domain super().__init__(f"DNS verification failed for {domain}: {message}")