def poll(request, organization, project): offset = 0 limit = EVENTS_PER_PAGE group_result = _get_group_list( request=request, project=project, ) event_list = group_result['event_list'] event_list = list(event_list[offset:limit]) data = to_json(event_list, request) links = [ ('previous', str(group_result['prev_cursor'])), ('next', str(group_result['next_cursor'])), ] querystring = u'&'.join( u'{0}={1}'.format(urlquote(k), urlquote(v)) for k, v in request.GET.iteritems() if k != 'cursor' ) base_url = request.build_absolute_uri(request.path) if querystring: base_url = '{0}?{1}'.format(base_url, querystring) else: base_url = base_url + '?' link_values = [] for name, cursor in links: link_values.append(LINK_HEADER.format( uri=base_url, cursor=cursor, name=name, has_results='true' if bool(cursor) else 'false', )) headers = {} if link_values: headers['Link'] = ', '.join(link_values) response = HttpResponse(data) response['Content-Type'] = 'application/json' if link_values: response['Link'] = ', '.join(link_values) return response
def build_cursor_link(self, request, name, cursor): # The base API function only uses the last query parameter, but this endpoint # needs all the parameters, particularly for the "field" query param. querystring = "&".join(f"{urlquote(query[0])}={urlquote(value)}" for query in request.GET.lists() if query[0] != "cursor" for value in query[1]) base_url = absolute_uri(urlquote(request.path)) if querystring: base_url = f"{base_url}?{querystring}" else: base_url = base_url + "?" return LINK_HEADER.format( uri=base_url, cursor=str(cursor), name=name, has_results="true" if bool(cursor) else "false", )