Updated ics_calendar to restore compatibility with HA

This commit is contained in:
2025-05-08 10:02:22 +02:00
parent fef90d5a78
commit ca599eab7a
21 changed files with 1329 additions and 234 deletions

View File

@@ -1,13 +1,14 @@
"""Support for recurring_ical_events parser."""
from datetime import date, datetime, timedelta
from typing import Optional, Union
import recurring_ical_events as rie
from homeassistant.components.calendar import CalendarEvent
from icalendar import Calendar
from ..filter import Filter
from ..icalendarparser import ICalendarParser
from ..parserevent import ParserEvent
from ..utility import compare_event_dates
@@ -45,7 +46,7 @@ class ParserRIE(ICalendarParser):
end: datetime,
include_all_day: bool,
offset_hours: int = 0,
) -> list[CalendarEvent]:
) -> list[ParserEvent]:
"""Get a list of events.
Gets the events from start to end, including or excluding all day
@@ -59,12 +60,12 @@ class ParserRIE(ICalendarParser):
:param offset_hours the number of hours to offset the event
:type offset_hours int
:returns a list of events, or an empty list
:rtype list[CalendarEvent]
:rtype list[ParserEvent]
"""
event_list: list[CalendarEvent] = []
event_list: list[ParserEvent] = []
if self._calendar is not None:
for event in rie.of(self._calendar).between(
for event in rie.of(self._calendar, skip_bad_series=True).between(
start - timedelta(hours=offset_hours),
end - timedelta(hours=offset_hours),
):
@@ -73,7 +74,7 @@ class ParserRIE(ICalendarParser):
if all_day and not include_all_day:
continue
calendar_event: CalendarEvent = CalendarEvent(
calendar_event: ParserEvent = ParserEvent(
summary=event.get("SUMMARY"),
start=start,
end=end,
@@ -91,7 +92,7 @@ class ParserRIE(ICalendarParser):
now: datetime,
days: int,
offset_hours: int = 0,
) -> Optional[CalendarEvent]:
) -> Optional[ParserEvent]:
"""Get the current or next event.
Gets the current event, or the next upcoming event with in the
@@ -104,17 +105,17 @@ class ParserRIE(ICalendarParser):
:type int
:param offset_hours the number of hours to offset the event
:type offset_hours int
:returns a CalendarEvent or None
:returns a ParserEvent or None
"""
if self._calendar is None:
return None
temp_event: CalendarEvent = None
temp_event = None
temp_start: date | datetime = None
temp_end: date | datetime = None
temp_all_day: bool = None
end: datetime = now + timedelta(days=days)
for event in rie.of(self._calendar).between(
for event in rie.of(self._calendar, skip_bad_series=True).between(
now - timedelta(hours=offset_hours),
end - timedelta(hours=offset_hours),
):
@@ -139,7 +140,7 @@ class ParserRIE(ICalendarParser):
if temp_event is None:
return None
return CalendarEvent(
return ParserEvent(
summary=temp_event.get("SUMMARY"),
start=temp_start,
end=temp_end,