azure-storage-blob 12.23.1__tar.gz → 12.24.0b1__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 (200) hide show
  1. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/CHANGELOG.md +7 -0
  2. {azure_storage_blob-12.23.1/azure_storage_blob.egg-info → azure_storage_blob-12.24.0b1}/PKG-INFO +10 -10
  3. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/README.md +8 -8
  4. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_blob_client.py +28 -7
  5. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_blob_client_helpers.py +7 -3
  6. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_blob_service_client.py +1 -1
  7. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_container_client.py +2 -2
  8. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_container_client_helpers.py +4 -4
  9. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_deserialize.py +2 -2
  10. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_encryption.py +2 -0
  11. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/_azure_blob_storage.py +1 -1
  12. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/_configuration.py +2 -2
  13. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/_serialization.py +265 -150
  14. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/_azure_blob_storage.py +1 -1
  15. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/_configuration.py +2 -2
  16. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_append_blob_operations.py +22 -4
  17. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_blob_operations.py +116 -26
  18. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_block_blob_operations.py +40 -6
  19. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_container_operations.py +36 -18
  20. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_page_blob_operations.py +32 -9
  21. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_service_operations.py +16 -8
  22. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/models/_azure_blob_storage_enums.py +1 -0
  23. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_append_blob_operations.py +34 -8
  24. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_blob_operations.py +166 -51
  25. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_block_blob_operations.py +62 -12
  26. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_container_operations.py +54 -36
  27. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_page_blob_operations.py +49 -18
  28. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_service_operations.py +24 -16
  29. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_list_blobs_helper.py +1 -1
  30. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_models.py +4 -3
  31. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_serialize.py +1 -0
  32. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/avro/schema.py +1 -0
  33. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/base_client.py +8 -8
  34. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/base_client_async.py +5 -5
  35. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/models.py +5 -2
  36. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/policies.py +6 -7
  37. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/policies_async.py +1 -1
  38. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/uploads.py +4 -4
  39. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/uploads_async.py +4 -4
  40. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared_access_signature.py +0 -1
  41. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_version.py +1 -1
  42. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_blob_client_async.py +30 -10
  43. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_blob_service_client_async.py +7 -3
  44. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_container_client_async.py +4 -4
  45. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_lease_async.py +1 -1
  46. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_list_blobs_helper.py +1 -2
  47. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_models.py +1 -2
  48. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1/azure_storage_blob.egg-info}/PKG-INFO +10 -10
  49. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/setup.py +1 -1
  50. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/encryption_test_helper.py +3 -0
  51. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_encryption.py +1 -2
  52. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_encryption_async.py +1 -2
  53. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_block_blob.py +32 -0
  54. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_block_blob_async.py +32 -0
  55. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_common_blob.py +103 -0
  56. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_common_blob_async.py +105 -0
  57. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/LICENSE +0 -0
  58. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/MANIFEST.in +0 -0
  59. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/__init__.py +0 -0
  60. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/__init__.py +0 -0
  61. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/__init__.py +0 -0
  62. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_blob_service_client_helpers.py +0 -0
  63. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_download.py +0 -0
  64. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/__init__.py +0 -0
  65. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/_patch.py +0 -0
  66. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/__init__.py +0 -0
  67. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/_patch.py +0 -0
  68. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/__init__.py +0 -0
  69. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/aio/operations/_patch.py +0 -0
  70. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/models/__init__.py +0 -0
  71. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/models/_models_py3.py +0 -0
  72. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/models/_patch.py +0 -0
  73. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/__init__.py +0 -0
  74. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/operations/_patch.py +0 -0
  75. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_generated/py.typed +0 -0
  76. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_lease.py +0 -0
  77. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_quick_query_helper.py +0 -0
  78. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/__init__.py +0 -0
  79. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/authentication.py +0 -0
  80. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/avro/__init__.py +0 -0
  81. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/avro/avro_io.py +0 -0
  82. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/avro/avro_io_async.py +0 -0
  83. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/avro/datafile.py +0 -0
  84. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/avro/datafile_async.py +0 -0
  85. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/constants.py +0 -0
  86. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/parser.py +0 -0
  87. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/request_handlers.py +0 -0
  88. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/response_handlers.py +0 -0
  89. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_shared/shared_access_signature.py +0 -0
  90. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/_upload_helpers.py +0 -0
  91. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/__init__.py +0 -0
  92. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_download_async.py +0 -0
  93. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_encryption_async.py +0 -0
  94. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/aio/_upload_helpers.py +0 -0
  95. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure/storage/blob/py.typed +0 -0
  96. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure_storage_blob.egg-info/SOURCES.txt +0 -0
  97. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure_storage_blob.egg-info/dependency_links.txt +0 -0
  98. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure_storage_blob.egg-info/not-zip-safe +0 -0
  99. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure_storage_blob.egg-info/requires.txt +0 -0
  100. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/azure_storage_blob.egg-info/top_level.txt +0 -0
  101. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/migration_guide.md +0 -0
  102. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/pyproject.toml +0 -0
  103. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/README.md +0 -0
  104. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_authentication.py +0 -0
  105. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_authentication_async.py +0 -0
  106. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_batch_delete_blobs.py +0 -0
  107. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_client_side_encryption.py +0 -0
  108. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_client_side_encryption_keyvault.py +0 -0
  109. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_common.py +0 -0
  110. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_common_async.py +0 -0
  111. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_container_access_policy.py +0 -0
  112. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_container_access_policy_async.py +0 -0
  113. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_containers.py +0 -0
  114. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_containers_async.py +0 -0
  115. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_copy_blob.py +0 -0
  116. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_copy_blob_async.py +0 -0
  117. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_directory_interface.py +0 -0
  118. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_directory_interface_mimetype.py +0 -0
  119. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_enumerate_blobs.py +0 -0
  120. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_enumerate_blobs_async.py +0 -0
  121. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_hello_world.py +0 -0
  122. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_hello_world_async.py +0 -0
  123. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_network_activity_logging.py +0 -0
  124. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_proxy_configuration.py +0 -0
  125. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_query.py +0 -0
  126. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_service.py +0 -0
  127. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_service_async.py +0 -0
  128. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_walk_blob_hierarchy.py +0 -0
  129. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/samples/blob_samples_walk_blob_hierarchy_async.py +0 -0
  130. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/setup.cfg +0 -0
  131. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/avro/__init__.py +0 -0
  132. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/avro/test_avro.py +0 -0
  133. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/avro/test_avro_async.py +0 -0
  134. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/conftest.py +0 -0
  135. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/fake_credentials.py +0 -0
  136. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/__init__.py +0 -0
  137. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/_test_base_legacy.py +0 -0
  138. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/download.py +0 -0
  139. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/list_blobs.py +0 -0
  140. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/upload.py +0 -0
  141. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/upload_block.py +0 -0
  142. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/T1_legacy_tests/upload_from_file.py +0 -0
  143. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/__init__.py +0 -0
  144. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/_test_base.py +0 -0
  145. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/download.py +0 -0
  146. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/key_wrapper.py +0 -0
  147. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/list_blobs.py +0 -0
  148. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/upload.py +0 -0
  149. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/upload_block.py +0 -0
  150. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/perfstress_tests/upload_from_file.py +0 -0
  151. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/settings/__init__.py +0 -0
  152. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/settings/settings_fake.py +0 -0
  153. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/settings/testcase.py +0 -0
  154. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_append_blob.py +0 -0
  155. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_append_blob_async.py +0 -0
  156. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_access_conditions.py +0 -0
  157. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_access_conditions_async.py +0 -0
  158. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_api_version.py +0 -0
  159. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_api_version_async.py +0 -0
  160. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_client.py +0 -0
  161. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_client_async.py +0 -0
  162. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_encryption_v2.py +0 -0
  163. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_encryption_v2_async.py +0 -0
  164. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_retry.py +0 -0
  165. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_retry_async.py +0 -0
  166. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_service_properties.py +0 -0
  167. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_service_properties_async.py +0 -0
  168. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_service_stats.py +0 -0
  169. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_service_stats_async.py +0 -0
  170. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_storage_account.py +0 -0
  171. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_storage_account_async.py +0 -0
  172. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_tags.py +0 -0
  173. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_blob_tags_async.py +0 -0
  174. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_block_blob_sync_copy.py +0 -0
  175. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_block_blob_sync_copy_async.py +0 -0
  176. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_container.py +0 -0
  177. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_container_async.py +0 -0
  178. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_cpk.py +0 -0
  179. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_cpk_async.py +0 -0
  180. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_cpk_n.py +0 -0
  181. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_cpk_n_async.py +0 -0
  182. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_dictmixin.py +0 -0
  183. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_get_blob.py +0 -0
  184. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_get_blob_async.py +0 -0
  185. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_helpers.py +0 -0
  186. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_helpers_async.py +0 -0
  187. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_large_block_blob.py +0 -0
  188. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_large_block_blob_async.py +0 -0
  189. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_largest_block_blob.py +0 -0
  190. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_largest_block_blob_async.py +0 -0
  191. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_logging.py +0 -0
  192. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_logging_async.py +0 -0
  193. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_ors.py +0 -0
  194. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_ors_async.py +0 -0
  195. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_page_blob.py +0 -0
  196. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_page_blob_async.py +0 -0
  197. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_quick_query.py +0 -0
  198. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_retry.py +0 -0
  199. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_retry_async.py +0 -0
  200. {azure_storage_blob-12.23.1 → azure_storage_blob-12.24.0b1}/tests/test_upload_chunking.py +0 -0
@@ -1,5 +1,12 @@
1
1
  # Release History
2
2
 
3
+ ## 12.24.0b1 (2024-10-10)
4
+
5
+ ### Features Added
6
+ - Added support for service version 2025-01-05.
7
+ - Added support for passing metadata to `upload_blob_from_url` via the new `metadata` keyword.
8
+ - Added support for `set_immutability_policy`, `delete_immutability_policy` and `set_legal_hold` for Blob snapshots and versions.
9
+
3
10
  ## 12.23.1 (2024-09-25)
4
11
 
5
12
  ### Features Added
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azure-storage-blob
3
- Version: 12.23.1
3
+ Version: 12.24.0b1
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 :: 5 - Production/Stable
10
+ Classifier: Development Status :: 4 - Beta
11
11
  Classifier: Programming Language :: Python
12
12
  Classifier: Programming Language :: Python :: 3 :: Only
13
13
  Classifier: Programming Language :: Python :: 3
@@ -116,14 +116,14 @@ The `credential` parameter may be provided in a number of different forms, depen
116
116
 
117
117
  Use the returned token credential to authenticate the client:
118
118
  ```python
119
- from azure.identity import DefaultAzureCredential
120
- from azure.storage.blob import BlobServiceClient
121
- token_credential = DefaultAzureCredential()
122
-
123
- blob_service_client = BlobServiceClient(
124
- account_url="https://<my_account_name>.blob.core.windows.net",
125
- credential=token_credential
126
- )
119
+ from azure.identity import DefaultAzureCredential
120
+ from azure.storage.blob import BlobServiceClient
121
+ token_credential = DefaultAzureCredential()
122
+
123
+ blob_service_client = BlobServiceClient(
124
+ account_url="https://<my_account_name>.blob.core.windows.net",
125
+ credential=token_credential
126
+ )
127
127
  ```
128
128
 
129
129
  2. To use a [shared access signature (SAS) token](https://docs.microsoft.com/azure/storage/common/storage-sas-overview),
@@ -87,14 +87,14 @@ The `credential` parameter may be provided in a number of different forms, depen
87
87
 
88
88
  Use the returned token credential to authenticate the client:
89
89
  ```python
90
- from azure.identity import DefaultAzureCredential
91
- from azure.storage.blob import BlobServiceClient
92
- token_credential = DefaultAzureCredential()
93
-
94
- blob_service_client = BlobServiceClient(
95
- account_url="https://<my_account_name>.blob.core.windows.net",
96
- credential=token_credential
97
- )
90
+ from azure.identity import DefaultAzureCredential
91
+ from azure.storage.blob import BlobServiceClient
92
+ token_credential = DefaultAzureCredential()
93
+
94
+ blob_service_client = BlobServiceClient(
95
+ account_url="https://<my_account_name>.blob.core.windows.net",
96
+ credential=token_credential
97
+ )
98
98
  ```
99
99
 
100
100
  2. To use a [shared access signature (SAS) token](https://docs.microsoft.com/azure/storage/common/storage-sas-overview),
@@ -187,7 +187,7 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
187
187
  self._query_str, credential = self._format_query_string(sas_token, credential, snapshot=self.snapshot)
188
188
  super(BlobClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
189
189
  self._client = AzureBlobStorage(self.url, base_url=self.url, pipeline=self._pipeline)
190
- self._client._config.version = get_api_version(kwargs) # type: ignore [assignment] # pylint: disable=protected-access
190
+ self._client._config.version = get_api_version(kwargs) # type: ignore [assignment]
191
191
  self._configure_encryption(kwargs)
192
192
 
193
193
  def _format_url(self, hostname: str) -> str:
@@ -320,7 +320,12 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
320
320
  process_storage_error(error)
321
321
 
322
322
  @distributed_trace
323
- def upload_blob_from_url(self, source_url: str, **kwargs: Any) -> Dict[str, Any]:
323
+ def upload_blob_from_url(
324
+ self, source_url: str,
325
+ *,
326
+ metadata: Optional[Dict[str, str]] = None,
327
+ **kwargs: Any
328
+ ) -> Dict[str, Any]:
324
329
  """
325
330
  Creates a new Block Blob where the content of the blob is read from a given URL.
326
331
  The content of an existing blob is overwritten with the new blob.
@@ -337,6 +342,8 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
337
342
  https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
338
343
 
339
344
  https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken
345
+ :keyword dict(str, str) metadata:
346
+ Name-value pairs associated with the blob as metadata.
340
347
  :keyword bool overwrite: Whether the blob to be uploaded should overwrite the current data.
341
348
  If True, upload_blob will overwrite the existing data. If set to False, the
342
349
  operation will fail with ResourceExistsError.
@@ -422,6 +429,7 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
422
429
  raise ValueError("Customer provided encryption key must be used over HTTPS.")
423
430
  options = _upload_blob_from_url_options(
424
431
  source_url=source_url,
432
+ metadata=metadata,
425
433
  **kwargs)
426
434
  try:
427
435
  return cast(Dict[str, Any], self._client.block_blob.put_blob_from_url(**options))
@@ -1220,6 +1228,9 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
1220
1228
  .. versionadded:: 12.10.0
1221
1229
  This was introduced in API version '2020-10-02'.
1222
1230
 
1231
+ :keyword str version_id:
1232
+ The version id parameter is an opaque DateTime
1233
+ value that, when present, specifies the version of the blob to check if it exists.
1223
1234
  :keyword int timeout:
1224
1235
  Sets the server-side timeout for the operation in seconds. For more details see
1225
1236
  https://learn.microsoft.com/rest/api/storageservices/setting-timeouts-for-blob-service-operations.
@@ -1230,9 +1241,11 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
1230
1241
  :rtype: Dict[str, str]
1231
1242
  """
1232
1243
 
1244
+ version_id = get_version_id(self.version_id, kwargs)
1233
1245
  kwargs['immutability_policy_expiry'] = immutability_policy.expiry_time
1234
1246
  kwargs['immutability_policy_mode'] = immutability_policy.policy_mode
1235
- return cast(Dict[str, str], self._client.blob.set_immutability_policy(cls=return_response_headers, **kwargs))
1247
+ return cast(Dict[str, str], self._client.blob.set_immutability_policy(
1248
+ cls=return_response_headers, version_id=version_id, **kwargs))
1236
1249
 
1237
1250
  @distributed_trace
1238
1251
  def delete_immutability_policy(self, **kwargs: Any) -> None:
@@ -1241,6 +1254,9 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
1241
1254
  .. versionadded:: 12.10.0
1242
1255
  This operation was introduced in API version '2020-10-02'.
1243
1256
 
1257
+ :keyword str version_id:
1258
+ The version id parameter is an opaque DateTime
1259
+ value that, when present, specifies the version of the blob to check if it exists.
1244
1260
  :keyword int timeout:
1245
1261
  Sets the server-side timeout for the operation in seconds. For more details see
1246
1262
  https://learn.microsoft.com/rest/api/storageservices/setting-timeouts-for-blob-service-operations.
@@ -1251,7 +1267,8 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
1251
1267
  :rtype: Dict[str, str]
1252
1268
  """
1253
1269
 
1254
- self._client.blob.delete_immutability_policy(**kwargs)
1270
+ version_id = get_version_id(self.version_id, kwargs)
1271
+ self._client.blob.delete_immutability_policy(version_id=version_id, **kwargs)
1255
1272
 
1256
1273
  @distributed_trace
1257
1274
  def set_legal_hold(self, legal_hold: bool, **kwargs: Any) -> Dict[str, Union[str, datetime, bool]]:
@@ -1262,6 +1279,9 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
1262
1279
 
1263
1280
  :param bool legal_hold:
1264
1281
  Specified if a legal hold should be set on the blob.
1282
+ :keyword str version_id:
1283
+ The version id parameter is an opaque DateTime
1284
+ value that, when present, specifies the version of the blob to check if it exists.
1265
1285
  :keyword int timeout:
1266
1286
  Sets the server-side timeout for the operation in seconds. For more details see
1267
1287
  https://learn.microsoft.com/rest/api/storageservices/setting-timeouts-for-blob-service-operations.
@@ -1272,8 +1292,9 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
1272
1292
  :rtype: Dict[str, Union[str, datetime, bool]]
1273
1293
  """
1274
1294
 
1275
- return cast(Dict[str, Union[str, datetime, bool]],
1276
- self._client.blob.set_legal_hold(legal_hold, cls=return_response_headers, **kwargs))
1295
+ version_id = get_version_id(self.version_id, kwargs)
1296
+ return cast(Dict[str, Union[str, datetime, bool]], self._client.blob.set_legal_hold(
1297
+ legal_hold, version_id=version_id, cls=return_response_headers, **kwargs))
1277
1298
 
1278
1299
  @distributed_trace
1279
1300
  def create_page_blob(
@@ -3281,7 +3302,7 @@ class BlobClient(StorageAccountHostsMixin, StorageEncryptionMixin): # pylint: d
3281
3302
  policies=self._pipeline._impl_policies # pylint: disable = protected-access
3282
3303
  )
3283
3304
  else:
3284
- _pipeline = self._pipeline # pylint: disable = protected-access
3305
+ _pipeline = self._pipeline
3285
3306
  return ContainerClient(
3286
3307
  f"{self.scheme}://{self.primary_hostname}", container_name=self.container_name,
3287
3308
  credential=self._raw_credential, api_version=self.api_version, _configuration=self._config,
@@ -188,7 +188,10 @@ def _upload_blob_options( # pylint:disable=too-many-statements
188
188
  raise ValueError(f"Unsupported BlobType: {blob_type}")
189
189
  return kwargs
190
190
 
191
- def _upload_blob_from_url_options(source_url: str, **kwargs: Any ) -> Dict[str, Any]:
191
+ def _upload_blob_from_url_options(source_url: str, **kwargs: Any) -> Dict[str, Any]:
192
+ metadata = kwargs.pop('metadata', None)
193
+ headers = kwargs.pop('headers', {})
194
+ headers.update(add_metadata_headers(metadata))
192
195
  source_url = _encode_source_url(source_url=source_url)
193
196
  tier = kwargs.pop('standard_blob_tier', None)
194
197
  overwrite = kwargs.pop('overwrite', False)
@@ -222,10 +225,11 @@ def _upload_blob_from_url_options(source_url: str, **kwargs: Any ) -> Dict[str,
222
225
  'tier': tier.value if tier else None,
223
226
  'source_modified_access_conditions': get_source_conditions(kwargs),
224
227
  'cpk_info': cpk_info,
225
- 'cpk_scope_info': get_cpk_scope_info(kwargs)
228
+ 'cpk_scope_info': get_cpk_scope_info(kwargs),
229
+ 'headers': headers,
226
230
  }
227
231
  options.update(kwargs)
228
- if not overwrite and not _any_conditions(**options): # pylint: disable=protected-access
232
+ if not overwrite and not _any_conditions(**options):
229
233
  options['modified_access_conditions'].if_none_match = '*'
230
234
  return options
231
235
 
@@ -128,7 +128,7 @@ class BlobServiceClient(StorageAccountHostsMixin, StorageEncryptionMixin):
128
128
  self._query_str, credential = self._format_query_string(sas_token, credential)
129
129
  super(BlobServiceClient, self).__init__(parsed_url, service='blob', credential=credential, **kwargs)
130
130
  self._client = AzureBlobStorage(self.url, base_url=self.url, pipeline=self._pipeline)
131
- self._client._config.version = get_api_version(kwargs) # type: ignore [assignment] # pylint: disable=protected-access
131
+ self._client._config.version = get_api_version(kwargs) # type: ignore [assignment]
132
132
  self._configure_encryption(kwargs)
133
133
 
134
134
  def _format_url(self, hostname):
@@ -624,7 +624,7 @@ class ContainerClient(StorageAccountHostsMixin, StorageEncryptionMixin): # py
624
624
  process_storage_error(error)
625
625
 
626
626
  @distributed_trace
627
- def _get_blob_service_client(self) -> "BlobServiceClient": # pylint: disable=client-method-missing-kwargs
627
+ def _get_blob_service_client(self) -> "BlobServiceClient":
628
628
  """Get a client to interact with the container's parent service account.
629
629
 
630
630
  Defaults to current container's credentials.
@@ -648,7 +648,7 @@ class ContainerClient(StorageAccountHostsMixin, StorageEncryptionMixin): # py
648
648
  policies=self._pipeline._impl_policies # pylint: disable = protected-access
649
649
  )
650
650
  else:
651
- _pipeline = self._pipeline # pylint: disable = protected-access
651
+ _pipeline = self._pipeline
652
652
  return BlobServiceClient(
653
653
  f"{self.scheme}://{self.primary_hostname}",
654
654
  credential=self._raw_credential, api_version=self.api_version, _configuration=self._config,
@@ -132,7 +132,7 @@ def _generate_delete_blobs_options(
132
132
  for blob in blobs:
133
133
  if not isinstance(blob, str):
134
134
  blob_name = blob.get('name')
135
- options = _generic_delete_blob_options( # pylint: disable=protected-access
135
+ options = _generic_delete_blob_options(
136
136
  snapshot=blob.get('snapshot'),
137
137
  version_id=blob.get('version_id'),
138
138
  delete_snapshots=delete_snapshots or blob.get('delete_snapshots'),
@@ -147,7 +147,7 @@ def _generate_delete_blobs_options(
147
147
  )
148
148
  else:
149
149
  blob_name = blob
150
- options = _generic_delete_blob_options( # pylint: disable=protected-access
150
+ options = _generic_delete_blob_options(
151
151
  delete_snapshots=delete_snapshots,
152
152
  if_modified_since=if_modified_since,
153
153
  if_unmodified_since=if_unmodified_since,
@@ -199,11 +199,11 @@ def _generate_set_tiers_subrequest_options(
199
199
  query_parameters['versionid'] = client._serialize.query("version_id", version_id, 'str') # pylint: disable=protected-access
200
200
  if timeout is not None:
201
201
  query_parameters['timeout'] = client._serialize.query("timeout", timeout, 'int', minimum=0) # pylint: disable=protected-access
202
- query_parameters['comp'] = client._serialize.query("comp", comp, 'str') # pylint: disable=protected-access, specify-parameter-names-in-call
202
+ query_parameters['comp'] = client._serialize.query("comp", comp, 'str') # pylint: disable=protected-access
203
203
 
204
204
  # Construct headers
205
205
  header_parameters = {}
206
- header_parameters['x-ms-access-tier'] = client._serialize.header("tier", tier, 'str') # pylint: disable=protected-access, specify-parameter-names-in-call
206
+ header_parameters['x-ms-access-tier'] = client._serialize.header("tier", tier, 'str') # pylint: disable=protected-access
207
207
  if rehydrate_priority is not None:
208
208
  header_parameters['x-ms-rehydrate-priority'] = client._serialize.header( # pylint: disable=protected-access
209
209
  "rehydrate_priority", rehydrate_priority, 'str')
@@ -142,7 +142,7 @@ def service_properties_deserialize(generated: "StorageServiceProperties") -> Dic
142
142
  'hour_metrics': Metrics._from_generated(generated.hour_metrics), # pylint: disable=protected-access
143
143
  'minute_metrics': Metrics._from_generated(generated.minute_metrics), # pylint: disable=protected-access
144
144
  'cors': cors_list,
145
- 'target_version': generated.default_service_version, # pylint: disable=protected-access
145
+ 'target_version': generated.default_service_version,
146
146
  'delete_retention_policy': RetentionPolicy._from_generated(generated.delete_retention_policy), # pylint: disable=protected-access
147
147
  'static_website': StaticWebsite._from_generated(generated.static_website), # pylint: disable=protected-access
148
148
  }
@@ -181,7 +181,7 @@ def get_blob_properties_from_generated_code(generated: "BlobItemInternal") -> Bl
181
181
  blob.version_id = generated.version_id
182
182
  blob.is_current_version = generated.is_current_version
183
183
  blob.tag_count = generated.properties.tag_count
184
- blob.tags = parse_tags(generated.blob_tags) # pylint: disable=protected-access
184
+ blob.tags = parse_tags(generated.blob_tags)
185
185
  blob.object_replication_source_properties = deserialize_ors_policies(generated.object_replication_metadata)
186
186
  blob.last_accessed_on = generated.properties.last_accessed_on
187
187
  blob.immutability_policy = ImmutabilityPolicy._from_generated(generated) # pylint: disable=protected-access
@@ -508,6 +508,8 @@ def _generate_encryption_data_dict(
508
508
  # We must pad the version to 8 bytes for AES Keywrap algorithms
509
509
  to_wrap = _ENCRYPTION_PROTOCOL_V2.encode().ljust(8, b'\0') + cek
510
510
  wrapped_cek = kek.wrap_key(to_wrap)
511
+ else:
512
+ raise ValueError("Invalid encryption version specified.")
511
513
 
512
514
  # Build the encryption_data dict.
513
515
  # Use OrderedDict to comply with Java's ordering requirement.
@@ -48,7 +48,7 @@ class AzureBlobStorage: # pylint: disable=client-accepts-api-version-keyword
48
48
  :param base_url: Service URL. Required. Default value is "".
49
49
  :type base_url: str
50
50
  :keyword version: Specifies the version of the operation to use for this request. Default value
51
- is "2024-08-04". Note that overriding this default value may result in unsupported behavior.
51
+ is "2025-01-05". Note that overriding this default value may result in unsupported behavior.
52
52
  :paramtype version: str
53
53
  """
54
54
 
@@ -23,12 +23,12 @@ class AzureBlobStorageConfiguration: # pylint: disable=too-many-instance-attrib
23
23
  desired operation. Required.
24
24
  :type url: str
25
25
  :keyword version: Specifies the version of the operation to use for this request. Default value
26
- is "2024-08-04". Note that overriding this default value may result in unsupported behavior.
26
+ is "2025-01-05". Note that overriding this default value may result in unsupported behavior.
27
27
  :paramtype version: str
28
28
  """
29
29
 
30
30
  def __init__(self, url: str, **kwargs: Any) -> None:
31
- version: Literal["2024-08-04"] = kwargs.pop("version", "2024-08-04")
31
+ version: Literal["2025-01-05"] = kwargs.pop("version", "2025-01-05")
32
32
 
33
33
  if url is None:
34
34
  raise ValueError("Parameter 'url' must not be None.")