def test_extract_headers(self): headers = { 'prefix1-header1': 'value1', 'prefix1-header2': 'value2', 'prefix2-header3': 'value3', 'prefix1-header4': 'value4', } result = utils.extract_headers(headers, 'prefix1') self.assertEqual(result, { 'header1': 'value1', 'header2': 'value2', 'header4': 'value4', }) result = utils.extract_headers(headers, 'prefix2') self.assertEqual(result, {'header3': 'value3'}) result = utils.extract_headers(headers, 'prefix3') self.assertEqual(result, {})
def handle_response(self, response, content): """Validate HTTP response.""" def _validate_status_code(status_code, msg=None, url=None): if 200 <= status_code <= 299: return True elif status_code in (301, 302, 303, 307): raise exceptions.Redirection(status_code, msg, url) elif status_code == 400: raise exceptions.BadRequest(status_code, msg, url) elif status_code == 401: raise exceptions.UnauthorizedAccess(status_code, msg, url) elif status_code == 404: raise exceptions.ResourceNotFound(status_code, msg, url) elif 500 <= status_code <= 599: raise exceptions.ServerError(status_code, msg, url) else: raise exceptions.ConnectionError(status_code, msg, url) return False status = response.status_code msg = response.reason url = response.url if _validate_status_code(status, msg, url): data = json.loads(content) if content else {} status = data.get('status', None) if status is None: return utils.wrap_data_response( data, headers=utils.extract_headers( response.headers, HTTP_HEADER_PREFIX, ) ) msg = data.get('response', '') if _validate_status_code(status, msg, url): return data