diff --git a/platypush/plugins/calendar/__init__.py b/platypush/plugins/calendar/__init__.py index d47e1dac..377848b2 100644 --- a/platypush/plugins/calendar/__init__.py +++ b/platypush/plugins/calendar/__init__.py @@ -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( diff --git a/platypush/plugins/calendar/ical.py b/platypush/plugins/calendar/ical.py index a7222508..792d1cc3 100644 --- a/platypush/plugins/calendar/ical.py +++ b/platypush/plugins/calendar/ical.py @@ -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