make output conform to spec (aside from vTimezone)
1 file changed, 19 insertions(+), 7 deletions(-)
changed files
M mycal.py → mycal.py
@@ -1,10 +1,11 @@ +from uuid import uuid4 from icalendar.cal import Calendar, FreeBusy import icalendar import urllib.parse import requests from flask import Flask -from datetime import date, datetime, timedelta, time, timezone +from datetime import date, datetime, timedelta, time import zoneinfo from dataclasses import dataclass from danoan.toml_dataclass import TomlDataClassIO@@ -18,6 +19,7 @@ @dataclass class Config(TomlDataClassIO): name: str + email: str timezone: str calendar: CalendarConfig@@ -66,6 +68,9 @@ today = date.today() start_of_week = today - timedelta(days=today.weekday()) start_date = datetime.combine(start_of_week, time.min, tzinfo=tz) end_date = start_date + timedelta(days=30) + organizer = icalendar.prop.vCalAddress(f"mailto:{config.email}") + organizer.name = config.name + domain = config.email.split('@')[1] output = Calendar() output.add('prodid', '-//Calendar Anonymiser//alin.ovh//')@@ -74,12 +79,22 @@ # Parse with icalendar try: input = Calendar.from_ical(get_calendar(config.calendar)) + + ## causes parse error in go code + # vtimezone = icalendar.Timezone.from_tzid(config.timezone) + # output.add_component(vtimezone) + + busy = FreeBusy(uid=f'{uuid4()}@{domain}') + busy.add('organizer', organizer) + busy.add('dtstamp', datetime.now(tz=tz)) + busy.add('dtstart', start_date) + busy.add('dtend', end_date) + for component in input.walk(): if component.name == "VEVENT": dtstart = fixup_date(component.get('dtstart').dt) dtend = fixup_date(component.get('dtend', component.get('dtstart')).dt) if dtstart >= start_date and dtend <= end_date: - busy = FreeBusy(uid=component.get('uid')) vp = icalendar.prop.vPeriod([ dtstart, dtend ]) if looks_tentative(component):@@ -88,11 +103,8 @@ else: vp.FBTYPE = icalendar.enums.FBTYPE.BUSY_UNAVAILABLE busy.add('freebusy', vp) - busy.add('summary', f'{config.name} Busy') - busy.add('dtstamp', component.get('dtstamp', icalendar.prop.vDatetime(datetime.now(tz)))) - busy.add('dtstart', dtstart) - busy.add('dtend', dtend) - output.add_component(busy) + + output.add_component(busy) return output.to_ical(), { "Content-Type": "text/calendar" } except Exception as e: print("error:", e)