diff options
Diffstat (limited to 'mitmproxy/utils/human.py')
-rw-r--r-- | mitmproxy/utils/human.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/mitmproxy/utils/human.py b/mitmproxy/utils/human.py index b3934846..b21ac0b8 100644 --- a/mitmproxy/utils/human.py +++ b/mitmproxy/utils/human.py @@ -1,6 +1,8 @@ import datetime import ipaddress import time +import functools +import typing SIZE_TABLE = [ ("b", 1024 ** 0), @@ -25,7 +27,14 @@ def pretty_size(size): return "%s%s" % (size, SIZE_TABLE[0][0]) -def parse_size(s): +@functools.lru_cache() +def parse_size(s: typing.Optional[str]) -> typing.Optional[int]: + """ + Parse a size with an optional k/m/... suffix. + Invalid values raise a ValueError. For added convenience, passing `None` returns `None`. + """ + if s is None: + return None try: return int(s) except ValueError: @@ -71,7 +80,9 @@ def format_address(address: tuple) -> str: """ try: host = ipaddress.ip_address(address[0]) - if host.version == 4: + if host.is_unspecified: + return "*:{}".format(address[1]) + if isinstance(host, ipaddress.IPv4Address): return "{}:{}".format(str(host), address[1]) # If IPv6 is mapped to IPv4 elif host.ipv4_mapped: |