From 03713cfd80708294defa5e6b09f87b599b182a5f Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 28 May 2025 15:56:34 +0530 Subject: [PATCH] perf: faster time parsing (#32701) Same as previous date and datetime improvement, this uses C parser instead of python `parser`. --- frappe/utils/data.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/frappe/utils/data.py b/frappe/utils/data.py index df78493eff..94fa3c642e 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -640,12 +640,17 @@ def get_time( return time_str elif isinstance(time_str, datetime.timedelta): return (datetime.datetime.min + time_str).time() + try: - return parser.parse(time_str).time() - except ParserError as e: - if "day" in e.args[1] or "hour must be in" in e.args[0]: - return (datetime.datetime.min + parse_timedelta(time_str)).time() - raise e + # PERF: Our DATE_FORMAT is same as ISO format. + return datetime.time.fromisoformat(time_str) + except ValueError: + try: + return parser.parse(time_str).time() + except ParserError as e: + if "day" in e.args[1] or "hour must be in" in e.args[0]: + return (datetime.datetime.min + parse_timedelta(time_str)).time() + raise e def get_datetime_str(datetime_obj: DateTimeLikeObject) -> str: