27 lines
910 B
Python
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) |