X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=nsconfig%2Futil.py;h=48e2e6f7d39bc70fd598b2aae04f3fdebffe3eca;hb=8e5f8cb2d390396020f7aae6998eeece0315c891;hp=7b9370c6ea564561899c5794d2adec9481e90696;hpb=2ca92ac39d72363e0f181efef3fc3e67c37d2c6e;p=pynsc.git diff --git a/nsconfig/util.py b/nsconfig/util.py index 7b9370c..48e2e6f 100644 --- a/nsconfig/util.py +++ b/nsconfig/util.py @@ -1,6 +1,14 @@ +import dns.name +from dns.name import Name +from ipaddress import ip_address, IPv4Address, IPv6Address, ip_network, IPv4Network, IPv6Network from typing import Any, List +IPAddress = IPv4Address | IPv6Address +IPNetwork = IPv4Network | IPv6Network +IPAddr = str | IPAddress | List[str | IPAddress] + + def flatten_list(args: Any) -> List[Any]: def flat(args): if isinstance(args, list) or isinstance(args, tuple): @@ -12,3 +20,29 @@ def flatten_list(args: Any) -> List[Any]: out: List[Any] = [] flat(args) return out + + +def parse_address(addr: IPAddress | str) -> IPAddress: + if isinstance(addr, IPv4Address) or isinstance(addr, IPv6Address): + return addr + elif isinstance(addr, str): + return ip_address(addr) + else: + raise ValueError('Cannot parse IP address') + + +def parse_network(addr: IPNetwork | str) -> IPNetwork: + if isinstance(addr, IPv4Network) or isinstance(addr, IPv6Network): + return addr + elif isinstance(addr, str): + return ip_network(addr) + else: + raise ValueError('Cannot parse IP network') + + +def parse_name(name: str, relative: bool = False) -> Name: + # FIXME: Names with escaped dots + if '.' in name and not relative: + return dns.name.from_text(name) + else: + return dns.name.from_text(name, origin=None)