diff --git a/dzgui/util/ip.py b/dzgui/util/ip.py index bf5b535..d9a2c12 100644 --- a/dzgui/util/ip.py +++ b/dzgui/util/ip.py @@ -42,43 +42,14 @@ def is_usable(ip: str) -> bool: return True -def get_coords(ips: "Path", ip: str) -> Coords: - split = ip2list(ip) - - if is_reserved(split): +def get_coords(db_path: "Path", ip: str) -> Coords: + if not is_usable(ip): raise ReservedIPError(f"{ip} is a reserved IP address.") - - prefix = f"^{split[0]}.{split[1]}." - - if shutil.which("rg") is not None: - args = ["/usr/bin/rg", prefix, str(ips)] - else: - args = ["/usr/bin/grep", "-E", prefix, str(ips)] - proc = subprocess.run(args, capture_output=True, text=True) - - if proc.returncode != 0: - raise GeolocationError("Failed to split records") - - ip_list = proc.stdout.splitlines() - - for address in ip_list: - fields = address.split(",") - upper = fields[1] - - upper_digits = ip2list(upper) - if ip == upper: - return Coords(float(fields[-2]), float(fields[-1])) - - if split[2] > upper_digits[2]: - continue - - if split[2] == upper_digits[2]: - if split[3] > upper_digits[3]: - continue - - if split[2] <= upper_digits[2]: - return Coords(float(fields[-2]), float(fields[-1])) - raise GeolocationError("No matching records found") + try: + lat, lon = read_from_table(db_path, ip) + return Coords(lat, lon) + except Exception: + raise GeolocationError("No matching records found") def get_local_ip() -> str: