From 5b5cfd0bebcdfd065d1c40ac05bc3e4eaa8180cc Mon Sep 17 00:00:00 2001 From: Arnaud Joset Date: Thu, 3 Jun 2021 10:59:18 +0000 Subject: [PATCH] [FIX] google_calendar: prevent traceback in error handling Before this commit, when the start datetime of base_event_id in recurrences was not set, a traceback would occurs when trying to notify the user. closes odoo/odoo#71724 X-original-commit: d5b9403c0023d8df49487293b217c59265189a7a Signed-off-by: Yannick Tivisse (yti) Signed-off-by: Arnaud Joset --- addons/google_calendar/models/google_sync.py | 23 ++++++++++---------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/addons/google_calendar/models/google_sync.py b/addons/google_calendar/models/google_sync.py index 0e67011268c..aeee4ac23e9 100644 --- a/addons/google_calendar/models/google_sync.py +++ b/addons/google_calendar/models/google_sync.py @@ -171,20 +171,20 @@ class GoogleSync(models.AbstractModel): if http_error.response.status_code in (403, 400): response = http_error.response.json() if self._name == 'calendar.event': - start = self.start.strftime('%Y-%m-%d at %H:%M') + start = self.start and self.start.strftime('%Y-%m-%d at %H:%M') or _("undefined time") event_ids = self.id name = self.name error_log = "Error while syncing event: " event = self else: # calendar recurrence is triggering the error - start = self.base_event_id.start.strftime('%Y-%m-%d at %H:%M') - event_ids = _("%(id)s and %(length)s following", id=self.base_event_id.id, length=len(self.calendar_event_ids.ids)) - name = self.base_event_id.name + event = self.base_event_id or self._get_first_event(include_outliers=True) + start = event.start and event.start.strftime('%Y-%m-%d at %H:%M') or _("undefined time") + event_ids = _("%(id)s and %(length)s following", id=event.id, length=len(self.calendar_event_ids.ids)) + name = event.name # prevent to sync other events self.calendar_event_ids.need_sync = False - error_log = "Error while syncing recurrence: " - event = self.base_event_id + error_log = "Error while syncing recurrence [{id} - {name} - {rrule}]: ".format(id=self.id, name=self.name, rrule=self.rrule) # We don't have right access on the event or the request paramaters were bad. # https://developers.google.com/calendar/v3/errors#403_forbidden_for_non-organizer @@ -203,11 +203,12 @@ class GoogleSync(models.AbstractModel): "It will not be synced as long at it is not updated.
" "%(reason)s", reason=reason) - event.message_post( - body=body, - message_type='comment', - subtype_xmlid='mail.mt_note', - ) + if event: + event.message_post( + body=body, + message_type='comment', + subtype_xmlid='mail.mt_note', + ) @after_commit def _google_delete(self, google_service: GoogleCalendarService, google_id, timeout=TIMEOUT):