X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=argparse_utils.py;h=5a270f6ef22c1845be1bd6c59ab7fde1cb4cfe21;hb=31c81f6539969a5eba864d3305f9fb7bf716a367;hp=2d2297ccf2f8e7f9df99929925ab1b973ee5c44b;hpb=5e1bced276766fec9d4c408790c99d4a26d267e0;p=python_utils.git diff --git a/argparse_utils.py b/argparse_utils.py index 2d2297c..5a270f6 100644 --- a/argparse_utils.py +++ b/argparse_utils.py @@ -6,6 +6,8 @@ import logging import os from typing import Any +from overrides import overrides + # This module is commonly used by others in here and should avoid # taking any unnecessary dependencies back on them. @@ -13,14 +15,7 @@ logger = logging.getLogger(__name__) class ActionNoYes(argparse.Action): - def __init__( - self, - option_strings, - dest, - default=None, - required=False, - help=None - ): + def __init__(self, option_strings, dest, default=None, required=False, help=None): if default is None: msg = 'You must provide a default with Yes/No action' logger.critical(msg) @@ -44,14 +39,12 @@ class ActionNoYes(argparse.Action): const=None, default=default, required=required, - help=help + help=help, ) + @overrides def __call__(self, parser, namespace, values, option_strings=None): - if ( - option_strings.startswith('--no-') or - option_strings.startswith('--no_') - ): + if option_strings.startswith('--no-') or option_strings.startswith('--no_'): setattr(namespace, self.dest, False) else: setattr(namespace, self.dest, True) @@ -85,6 +78,7 @@ def valid_bool(v: Any) -> bool: if isinstance(v, bool): return v from string_utils import to_bool + try: return to_bool(v) except Exception: @@ -106,11 +100,12 @@ def valid_ip(ip: str) -> str: """ from string_utils import extract_ip_v4 + s = extract_ip_v4(ip.strip()) if s is not None: return s msg = f"{ip} is an invalid IP address" - logger.warning(msg) + logger.error(msg) raise argparse.ArgumentTypeError(msg) @@ -132,11 +127,12 @@ def valid_mac(mac: str) -> str: """ from string_utils import extract_mac_address + s = extract_mac_address(mac) if s is not None: return s msg = f"{mac} is an invalid MAC address" - logger.warning(msg) + logger.error(msg) raise argparse.ArgumentTypeError(msg) @@ -162,7 +158,7 @@ def valid_percentage(num: str) -> float: if 0.0 <= n <= 100.0: return n msg = f"{num} is an invalid percentage; expected 0 <= n <= 100.0" - logger.warning(msg) + logger.error(msg) raise argparse.ArgumentTypeError(msg) @@ -184,7 +180,7 @@ def valid_filename(filename: str) -> str: if os.path.exists(s): return s msg = f"{filename} was not found and is therefore invalid." - logger.warning(msg) + logger.error(msg) raise argparse.ArgumentTypeError(msg) @@ -202,11 +198,12 @@ def valid_date(txt: str) -> datetime.date: -ANYTHING- """ from string_utils import to_date + date = to_date(txt) if date is not None: return date msg = f'Cannot parse argument as a date: {txt}' - logger.warning(msg) + logger.error(msg) raise argparse.ArgumentTypeError(msg) @@ -224,11 +221,12 @@ def valid_datetime(txt: str) -> datetime.datetime: -ANYTHING- """ from string_utils import to_datetime + dt = to_datetime(txt) if dt is not None: return dt msg = f'Cannot parse argument as datetime: {txt}' - logger.warning(msg) + logger.error(msg) raise argparse.ArgumentTypeError(msg) @@ -242,10 +240,11 @@ def valid_duration(txt: str) -> datetime.timedelta: datetime.timedelta(seconds=180) >>> valid_duration('your mom') - datetime.timedelta(seconds=0) + datetime.timedelta(0) """ from datetime_utils import parse_duration + try: secs = parse_duration(txt) except Exception as e: @@ -256,5 +255,6 @@ def valid_duration(txt: str) -> datetime.timedelta: if __name__ == '__main__': import doctest + doctest.ELLIPSIS_MARKER = '-ANYTHING-' doctest.testmod()