def METHOD_NAME(self, limit=100, cursor=None):
    # offset is page #
    # value is page limit
    if cursor is None:
        cursor = Cursor(0, 0, 0)
    limit = min(limit, self.max_limit)
    queryset = self.queryset
    if self.key:
        queryset = queryset.order_by(*self.key)
    page = cursor.offset
    offset = cursor.offset * cursor.value
    stop = offset + (cursor.value or limit) + 1
    if self.max_offset is not None and offset >= self.max_offset:
        raise BadPaginationError("Pagination offset too large")
    if offset < 0:
        raise BadPaginationError("Pagination offset cannot be negative")
    results = list(queryset[offset:stop])
    if cursor.value != limit:
        results = results[-(limit + 1) :]
    next_cursor = Cursor(limit, page + 1, False, len(results) > limit)
    prev_cursor = Cursor(limit, page - 1, True, page > 0)
    results = list(results[:limit])
    if self.on_results:
        results = self.on_results(results)
    max_hits = math.ceil(queryset.count() / limit)
    return CursorResult(
        results=results,
        next=next_cursor,
        prev=prev_cursor,
        hits=None,
        max_hits=max_hits,
    )