a
    ÆZEg   ã                   @   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   ú]/var/www/sistema_ama/venv/lib/python3.9/site-packages/django_extensions/utils/internal_ips.pyÚ__init__   s
    
zInternalIPS.__init__c                 C   s(   t  |¡}| jD ]}||v 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>:   ó    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   