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

27 lines
910 B
Python

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)