# Source code for imapclient.exceptions

    import imaplib

    # Base class allowing to catch any IMAPClient related exceptions
    # To ensure backward compatibility, we "rename" the imaplib general
    # exception class, so we can catch its exceptions without having to
    # deal with it in IMAPClient codebase

    IMAPClientError = imaplib.IMAP4.error
    IMAPClientAbortError = imaplib.IMAP4.abort
    IMAPClientReadOnlyError = imaplib.IMAP4.readonly

    class CapabilityError(IMAPClientError):
        """
        The command tried by the user needs a capability not installed
        on the IMAP server
        """

    class LoginError(IMAPClientError):
        """
        A connection has been established with the server but an error
        occurred during the authentication.
        """

    class IllegalStateError(IMAPClientError):
        """
        The command tried needs a different state to be executed. This
        means the user is not logged in or the command needs a folder to
        be selected.
        """

    class InvalidCriteriaError(IMAPClientError):
        """
        A command using a search criteria failed, probably due to a syntax
        error in the criteria string.
        """

    class ProtocolError(IMAPClientError):
        """The server replied with a response that violates the IMAP protocol."""