def __mask_to_binary(self, mask, length): if "." in mask: pass elif cross_version.isnumeric(mask): mask = int(mask) bin_mask = 0b0 for i in range(mask): bin_mask = bin_mask << 1 bin_mask = 0b1 | bin_mask for i in range(length - mask): bin_mask = bin_mask << 1 return bin_mask else: raise ValueError("Invalid mask")
def __address_to_binary(self, address): bin_addr = 0b0 if "." in address: bin_addr = 0b0 addr_list = address.split(".") for block in addr_list: if cross_version.isnumeric(block): block = int(block) bin_addr = bin_addr << 8 bin_addr = bin_addr | block else: raise ValueError("Invalid IPv4 address") return bin_addr elif ":" in address: addr_split = address.split(":") if addr_split[0] == "" and addr_split[1] == "": del addr_split[0] if addr_split.count("") > 1: raise ValueError("Invalid IPv6 address") elif len(addr_split) - 1 < 8 and addr_split.count("") == 1: insert_count = 8 - len(addr_split) for i in range(insert_count + 1): addr_split.insert(addr_split.index(""), "0") addr_split.remove("") elif len(addr_split) < 8: raise ValueError("Invalid IPv6 address") for block in addr_split: block = int(block, 16) bin_addr = bin_addr << 16 bin_addr = bin_addr | block return bin_addr else: raise ValueError("Invalid address")
def isnumeric_tests(): assert cross_version.isnumeric("hi there") == False assert cross_version.isnumeric("1") == True assert cross_version.isnumeric(1) == True assert cross_version.isnumeric(1.01) == False assert cross_version.isnumeric({1: 2}) == False