From e40d3e1d985cee13a2e0d070fb8e04958905f468 Mon Sep 17 00:00:00 2001 From: Steven Jin Date: Fri, 1 Jul 2022 14:30:13 -0700 Subject: [PATCH] [storage.blob] Remove aiohttp as dependency for storage.blob.aio (#24965) * Don't import from aiohttp in blob.aio * update changelog * remove dead code * changelog formatting * add retries back in * Catch correct exception * Update sdk/storage/azure-storage-blob/CHANGELOG.md * missing import * catch azure.core exceptions * Revert * changelog typo * changelog formatting * more changelog * merge main Co-authored-by: Laurent Mazuel --- sdk/storage/azure-storage-blob/CHANGELOG.md | 3 +++ .../azure/storage/blob/aio/_download_async.py | 23 ++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/sdk/storage/azure-storage-blob/CHANGELOG.md b/sdk/storage/azure-storage-blob/CHANGELOG.md index ea63046dfdff8..18d56c8489320 100644 --- a/sdk/storage/azure-storage-blob/CHANGELOG.md +++ b/sdk/storage/azure-storage-blob/CHANGELOG.md @@ -3,8 +3,11 @@ ## 12.13.0 (Unreleased) ### Features Added + +### Bugs Fixed - Stable release of features from 12.13.0b1. - Added support for deleting versions in `delete_blobs` by supplying `version_id`. +- Removed forced `aiohttp` import from storage async download. (#24965) ## 12.13.0b1 (2022-06-15) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py index 8131c0076489d..ddcadc22e7bcd 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_download_async.py @@ -12,8 +12,8 @@ from typing import AsyncIterator import asyncio -from aiohttp import ClientPayloadError -from azure.core.exceptions import HttpResponseError, ServiceResponseError + +from azure.core.exceptions import HttpResponseError, ServiceResponseError, IncompleteReadError from .._shared.request_handlers import validate_and_format_range_headers from .._shared.response_handlers import process_storage_error, parse_length_from_content_range @@ -114,14 +114,15 @@ async def _download_chunk(self, chunk_start, chunk_end): ) retry_active = False - except HttpResponseError as error: - process_storage_error(error) - except ClientPayloadError as error: + except IncompleteReadError as error: retry_total -= 1 if retry_total <= 0: raise ServiceResponseError(error, error=error) await asyncio.sleep(1) + except HttpResponseError as error: + process_storage_error(error) + chunk_data = await process_content(response, offset[0], offset[1], self.encryption_options) @@ -356,6 +357,12 @@ async def _initial_request(self): self.size = self._file_size retry_active = False + except IncompleteReadError as error: + retry_total -= 1 + if retry_total <= 0: + raise ServiceResponseError(error, error=error) + await asyncio.sleep(1) + except HttpResponseError as error: if self._start_range is None and error.response.status_code == 416: # Get range will fail on an empty file. If the user did not @@ -377,12 +384,6 @@ async def _initial_request(self): else: process_storage_error(error) - except ClientPayloadError as error: - retry_total -= 1 - if retry_total <= 0: - raise ServiceResponseError(error, error=error) - await asyncio.sleep(1) - # get page ranges to optimize downloading sparse page blob if response.properties.blob_type == 'PageBlob': try: