docs: def get_recurring_events(self, calendar_id, event_id, start_time, end_time, maxResults = None):
          '''A wrapper for events().instances. Returns the list of recurring events for the given calendar alias within the specified timeframe.'''
          es = []
          page_token = None
          while True:
              events = self.service.events().instances(calendarId = self.configured_calendar_ids[calendar_id], eventId = event_id, pageToken=page_token, timeMin = start_time, timeMax = end_time, maxResults = maxResults, showDeleted = False).execute()
              for event in events['items']:
                  dt = None
                  nb = DeepNonStrictNestedBunch(event)
                  assert(not(nb._event))
                  nb._event = event # keep the original event as returned in case we want to reuse it e.g. insert it into another calendar
                  if nb.start.date:
                      dt = dateutil.parser.parse(nb.start.date + 'T00:00:00-08:00')
                  elif nb.start.dateTime:
                      dt = dateutil.parser.parse(nb.start.dateTime)
                  nb.datetime_o = dt
                  nb.calendar_id = calendar_id
                  es.append(nb)
              page_token = events.get('nextPageToken')
              if not page_token:
                  break
          return es