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:
parent
4ada1c663d
commit
47ba13d985
2 changed files with 22 additions and 31 deletions
|
@ -110,8 +110,11 @@ class CalendarPlugin(Plugin, CalendarInterface):
|
|||
events = []
|
||||
|
||||
for calendar in self.calendars:
|
||||
cal_events = calendar.get_upcoming_events().output or []
|
||||
events.extend(cal_events)
|
||||
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(
|
||||
|
|
|
@ -69,38 +69,26 @@ 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
|
||||
response = requests.get(self.url)
|
||||
assert response.ok, \
|
||||
"HTTP error while getting events from {}: {}".format(self.url, response.text)
|
||||
|
||||
if response.ok:
|
||||
calendar = None
|
||||
calendar = Calendar.from_ical(response.text)
|
||||
for event in calendar.walk():
|
||||
if event.name != 'VEVENT':
|
||||
continue # Not an event
|
||||
|
||||
try:
|
||||
calendar = Calendar.from_ical(response.text)
|
||||
except Exception as e:
|
||||
self.logger.exception(e)
|
||||
return events
|
||||
event = self._translate_event(event)
|
||||
|
||||
for event in calendar.walk():
|
||||
if event.name != 'VEVENT':
|
||||
continue # Not an event
|
||||
|
||||
event = self._translate_event(event)
|
||||
|
||||
if event['status'] and event['responseStatus'] \
|
||||
and dateutil.parser.parse(event['end']['dateTime']) >= \
|
||||
datetime.datetime.now(pytz.timezone('UTC')) \
|
||||
and (
|
||||
(only_participating
|
||||
and event['status'] == 'confirmed'
|
||||
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))
|
||||
if event['status'] and event['responseStatus'] \
|
||||
and dateutil.parser.parse(event['end']['dateTime']) >= \
|
||||
datetime.datetime.now(pytz.timezone('UTC')) \
|
||||
and (
|
||||
(only_participating
|
||||
and event['status'] == 'confirmed'
|
||||
and event['responseStatus'] in ['accepted', 'tentative'])
|
||||
or not only_participating):
|
||||
events.append(event)
|
||||
|
||||
return events
|
||||
|
||||
|
|
Loading…
Reference in a new issue