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:
parent
ec6968e31a
commit
e24cf1d4f1
3 changed files with 9 additions and 63 deletions
|
@ -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()
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue