def list_calendars(self, limit=None, *, query=None, order_by=None):
url = self.build_url(self._endpoints.get('<STR_LIT>'))<EOL>params = {}<EOL>if limit:<EOL><INDENT>params['<STR_LIT>'] = limit<EOL><DEDENT>if query:<EOL><INDENT>params['<STR_LIT>'] = str(query)<EOL><DEDENT>if order_by:<EOL><INDENT>params['<STR_LIT>'] = order_by<EOL><DEDENT>response = self.con.get(url, params=params or None)<EOL>if not response:<EOL><INDENT>return []<EOL><DEDENT>data = response.json()<EOL>contacts = [self.calendar_constructor(parent=self, **{<EOL>self._cloud_data_key: x}) for x in data.get('<STR_LIT:value>', [])]<EOL>return contacts<EOL>
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]