diff --git a/lektor/docker/Dockerfile b/lektor/docker/Dockerfile index 9d692e3..e1737a6 100644 --- a/lektor/docker/Dockerfile +++ b/lektor/docker/Dockerfile @@ -8,7 +8,7 @@ RUN sed -i '/de_DE.UTF-8/s/^# //g' /etc/locale.gen && locale-gen RUN python3 -m venv /opt/venv -RUN . /opt/venv/bin/activate && pip install ics requests bs4 +RUN . /opt/venv/bin/activate && pip install ics requests bs4 recurring_ical_events icalendar COPY entrypoint.sh /opt/entrypoint.sh RUN chmod +x /opt/entrypoint.sh diff --git a/lektor/lektordata/scripts/calendar-fetcher.py b/lektor/lektordata/scripts/calendar-fetcher.py index 9cfc291..0baa8ec 100644 --- a/lektor/lektordata/scripts/calendar-fetcher.py +++ b/lektor/lektordata/scripts/calendar-fetcher.py @@ -1,31 +1,59 @@ -import sys +from datetime import datetime, date +import recurring_ical_events import requests -from ics import Calendar -import arrow +from icalendar import Calendar import locale +import sys -if len(sys.argv) != 2: - print("Usage: python3 {} ".format(sys.argv[0])) +def fetch_upcoming_events(ics_url): + # Set German locale + locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8') + + response = requests.get(ics_url) + calendar = Calendar.from_ical(response.content) + + # Get recurring and non-recurring events + events = recurring_ical_events.of(calendar).after(datetime.now()) + + for event in events: + start = event.get('dtstart').dt + out_summary = event.get('summary') + location = event.get('location', 'No location specified') + + out_startdate = start.strftime("%a. %-d. %B %Y") -url = sys.argv[1] + # Format output based on whether it's an all-day event + if isinstance(start, date) and not isinstance(start, datetime): + out_starttime = " " + else: + out_starttime = start.strftime('%-H:%M') + + if location != 'No location specified': + out_location = location + else: + out_location = " " -c = Calendar(requests.get(url).text) + print(f"*
{out_summary}
 ") + print(f" *
{out_startdate}
 ") + print(f" *
{out_starttime}
 ") + print(f" *
{out_location}
 ") -locale.setlocale(locale.LC_TIME, locale.normalize("de_DE.UTF-8")) -print("_model: page") -print("---") -print("title: Termine") -print("---") -print("body:") -print("") -for event in list(c.timeline.start_after(arrow.now())): - print("*
{}
 ".format(event.name)) - print(" *
{}
 ".format(event.begin.strftime("%a. %-d. %B %Y"))) - print(" *
{}
 ".format(event.begin.strftime("%-H:%M") if not event.all_day else " ")) - print(" *
{}
 ".format(event.location if event.location != None else " ")) -print("") -print("---") -print("_template: page.html") -print("") -print("") \ No newline at end of file +if __name__ == "__main__": + + ics_url = sys.argv[1] + + # ics_url = "https://backoffice.pc-stammertal.ch/remote.php/dav/public-calendars/RqLX5wj25aY6cpnP?export" + + print("_model: page") + print("---") + print("title: Termine") + print("---") + print("body:") + print("") + fetch_upcoming_events(ics_url) + print("") + print("---") + print("_template: page.html") + print("") + print("") \ No newline at end of file