import vobject from datetime import date, datetime from pathlib import Path from .types import Event def create_event(name: str, base_id: str, eventDate: Event) -> tuple[str, str]: year = eventDate.year or datetime.now().year dt = date(year, eventDate.month, eventDate.day) id = base_id cal = vobject.iCalendar() event = cal.add('vevent') event.add('uid').value = id event.add('summary').value = f"{name}, {eventDate.name}" event.add('description').value = (f"{eventDate.year}-" if eventDate.year is not None else "") + f"{eventDate.month:02}-{eventDate.day:02}" event.add('dtstart').value = dt event.add('rrule').value = 'FREQ=YEARLY' return id, cal.serialize() def write_calendar_event(prefix: str, event: Event, dir: Path): evtid, ics = create_event(prefix, f"{id}-{event.id}", event) with open(dir / f"{evtid}.ics", 'w') as f: f.write(ics)