^.ddlmZmZmZGddeZy)) IPNetwork cidr_exclude cidr_mergec*eZdZdZdZddZdZdZy)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. c8tt|g|_y)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 A/usr/lib/python3/dist-packages/netaddr/contrib/subnet_splitter.py__init__zSubnetSplitter.__init__sYy123 Nc |jD]t}t|j||}|s"|j||jj t t|t|d|_|cSgS)z;Extract 1 or more subnets of size specified by CIDR prefix.)countr) available_subnetslistsubnet remove_subnetr unionr rr)r prefixrcidrsubnetss r extract_subnetzSubnetSplitter.extract_subnets**, D4;;vU;;DM N  rc4t|jddS)z2Returns a list of the currently available subnets.c|jSN) prefixlen)xs r z2SubnetSplitter.available_subnets..*s 1;;rT)keyreverse)sortedr )r s r rz SubnetSplitter.available_subnets(sdmm)>MMrc:|jj|y)z:Remove a specified IPNetwork from available address space.N)r remove)r ip_networks r rzSubnetSplitter.remove_subnet,s Z(rr)__name__ __module__ __qualname____doc__rrrrrr rr s 4 N)rrN) netaddr.iprrrobjectrr+rr r.s ;:%)V%)r