# Path: src/pif/exceptions.py
# class InvalidRegistryItemType(ValueError):
#     """Raised when an attempt is made to register an irrelevant item.
# 
#     Raised when an attempt is made to register an item in the registry
#     which does not have a proper type.
#     """


import logging
import socket
from .exceptions import InvalidRegistryItemType

        :return str:
        """
        raise NotImplementedError(
            "You should override ``get_ip`` method in your IP checker class."
        )


class PublicIPCheckerRegistry(object):
    """Registry of public IP checkers."""

    def __init__(self):
        self._registry = {}
        self._forced = []

    @property
    def registry(self):
        """Registry."""
        return self._registry

    def register(self, cls):
        """Register the IP checker in the registry.

        :param pif.base.BaseIPChecker cls: Subclass of
            ``pif.base.BaseIPChecker``.
        :param bool force: If set to True, item stays forced. It's not
            possible to un-register a forced item.
        :return bool: True if registered and False otherwise.
        """
        if not issubclass(cls, BasePublicIPChecker):

# Path: src/pif/exceptions.py
# class InvalidRegistryItemType(ValueError):
#     """Raised when an attempt is made to register an irrelevant item.
# 
#     Raised when an attempt is made to register an item in the registry
#     which does not have a proper type.
#     """


# Path: src/pif/base.py
import logging
import socket
from .exceptions import InvalidRegistryItemType


        :return str:
        """
        raise NotImplementedError(
            "You should override ``get_ip`` method in your IP checker class."
        )


class PublicIPCheckerRegistry(object):
    """Registry of public IP checkers."""

    def __init__(self):
        self._registry = {}
        self._forced = []

    @property
    def registry(self):
        """Registry."""
        return self._registry

    def register(self, cls):
        """Register the IP checker in the registry.

        :param pif.base.BaseIPChecker cls: Subclass of
            ``pif.base.BaseIPChecker``.
        :param bool force: If set to True, item stays forced. It's not
            possible to un-register a forced item.
        :return bool: True if registered and False otherwise.
        """
        if not issubclass(cls, BasePublicIPChecker):

            raise InvalidRegistryItemType(