U .Ѫ_@s(ddlmZmZmZGdddeZdS)) IPNetwork cidr_exclude cidr_mergec@s2eZdZdZddZd ddZddZd d ZdS) 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. cCstt|g|_dS)z Constructor. :param base_cidr: an IPv4 or IPv6 address with a CIDR prefix. (see IPNetwork.__init__ for full details). N)setr_subnets)selfZ base_cidrr F/Users/cjl/code/aws-vpc-ipam/lambda/netaddr/contrib/subnet_splitter.py__init__szSubnetSplitter.__init__NcCsZ|D]L}t|j||d}|s$q|||jtt|t|d|_|SgS)z;Extract 1 or more subnets of size specified by CIDR prefix.)countr) available_subnetslistsubnet remove_subnetrunionrrr)rprefixr cidrsubnetsr r r extract_subnets  zSubnetSplitter.extract_subnetcCst|jddddS)z2Returns a list of the currently available subnets.cSs|jS)N) prefixlen)xr r r *z2SubnetSplitter.available_subnets..T)keyreverse)sortedr)rr r r r (sz SubnetSplitter.available_subnetscCs|j|dS)z:Remove a specified IPNetwork from available address space.N)rremove)rZ ip_networkr r r r,szSubnetSplitter.remove_subnet)N)__name__ __module__ __qualname____doc__r rr rr r r r r s  rN) netaddr.iprrrobjectrr r r r s