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
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
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
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
def test_get_unsupported_decoder(): with pytest.raises(NoCodecAvailable): negotiate_decoder([CoreJSONCodec()], 'application/csv')
def test_get_supported_decoder_with_parameters(): codec = negotiate_decoder([CoreJSONCodec()], 'application/vnd.coreapi+json; verison=1.0') assert isinstance(codec, CoreJSONCodec)
def test_get_supported_decoder(): codec = negotiate_decoder([CoreJSONCodec()], 'application/vnd.coreapi+json') assert isinstance(codec, CoreJSONCodec)
def test_get_default_decoder(): codec = negotiate_decoder([CoreJSONCodec()]) assert isinstance(codec, CoreJSONCodec)
def test_get_unsupported_decoder(): with pytest.raises(UnsupportedContentType): negotiate_decoder([CoreJSONCodec()], 'application/csv')