Skip to content

storage blob download-batch with glob pattern fails in v2.77Β #32039

@danielpof

Description

@danielpof

Describe the bug

When attempting to download-batch from blob storage with a glob pattern an error occurs in v2.77. If downloading a single file (no glob) there's no error, or when using a previous version with glob it also works

Related command

az storage blob download-batch -s files --pattern 'path/*' --account-name staccount --auth-mode key -d .

Errors

The command failed with an unexpected error. Here is the traceback:
cannot use a string pattern on a bytes-like object
Traceback (most recent call last):
  File "/opt/az/lib/python3.13/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 666, in execute
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
                   ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 726, in _run_job
    return cmd_copy.exception_handler(ex)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/_exception_handler.py", line 17, in file_related_exception_handler
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 703, in _run_job
    result = cmd_copy(params)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 336, in __call__
    return self.handler(*args, **kwargs)
           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/command_operation.py", line 120, in handler
    return op(**command_args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 417, in storage_blob_download_batch
    source_blobs = collect_blobs(client, source_container_name, pattern)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 16, in collect_blobs
    return [name for (name, _) in collect_blob_objects(blob_service, container, pattern)]
                                  ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 52, in collect_blob_objects
    if not pattern or _match_path(blob_name, pattern):
                      ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 199, in _match_path
    return fnmatch(path, pattern)
  File "/opt/az/lib/python3.13/fnmatch.py", line 36, in fnmatch
    return fnmatchcase(name, pat)
  File "/opt/az/lib/python3.13/fnmatch.py", line 71, in fnmatchcase
    return match(name) is not None
           ~~~~~^^^^^^
TypeError: cannot use a string pattern on a bytes-like object

Issue script & Debug output

urllib3.connectionpool: https://staccount.blob.core.windows.net:443 "GET /files?restype=container&comp=list&prefix=path%2F HTTP/1.1" 200 None
cli.azure.cli.core.azclierror: Traceback (most recent call last):
  File "/opt/az/lib/python3.13/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 666, in execute
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
                   ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 726, in _run_job
    return cmd_copy.exception_handler(ex)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/_exception_handler.py", line 17, in file_related_exception_handler
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 703, in _run_job
    result = cmd_copy(params)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 336, in __call__
    return self.handler(*args, **kwargs)
           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/command_operation.py", line 120, in handler
    return op(**command_args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 417, in storage_blob_download_batch
    source_blobs = collect_blobs(client, source_container_name, pattern)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 16, in collect_blobs
    return [name for (name, _) in collect_blob_objects(blob_service, container, pattern)]
                                  ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 52, in collect_blob_objects
    if not pattern or _match_path(blob_name, pattern):
                      ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 199, in _match_path
    return fnmatch(path, pattern)
  File "/opt/az/lib/python3.13/fnmatch.py", line 36, in fnmatch
    return fnmatchcase(name, pat)
  File "/opt/az/lib/python3.13/fnmatch.py", line 71, in fnmatchcase
    return match(name) is not None
           ~~~~~^^^^^^
TypeError: cannot use a string pattern on a bytes-like object

cli.azure.cli.core.azclierror: The command failed with an unexpected error. Here is the traceback:
az_command_data_logger: The command failed with an unexpected error. Here is the traceback:
cli.azure.cli.core.azclierror: cannot use a string pattern on a bytes-like object
Traceback (most recent call last):
  File "/opt/az/lib/python3.13/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 666, in execute
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
                   ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 726, in _run_job
    return cmd_copy.exception_handler(ex)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/_exception_handler.py", line 17, in file_related_exception_handler
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 703, in _run_job
    result = cmd_copy(params)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 336, in __call__
    return self.handler(*args, **kwargs)
           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/command_operation.py", line 120, in handler
    return op(**command_args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 417, in storage_blob_download_batch
    source_blobs = collect_blobs(client, source_container_name, pattern)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 16, in collect_blobs
    return [name for (name, _) in collect_blob_objects(blob_service, container, pattern)]
                                  ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 52, in collect_blob_objects
    if not pattern or _match_path(blob_name, pattern):
                      ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 199, in _match_path
    return fnmatch(path, pattern)
  File "/opt/az/lib/python3.13/fnmatch.py", line 36, in fnmatch
    return fnmatchcase(name, pat)
  File "/opt/az/lib/python3.13/fnmatch.py", line 71, in fnmatchcase
    return match(name) is not None
           ~~~~~^^^^^^
TypeError: cannot use a string pattern on a bytes-like object
az_command_data_logger: cannot use a string pattern on a bytes-like object
Traceback (most recent call last):
  File "/opt/az/lib/python3.13/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 666, in execute
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 734, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
                   ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 726, in _run_job
    return cmd_copy.exception_handler(ex)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/__init__.py", line 358, in new_handler
    first(ex)
    ~~~~~^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/_exception_handler.py", line 17, in file_related_exception_handler
    raise ex
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 703, in _run_job
    result = cmd_copy(params)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 336, in __call__
    return self.handler(*args, **kwargs)
           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/core/commands/command_operation.py", line 120, in handler
    return op(**command_args)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/operations/blob.py", line 417, in storage_blob_download_batch
    source_blobs = collect_blobs(client, source_container_name, pattern)
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 16, in collect_blobs
    return [name for (name, _) in collect_blob_objects(blob_service, container, pattern)]
                                  ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 52, in collect_blob_objects
    if not pattern or _match_path(blob_name, pattern):
                      ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/opt/az/lib/python3.13/site-packages/azure/cli/command_modules/storage/util.py", line 199, in _match_path
    return fnmatch(path, pattern)
  File "/opt/az/lib/python3.13/fnmatch.py", line 36, in fnmatch
    return fnmatchcase(name, pat)
  File "/opt/az/lib/python3.13/fnmatch.py", line 71, in fnmatchcase
    return match(name) is not None
           ~~~~~^^^^^^
TypeError: cannot use a string pattern on a bytes-like object
To check existing issues, please visit: https://github.com/Azure/azure-cli/issues

Expected behavior

Files to be downloaded correctly like in v2.76

Environment Summary

azure-cli 2.77.0

core 2.77.0
telemetry 1.1.0

Extensions:
account 0.2.5
appservice-kube 0.1.9
azure-devops 1.0.2
bastion 0.3.0
connectedmachine 1.0.0b2
front-door 1.0.16
import-export 0.1.1
managementpartner 0.1.3
providerhub 1.0.0b2
resource-graph 2.1.0
ssh 1.0.0

Dependencies:
msal 1.34.0b1
azure-mgmt-resource 23.3.0

Additional context

Also happens in container version, previous versions have no issue

Metadata

Metadata

Assignees

Labels

Azure CLI TeamThe command of the issue is owned by Azure CLI teamOKR CandidateThis label is used to track how many GitHub issues we have resolved for OKR purpose.Storageaz storagequestionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions