# Source code for tld.exceptions

    from .conf import get_setting

    __title__ = 'tld.exceptions'
    __author__ = 'Artur Barseghyan'
    __copyright__ = '2013-2018 Artur Barseghyan'
    __license__ = 'GPL 2.0/LGPL 2.1'
    __all__ = (
        'TldBadUrl',
        'TldDomainNotFound',
        'TldImproperlyConfigured',
        'TldIOError',
    )

    class TldIOError(IOError):
        """TldIOError.

        Supposed to be thrown when problems with reading/writing occur.
        """

        def __init__(self, msg=None):
            tld_names_local_path = get_setting('NAMES_LOCAL_PATH')
            if msg is None:
                msg = "Can't read from or write to the %s " \
                      "file!" % tld_names_local_path
            super(TldIOError, self).__init__(msg)

    class TldDomainNotFound(ValueError):
        """TldDomainNotFound.

        Supposed to be thrown when domain name is not found (didn't match) the
        local TLD policy.
        """

        def __init__(self, domain_name):
            super(TldDomainNotFound, self).__init__(
                "Domain %s didn't match any existing TLD name!" % domain_name
            )

    class TldBadUrl(ValueError):
        """TldBadUrl.

        Supposed to be thrown when bad URL is given.
        """

        def __init__(self, url):
            super(TldBadUrl, self).__init__("Is not a valid URL %s!" % url)

    class TldImproperlyConfigured(Exception):
        """TldImproperlyConfigured.

        Supposed to be thrown when code is improperly configured. Typical use-case
        is when user tries to use `get_tld` function with both `search_public` and
        `search_private` set to False.
        """

        def __init__(self, msg=None):
            if msg is None:
                msg = "Improperly configured."
            else:
                msg = "Improperly configured. %s" % msg

            super(TldImproperlyConfigured, self).__init__(msg)