code: def list_calendars(self, limit=None, *, query=None, order_by=None):
          
          url = self.build_url(self._endpoints.get('root_calendars'))
  
          params = {}
          if limit:
              params['$top'] = limit
          if query:
              params['$filter'] = str(query)
          if order_by:
              params['$orderby'] = order_by
  
          response = self.con.get(url, params=params or None)
          if not response:
              return []
  
          data = response.json()
  
          # Everything received from cloud must be passed as self._cloud_data_key
          contacts = [self.calendar_constructor(parent=self, **{
              self._cloud_data_key: x}) for x in data.get('value', [])]
  
          return contacts
docs: Gets a list of calendars
  
          To use query an order_by check the OData specification here:
          http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/
          part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions
          -complete.html
  
          :param int limit: max no. of calendars to get. Over 999 uses batch.
          :param query: applies a OData filter to the request
          :type query: Query or str
          :param order_by: orders the result set based on this condition
          :type order_by: Query or str
          :return: list of calendars
          :rtype: list[Calendar]