From 39ba7483282f2e33b98473997ac2d872ab9d7cd1 Mon Sep 17 00:00:00 2001 From: "yishiwang@microsoft.com" Date: Fri, 15 Apr 2022 11:05:02 +0800 Subject: [PATCH] `az storage blob download-batch`: Fix when `--pattern` is blob name --- .../latest/test_storage_batch_operations.py | 18 +++++++++++------- .../azure/cli/command_modules/storage/util.py | 7 +++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/storage/tests/latest/test_storage_batch_operations.py b/src/azure-cli/azure/cli/command_modules/storage/tests/latest/test_storage_batch_operations.py index 4951450cc2e..44fe73ed5ed 100644 --- a/src/azure-cli/azure/cli/command_modules/storage/tests/latest/test_storage_batch_operations.py +++ b/src/azure-cli/azure/cli/command_modules/storage/tests/latest/test_storage_batch_operations.py @@ -20,14 +20,12 @@ def test_storage_blob_batch_download_scenarios(self, test_dir, storage_account_i # upload test files to storage account self.storage_cmd('storage blob upload-batch -s "{}" -d {} --max-connections 3', storage_account_info, test_dir, src_container) - from azure.cli.core.azclierror import AzureResponseError - with self.assertRaises(AzureResponseError): - self.storage_cmd('storage blob upload-batch -s "{}" -d {} --max-connections 3', storage_account_info, - test_dir, src_container) + + # test upload-batch with & without --overwrite + self.storage_cmd('storage blob upload-batch -s "{}" -d {} --max-connections 3', storage_account_info, + test_dir, src_container).assert_with_checks(JMESPathCheck('length(@)', 0)) self.storage_cmd('storage blob upload-batch -s "{}" -d {} --max-connections 3 --overwrite', storage_account_info, - test_dir, src_container) - self.storage_cmd('storage blob list -c {}', storage_account_info, src_container).assert_with_checks( - JMESPathCheck('length(@)', 41)) + test_dir, src_container).assert_with_checks(JMESPathCheck('length(@)', 41)) # download recursively without pattern local_folder = self.create_temp_dir() @@ -57,6 +55,12 @@ def test_storage_blob_batch_download_scenarios(self, test_dir, storage_account_i local_folder, '*/file_0') self.assertEqual(4, sum(len(f) for r, d, f in os.walk(local_folder))) + # download blob without wild cards + local_folder = self.create_temp_dir() + self.storage_cmd('storage blob download-batch -s {} -d "{}" --pattern {}', storage_account_info, src_container, + local_folder, 'apple/file_0') + self.assertEqual(1, sum(len(f) for r, d, f in os.walk(local_folder))) + # upload blobs with names that start with path separator local_file = self.create_temp_file(1) src_container = self.create_container(storage_account_info) diff --git a/src/azure-cli/azure/cli/command_modules/storage/util.py b/src/azure-cli/azure/cli/command_modules/storage/util.py index 1ab287a5a2f..7b2bd83c2e2 100644 --- a/src/azure-cli/azure/cli/command_modules/storage/util.py +++ b/src/azure-cli/azure/cli/command_modules/storage/util.py @@ -28,8 +28,11 @@ def collect_blob_objects(blob_service, container, pattern=None): raise ValueError('missing parameter container') if not _pattern_has_wildcards(pattern): - if blob_service.exists(container, pattern): - yield pattern, blob_service.get_blob_properties(container, pattern) + from azure.core.exceptions import ResourceNotFoundError + try: + yield pattern, blob_service.get_blob_client(container, pattern).get_blob_properties() + except ResourceNotFoundError: + return else: if hasattr(blob_service, 'list_blobs'): blobs = blob_service.list_blobs(container)