in geneve/solver/type_ip.py [0:0]
def solve(self, left_attempts, environment):
value = self.value
history_addrs = self.get_history(environment)
exclude_addrs = self.exclude_addrs | set(history_addrs)
while left_attempts and (
value in (None, [])
or set(value if self.is_array else [value]) & exclude_addrs # noqa: W503
or match_nets(value, self.exclude_nets)
): # noqa: W503
if self.include_nets:
net = random.choice(self.include_nets)
v = net[random.randrange(net.num_addresses)]
else:
bits = 128 if random.choice(self.ip_versions) == 6 else 32
v = ipaddress.ip_address(random.randrange(1, 2**bits))
value = [v] if self.is_array else v
left_attempts -= 1
value = [v.compressed for v in value] if self.is_array else value.compressed
return {"value": value, "left_attempts": left_attempts}