import re from datetime import date, datetime from .types import Event def parse_date(id: str, name: str, input: str, apple_omit_year: str | None = None) -> Event: if isinstance(input, date): return Event(id, name, input.day, input.month, input.year) match = re.match(r"^(-|NaN)-(\d{2})-?(\d{2})$", input) # no-year format: --MMDD or --MM-DD. Also NaN-MM-DD spotted if match: return Event(id, name, int(match.group(3)), int(match.group(2))) for fmt in ("%Y-%m-%d", "%Y%m%d"): try: dt = datetime.strptime(input, fmt).date() if apple_omit_year == f"{dt.year}": return Event(id, name, dt.day, dt.month) else: return Event(id, name, dt.day, dt.month, dt.year) except ValueError: continue return None # cannot parse