コード例 #1
0
    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, {})
コード例 #2
0
    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