diff --git a/sdk/core/azure-core/CHANGELOG.md b/sdk/core/azure-core/CHANGELOG.md index 213564f6755c..ec1e97608c35 100644 --- a/sdk/core/azure-core/CHANGELOG.md +++ b/sdk/core/azure-core/CHANGELOG.md @@ -6,6 +6,8 @@ ### Breaking Changes +- Sync stream downloading now raises `azure.core.exceptions.DecodeError` rather than `requests.exceptions.ContentDecodingError` + ### Bugs Fixed ### Other Changes diff --git a/sdk/core/azure-core/azure/core/pipeline/transport/_requests_basic.py b/sdk/core/azure-core/azure/core/pipeline/transport/_requests_basic.py index ab9807e7bdc0..3896ad825d02 100644 --- a/sdk/core/azure-core/azure/core/pipeline/transport/_requests_basic.py +++ b/sdk/core/azure-core/azure/core/pipeline/transport/_requests_basic.py @@ -29,7 +29,7 @@ import urllib3 # type: ignore from urllib3.util.retry import Retry # type: ignore from urllib3.exceptions import ( - DecodeError, ReadTimeoutError, ProtocolError + DecodeError as CoreDecodeError, ReadTimeoutError, ProtocolError ) import requests @@ -39,6 +39,7 @@ ServiceResponseError, IncompleteReadError, HttpResponseError, + DecodeError ) from . import HttpRequest # pylint: disable=unused-import @@ -71,11 +72,11 @@ def _read_raw_stream(response, chunk_size=1): for chunk in response.raw.stream(chunk_size, decode_content=False): yield chunk except ProtocolError as e: - raise requests.exceptions.ChunkedEncodingError(e) - except DecodeError as e: - raise requests.exceptions.ContentDecodingError(e) + raise ServiceResponseError(e, error=e) + except CoreDecodeError as e: + raise DecodeError(e, error=e) except ReadTimeoutError as e: - raise requests.exceptions.ConnectionError(e) + raise ServiceRequestError(e, error=e) else: # Standard file-like object. while True: @@ -174,6 +175,8 @@ def __next__(self): raise StopIteration() except requests.exceptions.StreamConsumedError: raise + except requests.exceptions.ContentDecodingError as err: + raise DecodeError(err, error=err) except requests.exceptions.ChunkedEncodingError as err: msg = err.__str__() if 'IncompleteRead' in msg: diff --git a/sdk/core/azure-core/tests/test_streaming.py b/sdk/core/azure-core/tests/test_streaming.py index 87e51851722f..17f9d82f612e 100644 --- a/sdk/core/azure-core/tests/test_streaming.py +++ b/sdk/core/azure-core/tests/test_streaming.py @@ -97,7 +97,6 @@ def test_compress_compressed_no_header(http_request): @pytest.mark.parametrize("http_request", HTTP_REQUESTS) def test_decompress_plain_header(http_request): # expect error - import requests account_name = "coretests" account_url = "https://{}.blob.core.windows.net".format(account_name) url = "https://{}.blob.core.windows.net/tests/test_with_header.txt".format(account_name) @@ -109,7 +108,7 @@ def test_decompress_plain_header(http_request): try: content = b"".join(list(data)) assert False - except (requests.exceptions.ContentDecodingError, DecodeError): + except DecodeError: pass @pytest.mark.parametrize("http_request", HTTP_REQUESTS)