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.
help=help
)
+ @overrides
def __call__(self, parser, namespace, values, option_strings=None):
if (
option_strings.startswith('--no-') or
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)
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)
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)
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)
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)
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)
+def valid_duration(txt: str) -> datetime.timedelta:
+ """If the string is a valid time duration, return a
+ datetime.timedelta representing the period of time. Otherwise
+ maybe raise an ArgumentTypeError or potentially just treat the
+ time window as zero in length.
+
+ >>> valid_duration('3m')
+ datetime.timedelta(seconds=180)
+
+ >>> valid_duration('your mom')
+ datetime.timedelta(0)
+
+ """
+ from datetime_utils import parse_duration
+ try:
+ secs = parse_duration(txt)
+ except Exception as e:
+ raise argparse.ArgumentTypeError(e)
+ finally:
+ return datetime.timedelta(seconds=secs)
+
+
if __name__ == '__main__':
import doctest
doctest.ELLIPSIS_MARKER = '-ANYTHING-'