diff --git a/lektor/lektordata/scripts/calendar-fetcher-main.py b/lektor/lektordata/scripts/calendar-fetcher-main.py index c915cf0..00ff144 100644 --- a/lektor/lektordata/scripts/calendar-fetcher-main.py +++ b/lektor/lektordata/scripts/calendar-fetcher-main.py @@ -2,7 +2,7 @@ import sys from pathlib import Path -from datetime import datetime, date, timedelta +from datetime import datetime, date, timedelta, timezone from typing import Optional, NamedTuple from dataclasses import dataclass from copy import deepcopy @@ -134,7 +134,23 @@ page.html def get_next_event(self, calendar: Calendar) -> Optional[EventDetails]: try: - events = split_multiday_events(recurring_ical_events.of(calendar).after(datetime.now())) + + now=datetime.now(timezone.utc) # + timedelta(days=1) + + raw_events = split_multiday_events(recurring_ical_events.of(calendar).after(now)) + + now_date = now.date() + now_datetime = now + events = [] + for raw_event in raw_events: + start = raw_event.get('dtstart').dt + if isinstance(start, datetime): + my_now = now_datetime + else: + my_now = now_date + if start >= my_now: + events.append(raw_event) + event = events[0] start = event.get('dtstart').dt diff --git a/lektor/lektordata/scripts/calendar-fetcher.py b/lektor/lektordata/scripts/calendar-fetcher.py index 806d221..dea8e03 100644 --- a/lektor/lektordata/scripts/calendar-fetcher.py +++ b/lektor/lektordata/scripts/calendar-fetcher.py @@ -1,4 +1,4 @@ -from datetime import datetime, date, timedelta +from datetime import datetime, date, timedelta, timezone import recurring_ical_events import requests from copy import deepcopy @@ -63,30 +63,46 @@ def fetch_upcoming_events(ics_url): response = requests.get(ics_url) calendar = Calendar.from_ical(response.content) - events = split_multiday_events(recurring_ical_events.of(calendar).after(datetime.now())) + now=datetime.now(timezone.utc) # + timedelta(days=1) + + raw_events = split_multiday_events(recurring_ical_events.of(calendar).after(now)) + + now_date = now.date() + now_datetime = now + events = [] + for raw_event in raw_events: + start = raw_event.get('dtstart').dt + if isinstance(start, datetime): + my_now = now_datetime + else: + my_now = now_date + if start >= my_now: + events.append(raw_event) 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") - # 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') + + start = event.get('dtstart').dt + out_summary = event.get('summary') + location = event.get('location', 'No location specified') - if location != 'No location specified': - out_location = location - else: - out_location = " " + out_startdate = start.strftime("%a. %-d. %B %Y") - print(f"*
{out_summary}
 ") - print(f" *
{out_startdate}
 ") - print(f" *
{out_starttime}
 ") - print(f" *
{out_location}
 ") + # 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 = " " + + print(f"*
{out_summary}
 ") + print(f" *
{out_startdate}
 ") + print(f" *
{out_starttime}
 ") + print(f" *
{out_location}
 ") if __name__ == "__main__":