Source code for mdns_beacon.cli.types

"""Param types for mdns-beacon."""
from ipaddress import IPv4Address, IPv6Address, ip_address
from typing import AnyStr, Optional, Union

import click


[docs]class IpAddress(click.ParamType): """An IPv4Address or IPv6Address parsed via ipaddress.ip_address. Example: >>> ptype = IpAddress() >>> ptype.convert("127.0.0.1", None, None) IPv4Address('127.0.0.1') """ name = "ip_address"
[docs] def convert( self, value: AnyStr, param: Optional[click.Parameter], ctx: Optional[click.Context] ) -> Union[IPv4Address, IPv6Address]: """Parse value into IPv4Address or IPv6Address.""" try: return ip_address(value) except ValueError: self.fail(f"expected an IPv4 or IPv6 address, got {value!r}", param, ctx)