
    $g                     6    d dl mZmZmZ  G d de          ZdS )    )	IPNetworkcidr_exclude
cidr_mergec                   ,    e Zd ZdZd ZddZd Zd ZdS )SubnetSplitterz
    A handy utility class that takes a single (large) subnet and allows
    smaller subnet within its range to be extracted by CIDR prefix. Any
    leaving address space is available for subsequent extractions until
    all space is exhausted.
    c                 J    t          t          |          g          | _        dS )z
        Constructor.

        :param base_cidr: an IPv4 or IPv6 address with a CIDR prefix.
            (see IPNetwork.__init__ for full details).
        N)setr   _subnets)self	base_cidrs     _/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/netaddr/contrib/subnet_splitter.py__init__zSubnetSplitter.__init__   s"     Yy11233    Nc                 L   |                                  D ]}t          |                    ||                    }|s)|                     |           | j                            t          t          |t          |          d                                       | _        |c S g S )z;Extract 1 or more subnets of size specified by CIDR prefix.)countr   )	available_subnetslistsubnetremove_subnetr
   unionr	   r   r   )r   prefixr   cidrsubnetss        r   extract_subnetzSubnetSplitter.extract_subnet   s    **,, 	 	D4;;vU;;;<<G t$$$ M//LzRYGZGZ[\G]4^4^0_0_``DMNNN	r   c                 2    t          | j        d d          S )z2Returns a list of the currently available subnets.c                     | j         S N)	prefixlen)xs    r   <lambda>z2SubnetSplitter.available_subnets.<locals>.<lambda>'   s    1; r   T)keyreverse)sortedr
   )r   s    r   r   z SubnetSplitter.available_subnets%   s    dm)>)>MMMMr   c                 :    | j                             |           dS )z:Remove a specified IPNetwork from available address space.N)r
   remove)r   
ip_networks     r   r   zSubnetSplitter.remove_subnet)   s    Z(((((r   r   )__name__
__module____qualname____doc__r   r   r   r    r   r   r   r   	   sb         4 4 4	 	 	 	N N N) ) ) ) )r   r   N)
netaddr.ipr   r   r   objectr   r+   r   r   <module>r.      sY    ; : : : : : : : : :") ") ") ") ")V ") ") ") ") ")r   