azure-storage-blob 12.23.0b1__tar.gz → 12.23.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/CHANGELOG.md +13 -0
- {azure-storage-blob-12.23.0b1/azure_storage_blob.egg-info → azure_storage_blob-12.23.1}/PKG-INFO +2 -2
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_container_client.py +6 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_container_client_helpers.py +7 -2
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_encryption.py +13 -10
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_azure_blob_storage.py +2 -1
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_serialization.py +2 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/_azure_blob_storage.py +2 -1
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_append_blob_operations.py +1 -7
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_blob_operations.py +21 -47
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_block_blob_operations.py +2 -10
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_container_operations.py +13 -26
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_page_blob_operations.py +3 -14
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_service_operations.py +14 -17
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_append_blob_operations.py +1 -7
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_blob_operations.py +21 -47
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_block_blob_operations.py +2 -10
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_container_operations.py +13 -26
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_page_blob_operations.py +3 -14
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_service_operations.py +14 -17
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/base_client.py +2 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/policies.py +8 -9
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/policies_async.py +18 -5
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_version.py +1 -1
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_container_client_async.py +6 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_download_async.py +94 -71
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1/azure_storage_blob.egg-info}/PKG-INFO +2 -2
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/SOURCES.txt +0 -1
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/setup.py +1 -1
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption.py +2 -2
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption_async.py +2 -2
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_retry_async.py +4 -3
- azure-storage-blob-12.23.0b1/azure/storage/blob/_generated/_vendor.py +0 -16
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/LICENSE +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/MANIFEST.in +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/README.md +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_client.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_client_helpers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_service_client.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_service_client_helpers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_deserialize.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_download.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_configuration.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_patch.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/_configuration.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/_patch.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_patch.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/_models_py3.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/_patch.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_patch.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/py.typed +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_lease.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_list_blobs_helper.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_models.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_quick_query_helper.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_serialize.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/authentication.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/avro_io.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/avro_io_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/datafile.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/datafile_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/schema.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/base_client_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/constants.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/models.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/parser.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/request_handlers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/response_handlers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/shared_access_signature.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/uploads.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/uploads_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared_access_signature.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_upload_helpers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_blob_client_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_blob_service_client_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_encryption_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_lease_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_list_blobs_helper.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_models.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_upload_helpers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/py.typed +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/dependency_links.txt +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/not-zip-safe +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/requires.txt +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/top_level.txt +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/migration_guide.md +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/pyproject.toml +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/README.md +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_authentication.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_authentication_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_batch_delete_blobs.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_client_side_encryption.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_client_side_encryption_keyvault.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_common.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_common_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_container_access_policy.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_container_access_policy_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_containers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_containers_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_copy_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_copy_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_directory_interface.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_directory_interface_mimetype.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_enumerate_blobs.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_enumerate_blobs_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_hello_world.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_hello_world_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_network_activity_logging.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_proxy_configuration.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_query.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_service.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_service_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_walk_blob_hierarchy.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_walk_blob_hierarchy_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/setup.cfg +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/avro/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/avro/test_avro.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/avro/test_avro_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/conftest.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/encryption_test_helper.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/fake_credentials.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/_test_base_legacy.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/download.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/list_blobs.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/upload.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/upload_block.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/upload_from_file.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/_test_base.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/download.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/key_wrapper.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/list_blobs.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/upload.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/upload_block.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/upload_from_file.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/settings/__init__.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/settings/settings_fake.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/settings/testcase.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_append_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_append_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_access_conditions.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_access_conditions_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_api_version.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_api_version_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_client.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_client_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption_v2.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption_v2_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_retry.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_retry_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_properties.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_properties_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_stats.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_stats_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_storage_account.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_storage_account_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_tags.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_tags_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob_sync_copy.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob_sync_copy_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_common_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_common_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_container.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_container_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk_n.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk_n_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_dictmixin.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_get_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_get_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_helpers.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_helpers_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_large_block_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_large_block_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_largest_block_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_largest_block_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_logging.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_logging_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_ors.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_ors_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_page_blob.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_page_blob_async.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_quick_query.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_retry.py +0 -0
- {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_upload_chunking.py +0 -0
@@ -1,5 +1,18 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
## 12.23.1 (2024-09-25)
|
4
|
+
|
5
|
+
### Features Added
|
6
|
+
- Added support for decryption of Blobs encrypted using client-side encryption version 2.1.
|
7
|
+
|
8
|
+
## 12.23.0 (2024-09-17)
|
9
|
+
|
10
|
+
### Features Added
|
11
|
+
- Stable release of features from 12.23.0b1
|
12
|
+
|
13
|
+
### Bugs Fixed
|
14
|
+
- Fixed an issue with batch APIs when using Azurite.
|
15
|
+
|
3
16
|
## 12.23.0b1 (2024-08-07)
|
4
17
|
|
5
18
|
### Features Added
|
{azure-storage-blob-12.23.0b1/azure_storage_blob.egg-info → azure_storage_blob-12.23.1}/PKG-INFO
RENAMED
@@ -1,13 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: azure-storage-blob
|
3
|
-
Version: 12.23.
|
3
|
+
Version: 12.23.1
|
4
4
|
Summary: Microsoft Azure Blob Storage Client Library for Python
|
5
5
|
Home-page: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/storage/azure-storage-blob
|
6
6
|
Author: Microsoft Corporation
|
7
7
|
Author-email: ascl@microsoft.com
|
8
8
|
License: MIT License
|
9
9
|
Keywords: azure,azure sdk
|
10
|
-
Classifier: Development Status ::
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
11
11
|
Classifier: Programming Language :: Python
|
12
12
|
Classifier: Programming Language :: Python :: 3 :: Only
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
{azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_container_client.py
RENAMED
@@ -1412,6 +1412,8 @@ class ContainerClient(StorageAccountHostsMixin, StorageEncryptionMixin): # py
|
|
1412
1412
|
"""
|
1413
1413
|
if len(blobs) == 0:
|
1414
1414
|
return iter([])
|
1415
|
+
if self._is_localhost:
|
1416
|
+
kwargs['url_prepend'] = self.account_name
|
1415
1417
|
|
1416
1418
|
reqs, options = _generate_delete_blobs_options(
|
1417
1419
|
self._query_str,
|
@@ -1494,6 +1496,8 @@ class ContainerClient(StorageAccountHostsMixin, StorageEncryptionMixin): # py
|
|
1494
1496
|
:return: An iterator of responses, one for each blob in order
|
1495
1497
|
:rtype: Iterator[~azure.core.pipeline.transport.HttpResponse]
|
1496
1498
|
"""
|
1499
|
+
if self._is_localhost:
|
1500
|
+
kwargs['url_prepend'] = self.account_name
|
1497
1501
|
reqs, options = _generate_set_tiers_options(
|
1498
1502
|
self._query_str,
|
1499
1503
|
self.container_name,
|
@@ -1553,6 +1557,8 @@ class ContainerClient(StorageAccountHostsMixin, StorageEncryptionMixin): # py
|
|
1553
1557
|
:return: An iterator of responses, one for each blob in order
|
1554
1558
|
:rtype: Iterator[~azure.core.pipeline.transport.HttpResponse]
|
1555
1559
|
"""
|
1560
|
+
if self._is_localhost:
|
1561
|
+
kwargs['url_prepend'] = self.account_name
|
1556
1562
|
reqs, options = _generate_set_tiers_options(
|
1557
1563
|
self._query_str,
|
1558
1564
|
self.container_name,
|
@@ -120,6 +120,7 @@ def _generate_delete_blobs_options(
|
|
120
120
|
if_modified_since = kwargs.pop('if_modified_since', None)
|
121
121
|
if_unmodified_since = kwargs.pop('if_unmodified_since', None)
|
122
122
|
if_tags_match_condition = kwargs.pop('if_tags_match_condition', None)
|
123
|
+
url_prepend = kwargs.pop('url_prepend', None)
|
123
124
|
kwargs.update({'raise_on_any_failure': raise_on_any_failure,
|
124
125
|
'sas': query_str.replace('?', '&'),
|
125
126
|
'timeout': '&timeout=' + str(timeout) if timeout else "",
|
@@ -157,9 +158,11 @@ def _generate_delete_blobs_options(
|
|
157
158
|
|
158
159
|
req = HttpRequest(
|
159
160
|
"DELETE",
|
160
|
-
f"
|
161
|
+
(f"{'/' + quote(url_prepend) if url_prepend else ''}/"
|
162
|
+
f"{quote(container_name)}/{quote(str(blob_name), safe='/~')}{query_str}"),
|
161
163
|
headers=header_parameters
|
162
164
|
)
|
165
|
+
|
163
166
|
req.format_parameters(query_parameters)
|
164
167
|
reqs.append(req)
|
165
168
|
|
@@ -223,6 +226,7 @@ def _generate_set_tiers_options(
|
|
223
226
|
raise_on_any_failure = kwargs.pop('raise_on_any_failure', True)
|
224
227
|
rehydrate_priority = kwargs.pop('rehydrate_priority', None)
|
225
228
|
if_tags = kwargs.pop('if_tags_match_condition', None)
|
229
|
+
url_prepend = kwargs.pop('url_prepend', None)
|
226
230
|
kwargs.update({'raise_on_any_failure': raise_on_any_failure,
|
227
231
|
'sas': query_str.replace('?', '&'),
|
228
232
|
'timeout': '&timeout=' + str(timeout) if timeout else "",
|
@@ -252,7 +256,8 @@ def _generate_set_tiers_options(
|
|
252
256
|
|
253
257
|
req = HttpRequest(
|
254
258
|
"PUT",
|
255
|
-
f"
|
259
|
+
(f"{'/' + quote(url_prepend) if url_prepend else ''}/"
|
260
|
+
f"{quote(container_name)}/{quote(str(blob_name), safe='/~')}{query_str}"),
|
256
261
|
headers=header_parameters
|
257
262
|
)
|
258
263
|
req.format_parameters(query_parameters)
|
{azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_encryption.py
RENAMED
@@ -40,6 +40,9 @@ if TYPE_CHECKING:
|
|
40
40
|
|
41
41
|
_ENCRYPTION_PROTOCOL_V1 = '1.0'
|
42
42
|
_ENCRYPTION_PROTOCOL_V2 = '2.0'
|
43
|
+
_ENCRYPTION_PROTOCOL_V2_1 = '2.1'
|
44
|
+
_VALID_ENCRYPTION_PROTOCOLS = [_ENCRYPTION_PROTOCOL_V1, _ENCRYPTION_PROTOCOL_V2, _ENCRYPTION_PROTOCOL_V2_1]
|
45
|
+
_ENCRYPTION_V2_PROTOCOLS = [_ENCRYPTION_PROTOCOL_V2, _ENCRYPTION_PROTOCOL_V2_1]
|
43
46
|
_GCM_REGION_DATA_LENGTH = 4 * 1024 * 1024
|
44
47
|
_GCM_NONCE_LENGTH = 12
|
45
48
|
_GCM_TAG_LENGTH = 16
|
@@ -293,14 +296,14 @@ def encrypt_data_v2(data: bytes, nonce: int, key: bytes) -> bytes:
|
|
293
296
|
|
294
297
|
def is_encryption_v2(encryption_data: Optional[_EncryptionData]) -> bool:
|
295
298
|
"""
|
296
|
-
Determine whether the given encryption data signifies version 2.0.
|
299
|
+
Determine whether the given encryption data signifies version 2.0 or 2.1.
|
297
300
|
|
298
301
|
:param Optional[_EncryptionData] encryption_data: The encryption data. Will return False if this is None.
|
299
302
|
:return: True, if the encryption data indicates encryption V2, false otherwise.
|
300
303
|
:rtype: bool
|
301
304
|
"""
|
302
305
|
# If encryption_data is None, assume no encryption
|
303
|
-
return bool(encryption_data and (encryption_data.encryption_agent.protocol
|
306
|
+
return bool(encryption_data and (encryption_data.encryption_agent.protocol in _ENCRYPTION_V2_PROTOCOLS))
|
304
307
|
|
305
308
|
|
306
309
|
def modify_user_agent_for_encryption(
|
@@ -405,7 +408,7 @@ def get_adjusted_download_range_and_offset(
|
|
405
408
|
end_offset = 15 - (end % 16)
|
406
409
|
end += end_offset
|
407
410
|
|
408
|
-
elif encryption_data.encryption_agent.protocol
|
411
|
+
elif encryption_data.encryption_agent.protocol in _ENCRYPTION_V2_PROTOCOLS:
|
409
412
|
start_offset, end_offset = 0, end
|
410
413
|
|
411
414
|
if encryption_data.encrypted_region_info is None:
|
@@ -550,7 +553,7 @@ def _dict_to_encryption_data(encryption_data_dict: Dict[str, Any]) -> _Encryptio
|
|
550
553
|
"""
|
551
554
|
try:
|
552
555
|
protocol = encryption_data_dict['EncryptionAgent']['Protocol']
|
553
|
-
if protocol not in
|
556
|
+
if protocol not in _VALID_ENCRYPTION_PROTOCOLS:
|
554
557
|
raise ValueError("Unsupported encryption version.")
|
555
558
|
except KeyError as exc:
|
556
559
|
raise ValueError("Unsupported encryption version.") from exc
|
@@ -636,7 +639,7 @@ def _validate_and_unwrap_cek(
|
|
636
639
|
# Validate we have the right info for the specified version
|
637
640
|
if encryption_data.encryption_agent.protocol == _ENCRYPTION_PROTOCOL_V1:
|
638
641
|
_validate_not_none('content_encryption_IV', encryption_data.content_encryption_IV)
|
639
|
-
elif encryption_data.encryption_agent.protocol
|
642
|
+
elif encryption_data.encryption_agent.protocol in _ENCRYPTION_V2_PROTOCOLS:
|
640
643
|
_validate_not_none('encrypted_region_info', encryption_data.encrypted_region_info)
|
641
644
|
else:
|
642
645
|
raise ValueError('Specified encryption version is not supported.')
|
@@ -662,8 +665,8 @@ def _validate_and_unwrap_cek(
|
|
662
665
|
|
663
666
|
# For V2, the version is included with the cek. We need to validate it
|
664
667
|
# and remove it from the actual cek.
|
665
|
-
if encryption_data.encryption_agent.protocol
|
666
|
-
version_2_bytes =
|
668
|
+
if encryption_data.encryption_agent.protocol in _ENCRYPTION_V2_PROTOCOLS:
|
669
|
+
version_2_bytes = encryption_data.encryption_agent.protocol.encode().ljust(8, b'\0')
|
667
670
|
cek_version_bytes = content_encryption_key[:len(version_2_bytes)]
|
668
671
|
if cek_version_bytes != version_2_bytes:
|
669
672
|
raise ValueError('The encryption metadata is not valid and may have been modified.')
|
@@ -722,7 +725,7 @@ def _decrypt_message(
|
|
722
725
|
unpadder = PKCS7(128).unpadder()
|
723
726
|
decrypted_data = (unpadder.update(decrypted_data) + unpadder.finalize())
|
724
727
|
|
725
|
-
elif encryption_data.encryption_agent.protocol
|
728
|
+
elif encryption_data.encryption_agent.protocol in _ENCRYPTION_V2_PROTOCOLS:
|
726
729
|
block_info = encryption_data.encrypted_region_info
|
727
730
|
if not block_info or not block_info.nonce_length:
|
728
731
|
raise ValueError("Missing required metadata for decryption.")
|
@@ -894,7 +897,7 @@ def decrypt_blob( # pylint: disable=too-many-locals,too-many-statements
|
|
894
897
|
raise ValueError('Specified encryption algorithm is not supported.')
|
895
898
|
|
896
899
|
version = encryption_data.encryption_agent.protocol
|
897
|
-
if version not in
|
900
|
+
if version not in _VALID_ENCRYPTION_PROTOCOLS:
|
898
901
|
raise ValueError('Specified encryption version is not supported.')
|
899
902
|
|
900
903
|
content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, key_resolver)
|
@@ -945,7 +948,7 @@ def decrypt_blob( # pylint: disable=too-many-locals,too-many-statements
|
|
945
948
|
|
946
949
|
return content[start_offset: len(content) - end_offset]
|
947
950
|
|
948
|
-
if version
|
951
|
+
if version in _ENCRYPTION_V2_PROTOCOLS:
|
949
952
|
# We assume the content contains only full encryption regions
|
950
953
|
total_size = len(content)
|
951
954
|
offset = 0
|
@@ -8,6 +8,7 @@
|
|
8
8
|
|
9
9
|
from copy import deepcopy
|
10
10
|
from typing import Any
|
11
|
+
from typing_extensions import Self
|
11
12
|
|
12
13
|
from azure.core import PipelineClient
|
13
14
|
from azure.core.pipeline import policies
|
@@ -110,7 +111,7 @@ class AzureBlobStorage: # pylint: disable=client-accepts-api-version-keyword
|
|
110
111
|
def close(self) -> None:
|
111
112
|
self._client.close()
|
112
113
|
|
113
|
-
def __enter__(self) ->
|
114
|
+
def __enter__(self) -> Self:
|
114
115
|
self._client.__enter__()
|
115
116
|
return self
|
116
117
|
|
@@ -144,6 +144,8 @@ class RawDeserializer:
|
|
144
144
|
# context otherwise.
|
145
145
|
_LOGGER.critical("Wasn't XML not JSON, failing")
|
146
146
|
raise DeserializationError("XML is invalid") from err
|
147
|
+
elif content_type.startswith("text/"):
|
148
|
+
return data_as_str
|
147
149
|
raise DeserializationError("Cannot deserialize content-type: {}".format(content_type))
|
148
150
|
|
149
151
|
@classmethod
|
@@ -8,6 +8,7 @@
|
|
8
8
|
|
9
9
|
from copy import deepcopy
|
10
10
|
from typing import Any, Awaitable
|
11
|
+
from typing_extensions import Self
|
11
12
|
|
12
13
|
from azure.core import AsyncPipelineClient
|
13
14
|
from azure.core.pipeline import policies
|
@@ -112,7 +113,7 @@ class AzureBlobStorage: # pylint: disable=client-accepts-api-version-keyword
|
|
112
113
|
async def close(self) -> None:
|
113
114
|
await self._client.close()
|
114
115
|
|
115
|
-
async def __aenter__(self) ->
|
116
|
+
async def __aenter__(self) -> Self:
|
116
117
|
await self._client.__aenter__()
|
117
118
|
return self
|
118
119
|
|
@@ -19,13 +19,11 @@ from azure.core.exceptions import (
|
|
19
19
|
map_error,
|
20
20
|
)
|
21
21
|
from azure.core.pipeline import PipelineResponse
|
22
|
-
from azure.core.
|
23
|
-
from azure.core.rest import HttpRequest
|
22
|
+
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
24
23
|
from azure.core.tracing.decorator_async import distributed_trace_async
|
25
24
|
from azure.core.utils import case_insensitive_dict
|
26
25
|
|
27
26
|
from ... import models as _models
|
28
|
-
from ..._vendor import _convert_request
|
29
27
|
from ...operations._append_blob_operations import (
|
30
28
|
build_append_block_from_url_request,
|
31
29
|
build_append_block_request,
|
@@ -207,7 +205,6 @@ class AppendBlobOperations:
|
|
207
205
|
headers=_headers,
|
208
206
|
params=_params,
|
209
207
|
)
|
210
|
-
_request = _convert_request(_request)
|
211
208
|
_request.url = self._client.format_url(_request.url)
|
212
209
|
|
213
210
|
_stream = False
|
@@ -372,7 +369,6 @@ class AppendBlobOperations:
|
|
372
369
|
headers=_headers,
|
373
370
|
params=_params,
|
374
371
|
)
|
375
|
-
_request = _convert_request(_request)
|
376
372
|
_request.url = self._client.format_url(_request.url)
|
377
373
|
|
378
374
|
_stream = False
|
@@ -574,7 +570,6 @@ class AppendBlobOperations:
|
|
574
570
|
headers=_headers,
|
575
571
|
params=_params,
|
576
572
|
)
|
577
|
-
_request = _convert_request(_request)
|
578
573
|
_request.url = self._client.format_url(_request.url)
|
579
574
|
|
580
575
|
_stream = False
|
@@ -696,7 +691,6 @@ class AppendBlobOperations:
|
|
696
691
|
headers=_headers,
|
697
692
|
params=_params,
|
698
693
|
)
|
699
|
-
_request = _convert_request(_request)
|
700
694
|
_request.url = self._client.format_url(_request.url)
|
701
695
|
|
702
696
|
_stream = False
|
@@ -16,16 +16,16 @@ from azure.core.exceptions import (
|
|
16
16
|
ResourceExistsError,
|
17
17
|
ResourceNotFoundError,
|
18
18
|
ResourceNotModifiedError,
|
19
|
+
StreamClosedError,
|
20
|
+
StreamConsumedError,
|
19
21
|
map_error,
|
20
22
|
)
|
21
23
|
from azure.core.pipeline import PipelineResponse
|
22
|
-
from azure.core.
|
23
|
-
from azure.core.rest import HttpRequest
|
24
|
+
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
24
25
|
from azure.core.tracing.decorator_async import distributed_trace_async
|
25
26
|
from azure.core.utils import case_insensitive_dict
|
26
27
|
|
27
28
|
from ... import models as _models
|
28
|
-
from ..._vendor import _convert_request
|
29
29
|
from ...operations._blob_operations import (
|
30
30
|
build_abort_copy_from_url_request,
|
31
31
|
build_acquire_lease_request,
|
@@ -194,9 +194,9 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
194
194
|
headers=_headers,
|
195
195
|
params=_params,
|
196
196
|
)
|
197
|
-
_request = _convert_request(_request)
|
198
197
|
_request.url = self._client.format_url(_request.url)
|
199
198
|
|
199
|
+
_decompress = kwargs.pop("decompress", True)
|
200
200
|
_stream = True
|
201
201
|
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
|
202
202
|
_request, stream=_stream, **kwargs
|
@@ -205,6 +205,10 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
205
205
|
response = pipeline_response.http_response
|
206
206
|
|
207
207
|
if response.status_code not in [200, 206]:
|
208
|
+
try:
|
209
|
+
await response.read() # Load the body in memory and close the socket
|
210
|
+
except (StreamConsumedError, StreamClosedError):
|
211
|
+
pass
|
208
212
|
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
209
213
|
error = self._deserialize.failsafe_deserialize(_models.StorageError, pipeline_response)
|
210
214
|
raise HttpResponseError(response=response, model=error)
|
@@ -289,8 +293,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
289
293
|
)
|
290
294
|
response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold"))
|
291
295
|
|
292
|
-
deserialized = response.stream_download(self._client._pipeline)
|
293
|
-
|
294
296
|
if response.status_code == 206:
|
295
297
|
response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified"))
|
296
298
|
response_headers["x-ms-creation-time"] = self._deserialize(
|
@@ -373,7 +375,7 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
373
375
|
)
|
374
376
|
response_headers["x-ms-legal-hold"] = self._deserialize("bool", response.headers.get("x-ms-legal-hold"))
|
375
377
|
|
376
|
-
|
378
|
+
deserialized = response.stream_download(self._client._pipeline, decompress=_decompress)
|
377
379
|
|
378
380
|
if cls:
|
379
381
|
return cls(pipeline_response, deserialized, response_headers) # type: ignore
|
@@ -478,7 +480,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
478
480
|
headers=_headers,
|
479
481
|
params=_params,
|
480
482
|
)
|
481
|
-
_request = _convert_request(_request)
|
482
483
|
_request.url = self._client.format_url(_request.url)
|
483
484
|
|
484
485
|
_stream = False
|
@@ -691,7 +692,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
691
692
|
headers=_headers,
|
692
693
|
params=_params,
|
693
694
|
)
|
694
|
-
_request = _convert_request(_request)
|
695
695
|
_request.url = self._client.format_url(_request.url)
|
696
696
|
|
697
697
|
_stream = False
|
@@ -759,7 +759,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
759
759
|
headers=_headers,
|
760
760
|
params=_params,
|
761
761
|
)
|
762
|
-
_request = _convert_request(_request)
|
763
762
|
_request.url = self._client.format_url(_request.url)
|
764
763
|
|
765
764
|
_stream = False
|
@@ -839,7 +838,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
839
838
|
headers=_headers,
|
840
839
|
params=_params,
|
841
840
|
)
|
842
|
-
_request = _convert_request(_request)
|
843
841
|
_request.url = self._client.format_url(_request.url)
|
844
842
|
|
845
843
|
_stream = False
|
@@ -961,7 +959,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
961
959
|
headers=_headers,
|
962
960
|
params=_params,
|
963
961
|
)
|
964
|
-
_request = _convert_request(_request)
|
965
962
|
_request.url = self._client.format_url(_request.url)
|
966
963
|
|
967
964
|
_stream = False
|
@@ -1055,7 +1052,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1055
1052
|
headers=_headers,
|
1056
1053
|
params=_params,
|
1057
1054
|
)
|
1058
|
-
_request = _convert_request(_request)
|
1059
1055
|
_request.url = self._client.format_url(_request.url)
|
1060
1056
|
|
1061
1057
|
_stream = False
|
@@ -1129,7 +1125,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1129
1125
|
headers=_headers,
|
1130
1126
|
params=_params,
|
1131
1127
|
)
|
1132
|
-
_request = _convert_request(_request)
|
1133
1128
|
_request.url = self._client.format_url(_request.url)
|
1134
1129
|
|
1135
1130
|
_stream = False
|
@@ -1200,7 +1195,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1200
1195
|
headers=_headers,
|
1201
1196
|
params=_params,
|
1202
1197
|
)
|
1203
|
-
_request = _convert_request(_request)
|
1204
1198
|
_request.url = self._client.format_url(_request.url)
|
1205
1199
|
|
1206
1200
|
_stream = False
|
@@ -1330,7 +1324,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1330
1324
|
headers=_headers,
|
1331
1325
|
params=_params,
|
1332
1326
|
)
|
1333
|
-
_request = _convert_request(_request)
|
1334
1327
|
_request.url = self._client.format_url(_request.url)
|
1335
1328
|
|
1336
1329
|
_stream = False
|
@@ -1448,7 +1441,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1448
1441
|
headers=_headers,
|
1449
1442
|
params=_params,
|
1450
1443
|
)
|
1451
|
-
_request = _convert_request(_request)
|
1452
1444
|
_request.url = self._client.format_url(_request.url)
|
1453
1445
|
|
1454
1446
|
_stream = False
|
@@ -1549,7 +1541,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1549
1541
|
headers=_headers,
|
1550
1542
|
params=_params,
|
1551
1543
|
)
|
1552
|
-
_request = _convert_request(_request)
|
1553
1544
|
_request.url = self._client.format_url(_request.url)
|
1554
1545
|
|
1555
1546
|
_stream = False
|
@@ -1649,7 +1640,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1649
1640
|
headers=_headers,
|
1650
1641
|
params=_params,
|
1651
1642
|
)
|
1652
|
-
_request = _convert_request(_request)
|
1653
1643
|
_request.url = self._client.format_url(_request.url)
|
1654
1644
|
|
1655
1645
|
_stream = False
|
@@ -1756,7 +1746,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1756
1746
|
headers=_headers,
|
1757
1747
|
params=_params,
|
1758
1748
|
)
|
1759
|
-
_request = _convert_request(_request)
|
1760
1749
|
_request.url = self._client.format_url(_request.url)
|
1761
1750
|
|
1762
1751
|
_stream = False
|
@@ -1863,7 +1852,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1863
1852
|
headers=_headers,
|
1864
1853
|
params=_params,
|
1865
1854
|
)
|
1866
|
-
_request = _convert_request(_request)
|
1867
1855
|
_request.url = self._client.format_url(_request.url)
|
1868
1856
|
|
1869
1857
|
_stream = False
|
@@ -1994,7 +1982,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
1994
1982
|
headers=_headers,
|
1995
1983
|
params=_params,
|
1996
1984
|
)
|
1997
|
-
_request = _convert_request(_request)
|
1998
1985
|
_request.url = self._client.format_url(_request.url)
|
1999
1986
|
|
2000
1987
|
_stream = False
|
@@ -2169,7 +2156,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2169
2156
|
headers=_headers,
|
2170
2157
|
params=_params,
|
2171
2158
|
)
|
2172
|
-
_request = _convert_request(_request)
|
2173
2159
|
_request.url = self._client.format_url(_request.url)
|
2174
2160
|
|
2175
2161
|
_stream = False
|
@@ -2357,7 +2343,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2357
2343
|
headers=_headers,
|
2358
2344
|
params=_params,
|
2359
2345
|
)
|
2360
|
-
_request = _convert_request(_request)
|
2361
2346
|
_request.url = self._client.format_url(_request.url)
|
2362
2347
|
|
2363
2348
|
_stream = False
|
@@ -2458,7 +2443,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2458
2443
|
headers=_headers,
|
2459
2444
|
params=_params,
|
2460
2445
|
)
|
2461
|
-
_request = _convert_request(_request)
|
2462
2446
|
_request.url = self._client.format_url(_request.url)
|
2463
2447
|
|
2464
2448
|
_stream = False
|
@@ -2573,7 +2557,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2573
2557
|
headers=_headers,
|
2574
2558
|
params=_params,
|
2575
2559
|
)
|
2576
|
-
_request = _convert_request(_request)
|
2577
2560
|
_request.url = self._client.format_url(_request.url)
|
2578
2561
|
|
2579
2562
|
_stream = False
|
@@ -2589,19 +2572,11 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2589
2572
|
raise HttpResponseError(response=response, model=error)
|
2590
2573
|
|
2591
2574
|
response_headers = {}
|
2592
|
-
|
2593
|
-
|
2594
|
-
|
2595
|
-
|
2596
|
-
|
2597
|
-
response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version"))
|
2598
|
-
|
2599
|
-
if response.status_code == 202:
|
2600
|
-
response_headers["x-ms-client-request-id"] = self._deserialize(
|
2601
|
-
"str", response.headers.get("x-ms-client-request-id")
|
2602
|
-
)
|
2603
|
-
response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id"))
|
2604
|
-
response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version"))
|
2575
|
+
response_headers["x-ms-client-request-id"] = self._deserialize(
|
2576
|
+
"str", response.headers.get("x-ms-client-request-id")
|
2577
|
+
)
|
2578
|
+
response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id"))
|
2579
|
+
response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version"))
|
2605
2580
|
|
2606
2581
|
if cls:
|
2607
2582
|
return cls(pipeline_response, None, response_headers) # type: ignore
|
@@ -2650,7 +2625,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2650
2625
|
headers=_headers,
|
2651
2626
|
params=_params,
|
2652
2627
|
)
|
2653
|
-
_request = _convert_request(_request)
|
2654
2628
|
_request.url = self._client.format_url(_request.url)
|
2655
2629
|
|
2656
2630
|
_stream = False
|
@@ -2783,9 +2757,9 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2783
2757
|
headers=_headers,
|
2784
2758
|
params=_params,
|
2785
2759
|
)
|
2786
|
-
_request = _convert_request(_request)
|
2787
2760
|
_request.url = self._client.format_url(_request.url)
|
2788
2761
|
|
2762
|
+
_decompress = kwargs.pop("decompress", True)
|
2789
2763
|
_stream = True
|
2790
2764
|
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
|
2791
2765
|
_request, stream=_stream, **kwargs
|
@@ -2794,6 +2768,10 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2794
2768
|
response = pipeline_response.http_response
|
2795
2769
|
|
2796
2770
|
if response.status_code not in [200, 206]:
|
2771
|
+
try:
|
2772
|
+
await response.read() # Load the body in memory and close the socket
|
2773
|
+
except (StreamConsumedError, StreamClosedError):
|
2774
|
+
pass
|
2797
2775
|
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
2798
2776
|
error = self._deserialize.failsafe_deserialize(_models.StorageError, pipeline_response)
|
2799
2777
|
raise HttpResponseError(response=response, model=error)
|
@@ -2857,8 +2835,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2857
2835
|
"bytearray", response.headers.get("x-ms-blob-content-md5")
|
2858
2836
|
)
|
2859
2837
|
|
2860
|
-
deserialized = response.stream_download(self._client._pipeline)
|
2861
|
-
|
2862
2838
|
if response.status_code == 206:
|
2863
2839
|
response_headers["Last-Modified"] = self._deserialize("rfc-1123", response.headers.get("Last-Modified"))
|
2864
2840
|
response_headers["x-ms-meta"] = self._deserialize("{str}", response.headers.get("x-ms-meta"))
|
@@ -2920,7 +2896,7 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
2920
2896
|
"bytearray", response.headers.get("x-ms-blob-content-md5")
|
2921
2897
|
)
|
2922
2898
|
|
2923
|
-
|
2899
|
+
deserialized = response.stream_download(self._client._pipeline, decompress=_decompress)
|
2924
2900
|
|
2925
2901
|
if cls:
|
2926
2902
|
return cls(pipeline_response, deserialized, response_headers) # type: ignore
|
@@ -3001,7 +2977,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
3001
2977
|
headers=_headers,
|
3002
2978
|
params=_params,
|
3003
2979
|
)
|
3004
|
-
_request = _convert_request(_request)
|
3005
2980
|
_request.url = self._client.format_url(_request.url)
|
3006
2981
|
|
3007
2982
|
_stream = False
|
@@ -3024,7 +2999,7 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
3024
2999
|
response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version"))
|
3025
3000
|
response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date"))
|
3026
3001
|
|
3027
|
-
deserialized = self._deserialize("BlobTags", pipeline_response)
|
3002
|
+
deserialized = self._deserialize("BlobTags", pipeline_response.http_response)
|
3028
3003
|
|
3029
3004
|
if cls:
|
3030
3005
|
return cls(pipeline_response, deserialized, response_headers) # type: ignore
|
@@ -3117,7 +3092,6 @@ class BlobOperations: # pylint: disable=too-many-public-methods
|
|
3117
3092
|
headers=_headers,
|
3118
3093
|
params=_params,
|
3119
3094
|
)
|
3120
|
-
_request = _convert_request(_request)
|
3121
3095
|
_request.url = self._client.format_url(_request.url)
|
3122
3096
|
|
3123
3097
|
_stream = False
|
@@ -19,13 +19,11 @@ from azure.core.exceptions import (
|
|
19
19
|
map_error,
|
20
20
|
)
|
21
21
|
from azure.core.pipeline import PipelineResponse
|
22
|
-
from azure.core.
|
23
|
-
from azure.core.rest import HttpRequest
|
22
|
+
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
24
23
|
from azure.core.tracing.decorator_async import distributed_trace_async
|
25
24
|
from azure.core.utils import case_insensitive_dict
|
26
25
|
|
27
26
|
from ... import models as _models
|
28
|
-
from ..._vendor import _convert_request
|
29
27
|
from ...operations._block_blob_operations import (
|
30
28
|
build_commit_block_list_request,
|
31
29
|
build_get_block_list_request,
|
@@ -236,7 +234,6 @@ class BlockBlobOperations:
|
|
236
234
|
headers=_headers,
|
237
235
|
params=_params,
|
238
236
|
)
|
239
|
-
_request = _convert_request(_request)
|
240
237
|
_request.url = self._client.format_url(_request.url)
|
241
238
|
|
242
239
|
_stream = False
|
@@ -471,7 +468,6 @@ class BlockBlobOperations:
|
|
471
468
|
headers=_headers,
|
472
469
|
params=_params,
|
473
470
|
)
|
474
|
-
_request = _convert_request(_request)
|
475
471
|
_request.url = self._client.format_url(_request.url)
|
476
472
|
|
477
473
|
_stream = False
|
@@ -610,7 +606,6 @@ class BlockBlobOperations:
|
|
610
606
|
headers=_headers,
|
611
607
|
params=_params,
|
612
608
|
)
|
613
|
-
_request = _convert_request(_request)
|
614
609
|
_request.url = self._client.format_url(_request.url)
|
615
610
|
|
616
611
|
_stream = False
|
@@ -773,7 +768,6 @@ class BlockBlobOperations:
|
|
773
768
|
headers=_headers,
|
774
769
|
params=_params,
|
775
770
|
)
|
776
|
-
_request = _convert_request(_request)
|
777
771
|
_request.url = self._client.format_url(_request.url)
|
778
772
|
|
779
773
|
_stream = False
|
@@ -984,7 +978,6 @@ class BlockBlobOperations:
|
|
984
978
|
headers=_headers,
|
985
979
|
params=_params,
|
986
980
|
)
|
987
|
-
_request = _convert_request(_request)
|
988
981
|
_request.url = self._client.format_url(_request.url)
|
989
982
|
|
990
983
|
_stream = False
|
@@ -1101,7 +1094,6 @@ class BlockBlobOperations:
|
|
1101
1094
|
headers=_headers,
|
1102
1095
|
params=_params,
|
1103
1096
|
)
|
1104
|
-
_request = _convert_request(_request)
|
1105
1097
|
_request.url = self._client.format_url(_request.url)
|
1106
1098
|
|
1107
1099
|
_stream = False
|
@@ -1130,7 +1122,7 @@ class BlockBlobOperations:
|
|
1130
1122
|
response_headers["x-ms-version"] = self._deserialize("str", response.headers.get("x-ms-version"))
|
1131
1123
|
response_headers["Date"] = self._deserialize("rfc-1123", response.headers.get("Date"))
|
1132
1124
|
|
1133
|
-
deserialized = self._deserialize("BlockList", pipeline_response)
|
1125
|
+
deserialized = self._deserialize("BlockList", pipeline_response.http_response)
|
1134
1126
|
|
1135
1127
|
if cls:
|
1136
1128
|
return cls(pipeline_response, deserialized, response_headers) # type: ignore
|