feat(utils): Add util get_timedelta

get_timedelta returns None in case of invalid or imparsable inputs. This
behaviour is consistent wrt other utils. The util, to_timedelta tries to
convert to timedelta objects only if str object is passed. It returns
the same object if not string, which is absurd...given its called
`to_timedelta`.
This commit is contained in:
Gavin D'souza 2021-08-31 12:57:05 +05:30
parent 8e96d8d522
commit 3858e95e80

View file

@ -1,6 +1,7 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
from typing import Optional
import frappe
import operator
import json
@ -68,6 +69,31 @@ def get_datetime(datetime_str=None):
except ValueError:
return parser.parse(datetime_str)
def get_timedelta(time: str = None) -> Optional[datetime.timedelta]:
"""Return `datetime.timedelta` object from string value of a
valid time format. Returns None if `time` is not a valid format
Args:
time (str): A valid time representation. This string is parsed
using `dateutil.parser.parse`. Examples of valid inputs are:
'0:0:0', '17:21:00', '2012-01-19 17:21:00'. Checkout
https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.parse
Returns:
datetime.timedelta: Timedelta object equivalent of the passed `time` string
"""
from dateutil import parser
time = time or "0:0:0"
try:
t = parser.parse(time)
return datetime.timedelta(
hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond
)
except Exception:
return None
def to_timedelta(time_str):
from dateutil import parser