
    jg                     6    d dl mZ d dlZd dlZ G d de      Zy)    )	ContainerNc                   <    e Zd ZdZdgZd
dZd Zd Zd Zd Z	d Z
y	)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.
    _cidrsc                     g | _         |D ]0  }| j                   j                  t        j                  |             2 |rt	        | j                         | _         yy)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iterablesort_by_sizeaddresss       _/var/www/html/Stanley/venv/lib/python3.12/site-packages/django_extensions/utils/internal_ips.py__init__zInternalIPS.__init__   sL     GKKy33G<=    -DK     c                 \    t        j                  |      }| j                  D ]  }||v s y y)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   cidrs      r   __contains__zInternalIPS.__contains__$   s1     &&w/KKD$   r   c                     t        d      )z@
        Raises ``TypeError`` if this method is called.
        z&InternalIPS containers are unhashable!)	TypeErrorr   s    r   __hash__zInternalIPS.__hash__0   s     @AAr   c                 :    t        d | j                  D              S )zC
        :return: the cardinality of this InternalIPS set.
        c              3   4   K   | ]  }|j                     y w)N)num_addresses).0r   s     r   	<genexpr>z&InternalIPS.__len__.<locals>.<genexpr>:   s     >+$4%%+s   )sumr   r   s    r   __len__zInternalIPS.__len__6   s     >$++>>>r   c                 :    t        j                  | j                   S )zP
        :return: an iterator over the IP addresses within this IP set.
        )	itertoolschainr   r   s    r   __iter__zInternalIPS.__iter__<   s     ,,r   c                 ,    t        | j                        S )zU
        :return: an iterator over individual IP subnets within this IP set.
        )r   r   r   s    r   
iter_cidrszInternalIPS.iter_cidrsB   s     dkk""r   N)F)__name__
__module____qualname____doc__	__slots__r   r   r   r!   r%   r'    r   r   r   r      s/     
I."
B?-#r   r   )collections.abcr   r	   r#   r   r-   r   r   <module>r/      s    %  ?#) ?#r   