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.
Files changed (201) hide show
  1. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/CHANGELOG.md +13 -0
  2. {azure-storage-blob-12.23.0b1/azure_storage_blob.egg-info → azure_storage_blob-12.23.1}/PKG-INFO +2 -2
  3. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_container_client.py +6 -0
  4. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_container_client_helpers.py +7 -2
  5. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_encryption.py +13 -10
  6. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_azure_blob_storage.py +2 -1
  7. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_serialization.py +2 -0
  8. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/_azure_blob_storage.py +2 -1
  9. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_append_blob_operations.py +1 -7
  10. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_blob_operations.py +21 -47
  11. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_block_blob_operations.py +2 -10
  12. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_container_operations.py +13 -26
  13. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_page_blob_operations.py +3 -14
  14. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_service_operations.py +14 -17
  15. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_append_blob_operations.py +1 -7
  16. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_blob_operations.py +21 -47
  17. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_block_blob_operations.py +2 -10
  18. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_container_operations.py +13 -26
  19. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_page_blob_operations.py +3 -14
  20. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_service_operations.py +14 -17
  21. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/base_client.py +2 -0
  22. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/policies.py +8 -9
  23. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/policies_async.py +18 -5
  24. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_version.py +1 -1
  25. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_container_client_async.py +6 -0
  26. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_download_async.py +94 -71
  27. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1/azure_storage_blob.egg-info}/PKG-INFO +2 -2
  28. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/SOURCES.txt +0 -1
  29. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/setup.py +1 -1
  30. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption.py +2 -2
  31. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption_async.py +2 -2
  32. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_retry_async.py +4 -3
  33. azure-storage-blob-12.23.0b1/azure/storage/blob/_generated/_vendor.py +0 -16
  34. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/LICENSE +0 -0
  35. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/MANIFEST.in +0 -0
  36. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/README.md +0 -0
  37. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/__init__.py +0 -0
  38. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/__init__.py +0 -0
  39. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/__init__.py +0 -0
  40. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_client.py +0 -0
  41. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_client_helpers.py +0 -0
  42. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_service_client.py +0 -0
  43. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_blob_service_client_helpers.py +0 -0
  44. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_deserialize.py +0 -0
  45. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_download.py +0 -0
  46. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/__init__.py +0 -0
  47. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_configuration.py +0 -0
  48. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/_patch.py +0 -0
  49. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/__init__.py +0 -0
  50. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/_configuration.py +0 -0
  51. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/_patch.py +0 -0
  52. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/__init__.py +0 -0
  53. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/aio/operations/_patch.py +0 -0
  54. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/__init__.py +0 -0
  55. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py +0 -0
  56. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/_models_py3.py +0 -0
  57. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/models/_patch.py +0 -0
  58. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/__init__.py +0 -0
  59. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/operations/_patch.py +0 -0
  60. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_generated/py.typed +0 -0
  61. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_lease.py +0 -0
  62. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_list_blobs_helper.py +0 -0
  63. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_models.py +0 -0
  64. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_quick_query_helper.py +0 -0
  65. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_serialize.py +0 -0
  66. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/__init__.py +0 -0
  67. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/authentication.py +0 -0
  68. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/__init__.py +0 -0
  69. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/avro_io.py +0 -0
  70. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/avro_io_async.py +0 -0
  71. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/datafile.py +0 -0
  72. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/datafile_async.py +0 -0
  73. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/avro/schema.py +0 -0
  74. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/base_client_async.py +0 -0
  75. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/constants.py +0 -0
  76. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/models.py +0 -0
  77. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/parser.py +0 -0
  78. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/request_handlers.py +0 -0
  79. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/response_handlers.py +0 -0
  80. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/shared_access_signature.py +0 -0
  81. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/uploads.py +0 -0
  82. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared/uploads_async.py +0 -0
  83. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_shared_access_signature.py +0 -0
  84. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/_upload_helpers.py +0 -0
  85. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/__init__.py +0 -0
  86. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_blob_client_async.py +0 -0
  87. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_blob_service_client_async.py +0 -0
  88. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_encryption_async.py +0 -0
  89. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_lease_async.py +0 -0
  90. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_list_blobs_helper.py +0 -0
  91. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_models.py +0 -0
  92. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/aio/_upload_helpers.py +0 -0
  93. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure/storage/blob/py.typed +0 -0
  94. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/dependency_links.txt +0 -0
  95. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/not-zip-safe +0 -0
  96. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/requires.txt +0 -0
  97. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/azure_storage_blob.egg-info/top_level.txt +0 -0
  98. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/migration_guide.md +0 -0
  99. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/pyproject.toml +0 -0
  100. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/README.md +0 -0
  101. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_authentication.py +0 -0
  102. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_authentication_async.py +0 -0
  103. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_batch_delete_blobs.py +0 -0
  104. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_client_side_encryption.py +0 -0
  105. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_client_side_encryption_keyvault.py +0 -0
  106. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_common.py +0 -0
  107. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_common_async.py +0 -0
  108. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_container_access_policy.py +0 -0
  109. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_container_access_policy_async.py +0 -0
  110. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_containers.py +0 -0
  111. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_containers_async.py +0 -0
  112. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_copy_blob.py +0 -0
  113. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_copy_blob_async.py +0 -0
  114. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_directory_interface.py +0 -0
  115. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_directory_interface_mimetype.py +0 -0
  116. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_enumerate_blobs.py +0 -0
  117. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_enumerate_blobs_async.py +0 -0
  118. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_hello_world.py +0 -0
  119. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_hello_world_async.py +0 -0
  120. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_network_activity_logging.py +0 -0
  121. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_proxy_configuration.py +0 -0
  122. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_query.py +0 -0
  123. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_service.py +0 -0
  124. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_service_async.py +0 -0
  125. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_walk_blob_hierarchy.py +0 -0
  126. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/samples/blob_samples_walk_blob_hierarchy_async.py +0 -0
  127. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/setup.cfg +0 -0
  128. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/avro/__init__.py +0 -0
  129. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/avro/test_avro.py +0 -0
  130. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/avro/test_avro_async.py +0 -0
  131. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/conftest.py +0 -0
  132. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/encryption_test_helper.py +0 -0
  133. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/fake_credentials.py +0 -0
  134. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/__init__.py +0 -0
  135. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/_test_base_legacy.py +0 -0
  136. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/download.py +0 -0
  137. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/list_blobs.py +0 -0
  138. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/upload.py +0 -0
  139. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/upload_block.py +0 -0
  140. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/T1_legacy_tests/upload_from_file.py +0 -0
  141. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/__init__.py +0 -0
  142. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/_test_base.py +0 -0
  143. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/download.py +0 -0
  144. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/key_wrapper.py +0 -0
  145. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/list_blobs.py +0 -0
  146. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/upload.py +0 -0
  147. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/upload_block.py +0 -0
  148. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/perfstress_tests/upload_from_file.py +0 -0
  149. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/settings/__init__.py +0 -0
  150. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/settings/settings_fake.py +0 -0
  151. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/settings/testcase.py +0 -0
  152. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_append_blob.py +0 -0
  153. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_append_blob_async.py +0 -0
  154. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_access_conditions.py +0 -0
  155. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_access_conditions_async.py +0 -0
  156. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_api_version.py +0 -0
  157. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_api_version_async.py +0 -0
  158. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_client.py +0 -0
  159. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_client_async.py +0 -0
  160. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption_v2.py +0 -0
  161. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_encryption_v2_async.py +0 -0
  162. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_retry.py +0 -0
  163. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_retry_async.py +0 -0
  164. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_properties.py +0 -0
  165. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_properties_async.py +0 -0
  166. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_stats.py +0 -0
  167. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_service_stats_async.py +0 -0
  168. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_storage_account.py +0 -0
  169. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_storage_account_async.py +0 -0
  170. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_tags.py +0 -0
  171. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_blob_tags_async.py +0 -0
  172. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob.py +0 -0
  173. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob_async.py +0 -0
  174. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob_sync_copy.py +0 -0
  175. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_block_blob_sync_copy_async.py +0 -0
  176. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_common_blob.py +0 -0
  177. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_common_blob_async.py +0 -0
  178. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_container.py +0 -0
  179. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_container_async.py +0 -0
  180. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk.py +0 -0
  181. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk_async.py +0 -0
  182. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk_n.py +0 -0
  183. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_cpk_n_async.py +0 -0
  184. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_dictmixin.py +0 -0
  185. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_get_blob.py +0 -0
  186. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_get_blob_async.py +0 -0
  187. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_helpers.py +0 -0
  188. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_helpers_async.py +0 -0
  189. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_large_block_blob.py +0 -0
  190. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_large_block_blob_async.py +0 -0
  191. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_largest_block_blob.py +0 -0
  192. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_largest_block_blob_async.py +0 -0
  193. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_logging.py +0 -0
  194. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_logging_async.py +0 -0
  195. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_ors.py +0 -0
  196. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_ors_async.py +0 -0
  197. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_page_blob.py +0 -0
  198. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_page_blob_async.py +0 -0
  199. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_quick_query.py +0 -0
  200. {azure-storage-blob-12.23.0b1 → azure_storage_blob-12.23.1}/tests/test_retry.py +0 -0
  201. {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
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azure-storage-blob
3
- Version: 12.23.0b1
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 :: 4 - Beta
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
@@ -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"/{quote(container_name)}/{quote(str(blob_name), safe='/~')}{query_str}",
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"/{quote(container_name)}/{quote(str(blob_name), safe='/~')}{query_str}",
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)
@@ -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 == _ENCRYPTION_PROTOCOL_V2))
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 == _ENCRYPTION_PROTOCOL_V2:
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 [_ENCRYPTION_PROTOCOL_V1, _ENCRYPTION_PROTOCOL_V2]:
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 == _ENCRYPTION_PROTOCOL_V2:
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 == _ENCRYPTION_PROTOCOL_V2:
666
- version_2_bytes = _ENCRYPTION_PROTOCOL_V2.encode().ljust(8, b'\0')
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 == _ENCRYPTION_PROTOCOL_V2:
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 (_ENCRYPTION_PROTOCOL_V1, _ENCRYPTION_PROTOCOL_V2):
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 == _ENCRYPTION_PROTOCOL_V2:
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) -> "AzureBlobStorage":
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) -> "AzureBlobStorage":
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.pipeline.transport import AsyncHttpResponse
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.pipeline.transport import AsyncHttpResponse
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
- deserialized = response.stream_download(self._client._pipeline)
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
- if response.status_code == 200:
2593
- response_headers["x-ms-client-request-id"] = self._deserialize(
2594
- "str", response.headers.get("x-ms-client-request-id")
2595
- )
2596
- response_headers["x-ms-request-id"] = self._deserialize("str", response.headers.get("x-ms-request-id"))
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
- deserialized = response.stream_download(self._client._pipeline)
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.pipeline.transport import AsyncHttpResponse
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