X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=src%2Fpyutils%2Fdatetimez%2Fdatetime_utils.py;h=ed76c9e2407f72c4ad4dffd9666a945f7df7b444;hb=84f53cd94d18a8d239216704a6a33c7dbf2fc6b9;hp=6026d9af4f27b6fe19c1b5b66e8d0fe64c476b9c;hpb=69566c003b4f1c3a4905f37d3735d7921502d14a;p=pyutils.git diff --git a/src/pyutils/datetimez/datetime_utils.py b/src/pyutils/datetimez/datetime_utils.py index 6026d9a..ed76c9e 100644 --- a/src/pyutils/datetimez/datetime_utils.py +++ b/src/pyutils/datetimez/datetime_utils.py @@ -804,7 +804,7 @@ def minute_number_to_time_string(minute_num: MinuteOfDay) -> str: return f"{hour:2}:{minute:02}{ampm}" -def parse_duration(duration: str) -> int: +def parse_duration(duration: str, raise_on_error=False) -> int: """ Parse a duration in string form into a delta seconds. @@ -820,9 +820,25 @@ def parse_duration(duration: str) -> int: >>> parse_duration('3min 2sec') 182 + >>> parse_duration('recent') + 0 + + >>> parse_duration('recent', raise_on_error=True) + Traceback (most recent call last): + ... + ValueError: recent is not a valid duration. + """ if duration.isdigit(): return int(duration) + + m = re.match( + r'(\d+ *d[ays]*)* *(\d+ *h[ours]*)* *(\d+ *m[inutes]*)* *(\d+ *[seconds]*)', + duration, + ) + if not m and raise_on_error: + raise ValueError(f'{duration} is not a valid duration.') + seconds = 0 m = re.search(r'(\d+) *d[ays]*', duration) if m is not None: