U
     f                     @   s0   d dl mZ d dlZd dlZG dd deZdS )    )	ContainerNc                   @   sH   e Zd ZdZdgZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dS )InternalIPSa  
    InternalIPS allows to specify CIDRs for INTERNAL_IPS.

    It takes an iterable of ip addresses or ranges.

    Inspiration taken from netaddr.IPSet, please use it if you can since
    it support more advanced features like optimizing ranges and lookups.
    _cidrsFc                 C   s6   g | _ |D ]}| j t| q
|r2t| j | _ dS )z
        Constructor.

        :param iterable: (optional) an iterable containing IP addresses and
            subnets.

        :param sort_by_size: sorts internal list according to size of ip
            ranges, largest first.
        N)r   append	ipaddress
ip_networksorted)selfiterableZsort_by_sizeaddress r   H/tmp/pip-unpacked-wheel-1isl55vw/django_extensions/utils/internal_ips.py__init__   s
    
zInternalIPS.__init__c                 C   s(   t |}| jD ]}||kr dS qdS )z
        :param ip: An IP address or subnet.

        :return: ``True`` if IP address or subnet is a member of this InternalIPS set.
        TF)r   
ip_addressr   )r	   r   cidrr   r   r   __contains__$   s
    

zInternalIPS.__contains__c                 C   s   t ddS )z@
        Raises ``TypeError`` if this method is called.
        z&InternalIPS containers are unhashable!N)	TypeErrorr	   r   r   r   __hash__0   s    zInternalIPS.__hash__c                 C   s   t dd | jD S )zC
        :return: the cardinality of this InternalIPS set.
        c                 s   s   | ]}|j V  qd S )N)num_addresses).0r   r   r   r   	<genexpr>:   s     z&InternalIPS.__len__.<locals>.<genexpr>)sumr   r   r   r   r   __len__6   s    zInternalIPS.__len__c                 C   s   t j| j S )zP
        :return: an iterator over the IP addresses within this IP set.
        )	itertoolschainr   r   r   r   r   __iter__<   s    zInternalIPS.__iter__c                 C   s
   t | jS )zU
        :return: an iterator over individual IP subnets within this IP set.
        )r   r   r   r   r   r   
iter_cidrsB   s    zInternalIPS.iter_cidrsN)F)__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r      s   	
r   )collections.abcr   r   r   r   r   r   r   r   <module>   s   