def get_prefixes_maxlen(self): """ Extract remaining prefixes as a list of (prefix, maxlen) """ if self.is_final: return [(IPv4.from_bits(self.prefix), self.n + len(self.prefix))] r = [] for c in self.children: if c is not None: r += c.get_prefixes_maxlen() return r
def get_prefixes(self): """ Fetch all remaining prefixes as a list """ if self.is_final: return [IPv4.from_bits(self.prefix).prefix] r = [] for c in self.children: if c is not None: r += c.get_prefixes() return r
def test_ipv4_from_to_bits(ipv4_bits): p = IPv4(ipv4_bits) assert IPv4.from_bits(p.iter_bits()) == p
def test_ipv4_from_bits(): assert repr(IPv4.from_bits([1, 1, 1, 1, 1, 1, 1, 1])) == "<IPv4 255.0.0.0/8>" assert repr(IPv4.from_bits([0, 0, 0, 0, 1, 0, 1, 0])) == "<IPv4 10.0.0.0/8>"
def test_ipv4_from_to_bits(prefix): p = IPv4(prefix) assert IPv4.from_bits(p.iter_bits()) == p
"p1,p2", [ (IPv4("0.0.0.0/8").iter_bits(), [0, 0, 0, 0, 0, 0, 0, 0]), (IPv4("10.0.0.0/8").iter_bits(), [0, 0, 0, 0, 1, 0, 1, 0]), (IPv4("224.0.0.0/4").iter_bits(), [1, 1, 1, 0]), (IPv4("255.255.255.255").iter_bits(), [1] * 32), ], ) def test_ipv4_iter_bits(p1, p2): assert list(p1) == p2 @pytest.mark.parametrize( "p1,p2", [ (IPv4.from_bits([1, 1, 1, 1, 1, 1, 1, 1]), "<IPv4 255.0.0.0/8>"), (IPv4.from_bits([0, 0, 0, 0, 1, 0, 1, 0]), "<IPv4 10.0.0.0/8>"), ], ) def test_ipv4_from_bits(p1, p2): assert repr(p1) == p2 @pytest.mark.parametrize( "prefix", ["192.168.0.1", "224.0.0.0/4", "192.168.0.0/16", "255.255.255.255"]) def test_ipv4_from_to_bits(prefix): p = IPv4(prefix) assert IPv4.from_bits(p.iter_bits()) == p