Ejemplo n.º 1
0
def _decode_result(response, decoders, force_codec=False):
    """
    Given an HTTP response, return the decoded Core API document.
    """
    if response.content:
        # Content returned in response. We should decode it.
        if force_codec:
            codec = decoders[0]
        else:
            content_type = response.headers.get('content-type')
            codec = utils.negotiate_decoder(decoders, content_type)

        options = {'base_url': response.url}
        if 'content-type' in response.headers:
            options['content_type'] = response.headers['content-type']
        if 'content-disposition' in response.headers:
            options['content_disposition'] = response.headers[
                'content-disposition']

        result = codec.decode(response.content, **options)
    else:
        # No content returned in response.
        result = None

    # Coerce 4xx and 5xx codes into errors.
    is_error = response.status_code >= 400 and response.status_code <= 599
    if is_error and not isinstance(result, Error):
        result = _coerce_to_error(result, default_title=response.reason)

    return result
Ejemplo n.º 2
0
    def _decode_message(self, response, data, decoders):
        result = None

        if data:
            content_type = response.headers.get('content-type')
            codec = utils.negotiate_decoder(decoders, content_type)

            options = {'base_url': response.url}
            if 'content-type' in response.headers:
                options['content_type'] = response.headers['content-type']
            if 'content-disposition' in response.headers:
                options['content_disposition'] = response.headers[
                    'content-disposition']

            result = codec.load(data, **options)

        return result
Ejemplo n.º 3
0
def _decode_result(response, decoders, force_codec=False):
    """
    Given an HTTP response, return the decoded Core API document.
    """
    if response.content:
        # Content returned in response. We should decode it.
        if force_codec:
            codec = decoders[0]
        else:
            content_type = response.headers.get('content-type')
            codec = negotiate_decoder(decoders, content_type)
        result = codec.load(response.content, base_url=response.url)
    else:
        # No content returned in response.
        result = None

    # Coerce 4xx and 5xx codes into errors.
    is_error = response.status_code >= 400 and response.status_code <= 599
    if is_error and not isinstance(result, Error):
        result = _coerce_to_error(result, default_title=response.reason)

    return result
Ejemplo n.º 4
0
def _decode_result_from_test_client(response, decoders=None, original_url=None):
    """
    Given an HTTP response, return the decoded Core API document.
    """
    if response.content:
        if response.redirect_chain:
            base_url = response.redirect_chain[-1][0]
        else:
            base_url = original_url
        # Content returned in response. We should decode it.
        content_type = response.get('content-type')
        codec = negotiate_decoder(decoders, content_type)
        result = codec.load(response.content, base_url=base_url)
    else:
        # No content returned in response.
        result = None

    # Coerce 4xx and 5xx codes into errors.
    is_error = response.status_code >= 400 and response.status_code <= 599
    if is_error and not isinstance(result, Error):
        result = _coerce_to_error(result, default_title=response.reason_phrase)

    return result
Ejemplo n.º 5
0
def test_get_unsupported_decoder():
    with pytest.raises(NoCodecAvailable):
        negotiate_decoder([CoreJSONCodec()], 'application/csv')
Ejemplo n.º 6
0
def test_get_supported_decoder_with_parameters():
    codec = negotiate_decoder([CoreJSONCodec()],
                              'application/vnd.coreapi+json; verison=1.0')
    assert isinstance(codec, CoreJSONCodec)
Ejemplo n.º 7
0
def test_get_supported_decoder():
    codec = negotiate_decoder([CoreJSONCodec()],
                              'application/vnd.coreapi+json')
    assert isinstance(codec, CoreJSONCodec)
Ejemplo n.º 8
0
def test_get_default_decoder():
    codec = negotiate_decoder([CoreJSONCodec()])
    assert isinstance(codec, CoreJSONCodec)
Ejemplo n.º 9
0
def test_get_unsupported_decoder():
    with pytest.raises(UnsupportedContentType):
        negotiate_decoder([CoreJSONCodec()], 'application/csv')