Source code for django_afip.exceptions

from __future__ import annotations


class DjangoAfipException(Exception):
    """Superclass for exceptions thrown by `django_afip`."""


class AfipException(DjangoAfipException):
    """Wraps around errors returned by AFIP's WS."""

    def __init__(self, response) -> None:  # noqa: ANN001
        if "Errors" in response:
            message = "Error {}: {}".format(
                response.Errors.Err[0].Code,
                response.Errors.Err[0].Msg,
            )
        else:
            message = "Error {}: {}".format(
                response.errorConstancia.idPersona,
                response.errorConstancia.error[0],
            )
        Exception.__init__(self, message)


class AuthenticationError(DjangoAfipException):
    """Raised when there is an error during an authentication attempt.

    Usually, subclasses of this error are raised, but for unexpected errors, this type
    may be raised.
    """


class CertificateExpired(AuthenticationError):
    """Raised when an authentication was attempted with an expired certificate."""


class UntrustedCertificate(AuthenticationError):
    """Raise when an untrusted certificate is used in an authentication attempt."""


class CorruptCertificate(AuthenticationError):
    """Raised when a corrupt certificate file is used in an authentication attempt."""


[docs] class CannotValidateTogether(DjangoAfipException): """Raised when attempting to validate invalid combinations of receipts. Receipts of different ``receipt_type`` or ``point_of_sales`` cannot be validated together. """
class ValidationError(DjangoAfipException): """Raised when a single Receipt failed to validate with AFIP's WS."""