gitlab.lister: Simplify retrieving headers information

As response headers' keys are case-insensitive and requests does the
aggregation magic.

[1] http://docs.python-requests.org/en/master/user/quickstart/#response-headers
This commit is contained in:
Antoine R. Dumont (@ardumont) 2018-07-16 13:57:34 +02:00
parent ec6968e31a
commit e24cf1d4f1
No known key found for this signature in database
GPG key ID: 52E2E9840D10C3B8
3 changed files with 9 additions and 63 deletions

View file

@ -94,13 +94,16 @@ class GitLabLister(PageByPageHttpLister):
return True, delay
return False, 0
def _get_int(self, headers, key):
_val = headers.get(key)
if _val:
return int(_val)
def get_next_target_from_response(self, response):
"""Determine the next page identifier.
"""
_next = utils.get(response.headers, ['X-Next-Page', 'x-next-page'])
if _next:
return int(_next)
return self._get_int(response.headers, 'x-next-page')
def get_pages_information(self):
"""Determine pages information.
@ -108,16 +111,9 @@ class GitLabLister(PageByPageHttpLister):
"""
response = self.transport_head(identifier=1)
h = response.headers
total = utils.get(h, ['X-Total', 'x-total'])
total_pages = utils.get(h, ['X-Total-Pages', 'x-total-pages'])
per_page = utils.get(h, ['X-Per-Page', 'x-per-page'])
if total is not None:
total = int(total)
if total_pages is not None:
total_pages = int(total_pages)
if per_page is not None:
per_page = int(per_page)
return total, total_pages, per_page
return (self._get_int(h, 'x-total'),
self._get_int(h, 'x-total-pages'),
self._get_int('x-per-page'))
def transport_response_simplified(self, response):
repos = response.json()

View file

@ -11,45 +11,6 @@ from swh.lister import utils
class UtilsTest(unittest.TestCase):
@istest
def get(self):
data = {
'X-Next-Page': None,
'x-next-page': 1,
}
actual_value = utils.get(data, ['X-Next-Page', 'x-next-page'])
self.assertEqual(actual_value, 1)
data = {
'X-Next-Page': 10,
'x-next-page': 1,
}
actual_value = utils.get(data, ['X-Next-Page', 'x-next-page'])
self.assertEqual(actual_value, 10)
data = {
'x-next-page': 100,
}
actual_value = utils.get(data, ['X-Next-Page', 'x-next-page'])
self.assertEqual(actual_value, 100)
@istest
def get_empty(self):
self.assertIsNone(utils.get({}, []))
self.assertIsNone(utils.get({'a': 1}, ['b']))
self.assertIsNone(utils.get({'b': 2}, []))
self.assertIsNone(utils.get({'b': 2}, []))
@istest
def get_errors(self):
with self.assertRaises(TypeError):
self.assertIsNone(utils.get({}, None))
with self.assertRaises(AttributeError):
self.assertIsNone(utils.get(None, ['a']))
@istest
def split_range(self):
actual_ranges = list(utils.split_range(14, 5))

View file

@ -3,17 +3,6 @@
# See top-level LICENSE file for more information
def get(d, keys):
"""Given a dict, lookup in order for keys with values not None.
"""
for key in keys:
v = d.get(key)
if v is not None:
return v
return None
def split_range(total_pages, nb_pages):
prev_index = None
for index in range(0, total_pages, nb_pages):