docker-apps/radicale/webhooks/scripts/contactdates/utils.py

24 lines
859 B
Python

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