Skip to content

Commit 25ace8b

Browse files
authored
[Storage] Fix Azure#21699: Fix upload-batch result url truncation issue (Azure#21720)
* fix upload-batch result url issue * fix test * fix test
1 parent c2d1428 commit 25ace8b

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

src/azure-cli/azure/cli/command_modules/storage/operations/blob.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,9 @@ def storage_blob_upload_batch(cmd, client, source, destination, pattern=None, #
425425
maxsize_condition=None, max_connections=2, lease_id=None, progress_callback=None,
426426
if_modified_since=None, if_unmodified_since=None, if_match=None,
427427
if_none_match=None, timeout=None, dryrun=False, socket_timeout=None, **kwargs):
428-
def _create_return_result(blob_content_settings, upload_result=None):
428+
def _create_return_result(blob_content_settings, blob_client, upload_result=None):
429429
return {
430-
'Blob': client.url,
430+
'Blob': blob_client.url,
431431
'Type': blob_content_settings.content_type,
432432
'Last Modified': upload_result['last_modified'] if upload_result else None,
433433
'eTag': upload_result['etag'] if upload_result else None}
@@ -444,8 +444,11 @@ def _create_return_result(blob_content_settings, upload_result=None):
444444
logger.info(' total %d', len(source_files))
445445
results = []
446446
for src, dst in source_files:
447+
blob_client = client.get_blob_client(container=destination_container_name,
448+
blob=normalize_blob_file_path(destination_path, dst))
447449
results.append(_create_return_result(blob_content_settings=guess_content_type(src, content_settings,
448-
t_content_settings)))
450+
t_content_settings),
451+
blob_client=blob_client))
449452
else:
450453
@check_precondition_success
451454
def _upload_blob(*args, **kwargs):
@@ -477,7 +480,7 @@ def _upload_blob(*args, **kwargs):
477480
if_none_match=if_none_match, timeout=timeout, **kwargs)
478481
if include:
479482
results.append(_create_return_result(blob_content_settings=guessed_content_settings,
480-
upload_result=result))
483+
blob_client=blob_client, upload_result=result))
481484
except (ResourceModifiedError, AzureResponseError) as ex:
482485
logger.error(ex)
483486

src/azure-cli/azure/cli/command_modules/storage/tests/latest/test_storage_batch_operations.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ def test_storage_blob_batch_upload_scenarios(self, test_dir, storage_account_inf
124124
self.storage_cmd('storage blob list -c {} --prefix some_dir',
125125
storage_account_info, container).assert_with_checks(JMESPathCheck('length(@)', 4))
126126

127+
# upload-batch with preconditon
128+
container = self.create_container(storage_account_info)
127129
self.storage_cmd('storage blob upload-batch -d {} -s "{}"',
128130
storage_account_info, container, test_dir)
129131
import time
@@ -142,6 +144,19 @@ def test_storage_blob_batch_upload_scenarios(self, test_dir, storage_account_inf
142144
container, test_dir, current).get_output_in_json()
143145
self.assertEqual(len(result), 41)
144146

147+
#check result url
148+
container = self.create_container(storage_account_info)
149+
result = self.storage_cmd('storage blob upload-batch -s "{}" -d {}', storage_account_info,
150+
test_dir, container).get_output_in_json()
151+
if result and result[0]:
152+
res = result[0]
153+
self.assertRegex(res['Blob'], '^.*[^\/]+$')
154+
base_url = res['Blob'].split('/')[:3]
155+
container = res['Blob'].split('/')[3]
156+
blob_name = '/'.join(res['Blob'].split('/')[4:])
157+
self.storage_cmd('storage blob show -c {} -n {}', storage_account_info,
158+
container, blob_name)
159+
145160
@ResourceGroupPreparer()
146161
@StorageAccountPreparer()
147162
@StorageTestFilesPreparer()

0 commit comments

Comments
 (0)