| OLD | NEW |
| (Empty) |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 """Utility functions to parse time/duration arguments.""" | |
| 6 | |
| 7 | |
| 8 import argparse | |
| 9 import datetime | |
| 10 import re | |
| 11 | |
| 12 | |
| 13 _TIMEDELTA_CONV = { | |
| 14 'us': datetime.timedelta(microseconds=1), | |
| 15 'ms': datetime.timedelta(milliseconds=1), | |
| 16 's': datetime.timedelta(seconds=1), | |
| 17 'm': datetime.timedelta(minutes=1), | |
| 18 'h': datetime.timedelta(hours=1), | |
| 19 'd': datetime.timedelta(days=1), | |
| 20 } | |
| 21 _TIMEDELTA_RE = re.compile(r'(\d+)(\w+)') | |
| 22 | |
| 23 | |
| 24 def parse_timedelta(v): | |
| 25 """Returns (datetime.timedelta) The parsed timedelta. | |
| 26 | |
| 27 Args: | |
| 28 v (str): The time delta string, a comma-delimited set of <count><unit> | |
| 29 tokens comprising the timedelta (e.g., 10d,2h is 10 days, 2 hours). | |
| 30 | |
| 31 Raises: | |
| 32 ValueError: If parsing failed. | |
| 33 """ | |
| 34 result = datetime.timedelta() | |
| 35 for comp in v.split(','): | |
| 36 match = _TIMEDELTA_RE.match(comp) | |
| 37 if match is None: | |
| 38 raise ValueError('Invalid timedelta token (%s)' % (comp,)) | |
| 39 count, unit = int(match.group(1)), match.group(2) | |
| 40 unit_value = _TIMEDELTA_CONV.get(unit) | |
| 41 if unit_value is None: | |
| 42 raise ValueError('Invalid timedelta token unit (%s)' % (unit,)) | |
| 43 result += (unit_value * count) | |
| 44 return result | |
| 45 | |
| 46 | |
| 47 def argparse_timedelta_type(v): | |
| 48 """Returns (datetime.timedelta) The parsed timedelta. | |
| 49 | |
| 50 This is an argparse-compatible version of `parse_timedelta` that raises an | |
| 51 argparse.ArgumentTypeError on failure instead of a ValueError. | |
| 52 | |
| 53 Raises: | |
| 54 argparse.ArgumentTypeError: If parsing failed. | |
| 55 """ | |
| 56 try: | |
| 57 return parse_timedelta(v) | |
| 58 except ValueError as e: | |
| 59 raise argparse.ArgumentTypeError(e.message) | |
| OLD | NEW |