from datetime import datetime, timezone def parse_time(val: str | None): if not val: return None try: h,m = val.split(':', 1) from datetime import time return time(int(h), int(m)) except Exception: return None def parse_cost(val: str | None): if not val: return None try: return float(val) except Exception: return None if not val: return None dt = datetime.fromisoformat(val) # make TZ-aware (assume local if naive; convert to UTC) if dt.tzinfo is None: dt = dt.replace(tzinfo=timezone.utc) return dt def parse_dt(val: str | None) -> datetime | None: if not val: return None dt = datetime.fromisoformat(val) if dt.tzinfo is None: dt = dt.replace(tzinfo=timezone.utc) return dt