From 62e48ef2058edd8562fb220de833db0dc6d9ae72 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 5 Jan 2026 20:03:41 +0000 Subject: [PATCH] Improve date parsing in OOP handling to support additional formats and enhance error reporting. --- gen_proc.py | 59 ++++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/gen_proc.py b/gen_proc.py index e5c276d..6dd9937 100644 --- a/gen_proc.py +++ b/gen_proc.py @@ -357,41 +357,36 @@ def main( if oop: formatted_oops = [] for dates in oop.split(","): - print(dates) - if "-" in dates: - s, e = dates.split("-") - elif "to" in dates: - s, e = dates.split(" to ") + raw = dates.strip() + # strip surrounding brackets/parentheses/quotes + raw = raw.strip("()[]\"' ") + if "-" in raw: + s, e = raw.split("-", 1) + elif " to " in raw: + s, e = raw.split(" to ", 1) + elif "to" in raw: + s, e = raw.split("to", 1) else: raise ValueError(f"Cannot parse OOP dates: '{oop}' for {worker}") - try: - formatted_oops.append( - { - "start_date": datetime.datetime.strptime( - s.strip(), "%d/%m/%Y" - ).date(), - "end_date": datetime.datetime.strptime( - e.strip(), "%d/%m/%Y" - ).date(), - } - ) - except ValueError: + + s = s.strip().strip("()[]\"' ") + e = e.strip().strip("()[]\"' ") + + parsed = False + for fmt in ("%d/%m/%Y", "%d/%m/%y"): try: - formatted_oops.append( - { - "start_date": datetime.datetime.strptime( - s.strip(), "%d/%m/%Y" - ).date(), - "end_date": datetime.datetime.strptime( - e.strip(), "%d/%m/%Y" - ).date(), - } - ) - except ValueError as e: - print(e) - print("WORKER", worker) - print("DATES", s, e) - raise + start_dt = datetime.datetime.strptime(s, fmt).date() + end_dt = datetime.datetime.strptime(e, fmt).date() + formatted_oops.append({"start_date": start_dt, "end_date": end_dt}) + parsed = True + break + except ValueError: + continue + + if not parsed: + print("WORKER", worker) + print("DATES", s, e) + raise ValueError(f"Cannot parse OOP dates: '{oop}' for {worker}") oop = formatted_oops else: