From 18097a1bd6655bd9eff753403cf0e2b8dce19974 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Mon, 17 Oct 2016 13:57:05 -0400 Subject: [PATCH] Fix Link headers for pagination to match RFC Fixes part of #2002 --- endpoints/v2/__init__.py | 5 +++-- test/registry_tests.py | 8 ++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/endpoints/v2/__init__.py b/endpoints/v2/__init__.py index 8d611de0a..da20b9077 100644 --- a/endpoints/v2/__init__.py +++ b/endpoints/v2/__init__.py @@ -59,8 +59,9 @@ def paginate(limit_kwarg_name='limit', offset_kwarg_name='offset', return next_page_token = encrypt_page_token({'offset': limit + offset}) - link = get_app_url() + url_for(request.endpoint, **request.view_args) - link += '?%s; rel="next"' % urlencode({'n': limit, 'next_page': next_page_token}) + link_url = get_app_url() + url_for(request.endpoint, **request.view_args) + link_param = urlencode({'n': limit, 'next_page': next_page_token}) + link = '<%s?%s>; rel="next"' % (link_url, link_param) response.headers['Link'] = link kwargs[limit_kwarg_name] = limit diff --git a/test/registry_tests.py b/test/registry_tests.py index 075b761fc..120d5b8be 100644 --- a/test/registry_tests.py +++ b/test/registry_tests.py @@ -1377,11 +1377,15 @@ class V2RegistryTests(V2RegistryPullMixin, V2RegistryPushMixin, RegistryTestsMix break # Check the next page of results. - link = result.headers['Link'] + link_header = result.headers['Link'] + self.assertTrue(link_header.startswith('<')) + self.assertTrue(link_header.endswith('>; rel="next"')) + + link = link_header[1:] self.assertTrue(link.endswith('; rel="next"')) url, _ = link.split(';') - relative_url = url[len(self.get_server_url()):] + relative_url = url[len(self.get_server_url()):-1] encountered.update(set(result_json['tags']))