From 7951899361b76110d9f1fbad7553bf56c0c301c2 Mon Sep 17 00:00:00 2001 From: Xiang Yan Date: Thu, 24 Jun 2021 10:56:48 -0700 Subject: [PATCH 1/2] raise decode error instead of ContentDecodingError --- sdk/core/azure-core/CHANGELOG.md | 3 +++ .../core/pipeline/transport/_requests_basic.py | 15 +++++++++------ sdk/core/azure-core/tests/test_streaming.py | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/sdk/core/azure-core/CHANGELOG.md b/sdk/core/azure-core/CHANGELOG.md index 10e242697b12..6675d7ec325f 100644 --- a/sdk/core/azure-core/CHANGELOG.md +++ b/sdk/core/azure-core/CHANGELOG.md @@ -2,6 +2,9 @@ ## 1.15.1 (Unreleased) +### Breaking Changes + +- Sync stream downloading now raises `azure.core.exceptions.DecodeError` rather than `requests.exceptions.ContentDecodingError` ## 1.15.0 (2021-06-04) 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 b1b827424cdd..c70cada7ea96 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,14 +29,15 @@ 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 from azure.core.configuration import ConnectionConfiguration from azure.core.exceptions import ( ServiceRequestError, - ServiceResponseError + ServiceResponseError, + DecodeError ) from . import HttpRequest # pylint: disable=unused-import @@ -58,11 +59,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: @@ -154,6 +155,8 @@ def __next__(self): raise StopIteration() except requests.exceptions.StreamConsumedError: raise + except requests.exceptions.ContentDecodingError as err: + raise DecodeError(err, error=err) except Exception as err: _LOGGER.warning("Unable to stream download: %s", err) self.response.internal_response.close() diff --git a/sdk/core/azure-core/tests/test_streaming.py b/sdk/core/azure-core/tests/test_streaming.py index ca5a5df23284..49e0754ac4ac 100644 --- a/sdk/core/azure-core/tests/test_streaming.py +++ b/sdk/core/azure-core/tests/test_streaming.py @@ -25,6 +25,7 @@ # -------------------------------------------------------------------------- import os from azure.core import PipelineClient +from azure.core.exceptions import DecodeError def test_decompress_plain_no_header(): # expect plain text @@ -90,7 +91,6 @@ def test_compress_compressed_no_header(): def test_decompress_plain_header(): # 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) @@ -102,7 +102,7 @@ def test_decompress_plain_header(): try: content = b"".join(list(data)) assert False - except requests.exceptions.ContentDecodingError: + except DecodeError: pass def test_compress_plain_header(): From 84bc38d3d24a1459aaae08ac2a4739ba63dd4976 Mon Sep 17 00:00:00 2001 From: Xiang Yan Date: Tue, 9 Nov 2021 15:31:02 -0800 Subject: [PATCH 2/2] Update _requests_basic.py --- .../azure-core/azure/core/pipeline/transport/_requests_basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2eddcb40a944..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 @@ -37,9 +37,9 @@ from azure.core.exceptions import ( ServiceRequestError, ServiceResponseError, - DecodeError IncompleteReadError, HttpResponseError, + DecodeError ) from . import HttpRequest # pylint: disable=unused-import