calendar.ical.get_upcoming_events should fail hard if there was any exception/unsuccessful response

The error should not be swallowed and it should be instead propagated up
to calendar.get_upcoming_events, if it's called from that context. And
calendar.get_upcoming_events should be in charge of handling the
exceptions and make sure that failing to retrieve the events for one
calendar doesn't make the whole method fail.
This commit is contained in:
Fabio Manganiello 2021-03-05 11:16:14 +01:00
parent 4ada1c663d
commit 47ba13d985
2 changed files with 22 additions and 31 deletions

View file

@ -110,8 +110,11 @@ class CalendarPlugin(Plugin, CalendarInterface):
events = []
for calendar in self.calendars:
try:
cal_events = calendar.get_upcoming_events().output or []
events.extend(cal_events)
except Exception as e:
self.logger.warning('Could not retrieve events: {}'.format(str(e)))
events = sorted(events, key=lambda event:
dateutil.parser.parse(

View file

@ -69,21 +69,11 @@ class CalendarIcalPlugin(Plugin, CalendarInterface):
from icalendar import Calendar
events = []
try:
response = requests.get(self.url)
except Exception as e:
self.logger.exception(e)
return events
assert response.ok, \
"HTTP error while getting events from {}: {}".format(self.url, response.text)
if response.ok:
calendar = None
try:
calendar = Calendar.from_ical(response.text)
except Exception as e:
self.logger.exception(e)
return events
for event in calendar.walk():
if event.name != 'VEVENT':
continue # Not an event
@ -99,8 +89,6 @@ class CalendarIcalPlugin(Plugin, CalendarInterface):
and event['responseStatus'] in ['accepted', 'tentative'])
or not only_participating):
events.append(event)
else:
self.logger.error("HTTP error while getting {}: {}".format(self.url, response))
return events