projects
/
pyutils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Improve docs.
[pyutils.git]
/
src
/
pyutils
/
datetimez
/
datetime_utils.py
diff --git
a/src/pyutils/datetimez/datetime_utils.py
b/src/pyutils/datetimez/datetime_utils.py
index 6026d9af4f27b6fe19c1b5b66e8d0fe64c476b9c..ed76c9e2407f72c4ad4dffd9666a945f7df7b444 100644
(file)
--- 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}"
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.
"""
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('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)
"""
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:
seconds = 0
m = re.search(r'(\d+) *d[ays]*', duration)
if m is not None: