diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py
index 226626d026e1..91205c8f3fdb 100644
--- a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py
+++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client.py
@@ -26,6 +26,7 @@
import six
from azure.core import Configuration
+from azure.core.exceptions import HttpResponseError
from azure.core.pipeline import Pipeline
from azure.core.pipeline.transport import RequestsTransport
from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy
@@ -46,6 +47,8 @@
QueueMessagePolicy,
ExponentialRetry,
)
+from .._generated.models import StorageErrorException
+from .response_handlers import process_storage_error
_LOGGER = logging.getLogger(__name__)
@@ -147,11 +150,11 @@ def _format_query_string(self, sas_token, credential, snapshot=None, share_snaps
def _create_pipeline(self, credential, **kwargs):
# type: (Any, **Any) -> Tuple[Configuration, Pipeline]
- credential_policy = None
+ self._credential_policy = None
if hasattr(credential, "get_token"):
- credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
+ self._credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
elif isinstance(credential, SharedKeyCredentialPolicy):
- credential_policy = credential
+ self._credential_policy = credential
elif credential is not None:
raise TypeError("Unsupported credential: {}".format(credential))
@@ -169,7 +172,7 @@ def _create_pipeline(self, credential, **kwargs):
config.user_agent_policy,
StorageContentValidation(),
StorageRequestHook(**kwargs),
- credential_policy,
+ self._credential_policy,
ContentDecodePolicy(),
RedirectPolicy(**kwargs),
StorageHosts(hosts=self._hosts, **kwargs),
@@ -180,6 +183,39 @@ def _create_pipeline(self, credential, **kwargs):
]
return config, Pipeline(config.transport, policies=policies)
+ def _batch_send(
+ self, *reqs, # type: HttpRequest
+ **kwargs
+ ):
+ """Given a series of request, do a Storage batch call.
+ """
+ request = self._client._client.post( # pylint: disable=protected-access
+ url='https://{}/?comp=batch'.format(self.primary_hostname),
+ headers={
+ 'x-ms-version': self._client._config.version # pylint: disable=protected-access
+ }
+ )
+
+ request.set_multipart_mixed(
+ *reqs,
+ policies=[
+ StorageHeadersPolicy(),
+ self._credential_policy
+ ]
+ )
+
+ pipeline_response = self._pipeline.run(
+ request, **kwargs
+ )
+ response = pipeline_response.http_response
+
+ try:
+ if response.status_code not in [202]:
+ raise HttpResponseError(response=response)
+ return response.parts()
+ except StorageErrorException as error:
+ process_storage_error(error)
+
def format_shared_key_credential(account, credential):
if isinstance(credential, six.string_types):
diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client_async.py
index d2f21e4f30fe..e76fad464878 100644
--- a/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client_async.py
+++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_shared/base_client_async.py
@@ -11,7 +11,7 @@
import logging
from azure.core.pipeline import AsyncPipeline
-
+from azure.core.exceptions import HttpResponseError
from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy
from azure.core.pipeline.policies import (
ContentDecodePolicy,
@@ -25,11 +25,16 @@
StorageContentValidation,
StorageRequestHook,
StorageHosts,
+ StorageHeadersPolicy,
QueueMessagePolicy)
from .policies_async import AsyncStorageResponseHook
+from .._generated.models import StorageErrorException
+from .response_handlers import process_storage_error
+
if TYPE_CHECKING:
from azure.core.pipeline import Pipeline
+ from azure.core.pipeline.transport import HttpRequest
from azure.core import Configuration
_LOGGER = logging.getLogger(__name__)
@@ -51,11 +56,11 @@ async def __aexit__(self, *args):
def _create_pipeline(self, credential, **kwargs):
# type: (Any, **Any) -> Tuple[Configuration, Pipeline]
- credential_policy = None
+ self._credential_policy = None
if hasattr(credential, 'get_token'):
- credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
+ self._credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
elif isinstance(credential, SharedKeyCredentialPolicy):
- credential_policy = credential
+ self._credential_policy = credential
elif credential is not None:
raise TypeError("Unsupported credential: {}".format(credential))
config = kwargs.get('_configuration') or create_configuration(**kwargs)
@@ -76,7 +81,7 @@ def _create_pipeline(self, credential, **kwargs):
config.user_agent_policy,
StorageContentValidation(),
StorageRequestHook(**kwargs),
- credential_policy,
+ self._credential_policy,
ContentDecodePolicy(),
AsyncRedirectPolicy(**kwargs),
StorageHosts(hosts=self._hosts, **kwargs), # type: ignore
@@ -86,3 +91,36 @@ def _create_pipeline(self, credential, **kwargs):
DistributedTracingPolicy(),
]
return config, AsyncPipeline(config.transport, policies=policies)
+
+ async def _batch_send(
+ self, *reqs: 'HttpRequest',
+ **kwargs
+ ):
+ """Given a series of request, do a Storage batch call.
+ """
+ request = self._client._client.post( # pylint: disable=protected-access
+ url='https://{}/?comp=batch'.format(self.primary_hostname),
+ headers={
+ 'x-ms-version': self._client._config.version # pylint: disable=protected-access
+ }
+ )
+
+ request.set_multipart_mixed(
+ *reqs,
+ policies=[
+ StorageHeadersPolicy(),
+ self._credential_policy
+ ]
+ )
+
+ pipeline_response = await self._pipeline.run(
+ request, **kwargs
+ )
+ response = pipeline_response.http_response
+
+ try:
+ if response.status_code not in [202]:
+ raise HttpResponseError(response=response)
+ return response.parts() # Return an AsyncIterator
+ except StorageErrorException as error:
+ process_storage_error(error)
diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py
index 1deb4111ea5e..b4611d3a29d6 100644
--- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py
+++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/container_client_async.py
@@ -1,3 +1,4 @@
+# pylint: disable=too-many-lines
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
@@ -6,13 +7,14 @@
import functools
from typing import ( # pylint: disable=unused-import
- Union, Optional, Any, Iterable, AnyStr, Dict, List, Tuple, IO,
+ Union, Optional, Any, Iterable, AnyStr, Dict, List, Tuple, IO, AsyncIterator,
TYPE_CHECKING
)
from azure.core.tracing.decorator import distributed_trace
from azure.core.tracing.decorator_async import distributed_trace_async
from azure.core.async_paging import AsyncItemPaged
+from azure.core.pipeline.transport import HttpRequest, AsyncHttpResponse
from .._shared.base_client_async import AsyncStorageAccountHostsMixin
from .._shared.policies_async import ExponentialRetry
@@ -42,6 +44,7 @@
from ..models import ( # pylint: disable=unused-import
AccessPolicy,
ContentSettings,
+ StandardBlobTier,
PremiumPageBlobTier)
@@ -775,6 +778,200 @@ async def delete_blob(
timeout=timeout,
**kwargs)
+ @distributed_trace_async
+ async def delete_blobs( # pylint: disable=arguments-differ
+ self, *blobs, # type: Union[str, BlobProperties]
+ delete_snapshots=None, # type: Optional[str]
+ lease=None, # type: Optional[Union[str, LeaseClient]]
+ timeout=None, # type: Optional[int]
+ **kwargs
+ ):
+ # type: (...) -> None
+ """Marks the specified blobs or snapshots for deletion.
+
+ The blob is later deleted during garbage collection.
+ Note that in order to delete a blob, you must delete all of its
+ snapshots. You can delete both at the same time with the Delete
+ Blob operation.
+
+ If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot
+ and retains the blob or snapshot for specified number of days.
+ After specified number of days, blob's data is removed from the service during garbage collection.
+ Soft deleted blob or snapshot is accessible through List Blobs API specifying `include="deleted"` option.
+ Soft-deleted blob or snapshot can be restored using Undelete API.
+
+ :param blob: The blob with which to interact. If specified, this value will override
+ a blob value specified in the blob URL.
+ :type blob: str or ~azure.storage.blob.models.BlobProperties
+ :param str delete_snapshots:
+ Required if the blob has associated snapshots. Values include:
+ - "only": Deletes only the blobs snapshots.
+ - "include": Deletes the blob along with all snapshots.
+ :param lease:
+ Required if the blob has an active lease. Value can be a Lease object
+ or the lease ID as a string.
+ :type lease: ~azure.storage.blob.lease.LeaseClient or str
+ :param str delete_snapshots:
+ Required if the blob has associated snapshots. Values include:
+ - "only": Deletes only the blobs snapshots.
+ - "include": Deletes the blob along with all snapshots.
+ :param datetime if_modified_since:
+ A DateTime value. Azure expects the date value passed in to be UTC.
+ If timezone is included, any non-UTC datetimes will be converted to UTC.
+ If a date is passed in without timezone info, it is assumed to be UTC.
+ Specify this header to perform the operation only
+ if the resource has been modified since the specified time.
+ :param datetime if_unmodified_since:
+ A DateTime value. Azure expects the date value passed in to be UTC.
+ If timezone is included, any non-UTC datetimes will be converted to UTC.
+ If a date is passed in without timezone info, it is assumed to be UTC.
+ Specify this header to perform the operation only if
+ the resource has not been modified since the specified date/time.
+ :param str if_match:
+ An ETag value, or the wildcard character (*). Specify this header to perform
+ the operation only if the resource's ETag matches the value specified.
+ :param str if_none_match:
+ An ETag value, or the wildcard character (*). Specify this header
+ to perform the operation only if the resource's ETag does not match
+ the value specified. Specify the wildcard character (*) to perform
+ the operation only if the resource does not exist, and fail the
+ operation if it does exist.
+ :param int timeout:
+ The timeout parameter is expressed in seconds.
+ :rtype: None
+ """
+ options = BlobClient._generic_delete_blob_options( # pylint: disable=protected-access
+ delete_snapshots=delete_snapshots,
+ lease=lease,
+ timeout=timeout,
+ **kwargs
+ )
+ query_parameters, header_parameters = self._generate_delete_blobs_options(**options)
+ # To pass kwargs to "_batch_send", we need to remove anything that was
+ # in the Autorest signature for Autorest, otherwise transport will be upset
+ for possible_param in ['timeout', 'delete_snapshots', 'lease_access_conditions', 'modified_access_conditions']:
+ options.pop(possible_param, None)
+
+ reqs = []
+ for blob in blobs:
+ req = HttpRequest(
+ "DELETE",
+ "/{}/{}".format(self.container_name, blob),
+ headers=header_parameters
+ )
+ req.format_parameters(query_parameters)
+ reqs.append(req)
+
+ return await self._batch_send(*reqs, **options)
+
+ @distributed_trace
+ async def set_standard_blob_tier_blobs(
+ self,
+ standard_blob_tier: Union[str, 'StandardBlobTier'],
+ *blobs: Union[str, BlobProperties],
+ **kwargs
+ ) -> AsyncIterator[AsyncHttpResponse]:
+ """This operation sets the tier on block blobs.
+
+ A block blob's tier determines Hot/Cool/Archive storage type.
+ This operation does not update the blob's ETag.
+
+ :param blobs: The blobs with which to interact.
+ :type blobs: str or ~azure.storage.blob.models.BlobProperties
+ :param standard_blob_tier:
+ Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
+ 'Archive'. The hot tier is optimized for storing data that is accessed
+ frequently. The cool storage tier is optimized for storing data that
+ is infrequently accessed and stored for at least a month. The archive
+ tier is optimized for storing data that is rarely accessed and stored
+ for at least six months with flexible latency requirements.
+ :type standard_blob_tier: str or ~azure.storage.blob.models.StandardBlobTier
+ :param int timeout:
+ The timeout parameter is expressed in seconds.
+ :param lease:
+ Required if the blob has an active lease. Value can be a LeaseClient object
+ or the lease ID as a string.
+ :type lease: ~azure.storage.blob.lease.LeaseClient or str
+ :rtype: None
+ """
+ access_conditions = get_access_conditions(kwargs.pop('lease', None))
+ if standard_blob_tier is None:
+ raise ValueError("A StandardBlobTier must be specified")
+
+ query_parameters, header_parameters = self._generate_set_tier_options(
+ tier=standard_blob_tier,
+ lease_access_conditions=access_conditions,
+ **kwargs
+ )
+ # To pass kwargs to "_batch_send", we need to remove anything that was
+ # in the Autorest signature for Autorest, otherwise transport will be upset
+ for possible_param in ['timeout', 'lease']:
+ kwargs.pop(possible_param, None)
+
+ reqs = []
+ for blob in blobs:
+ req = HttpRequest(
+ "PUT",
+ "/{}/{}".format(self.container_name, blob),
+ headers=header_parameters
+ )
+ req.format_parameters(query_parameters)
+ reqs.append(req)
+
+ return await self._batch_send(*reqs, **kwargs)
+
+ @distributed_trace
+ async def set_premium_page_blob_tier_blobs(
+ self,
+ premium_page_blob_tier: Union[str, 'PremiumPageBlobTier'],
+ *blobs: Union[str, BlobProperties],
+ **kwargs
+ ) -> AsyncIterator[AsyncHttpResponse]:
+ """Sets the page blob tiers on the blobs. This API is only supported for page blobs on premium accounts.
+
+ :param blobs: The blobs with which to interact.
+ :type blobs: str or ~azure.storage.blob.models.BlobProperties
+ :param premium_page_blob_tier:
+ A page blob tier value to set the blob to. The tier correlates to the size of the
+ blob and number of allowed IOPS. This is only applicable to page blobs on
+ premium storage accounts.
+ :type premium_page_blob_tier: ~azure.storage.blob.models.PremiumPageBlobTier
+ :param int timeout:
+ The timeout parameter is expressed in seconds. This method may make
+ multiple calls to the Azure service and the timeout will apply to
+ each call individually.
+ :param lease:
+ Required if the blob has an active lease. Value can be a LeaseClient object
+ or the lease ID as a string.
+ :type lease: ~azure.storage.blob.lease.LeaseClient or str
+ :rtype: None
+ """
+ access_conditions = get_access_conditions(kwargs.pop('lease', None))
+ if premium_page_blob_tier is None:
+ raise ValueError("A PremiumPageBlobTier must be specified")
+
+ query_parameters, header_parameters = self._generate_set_tier_options(
+ tier=premium_page_blob_tier,
+ lease_access_conditions=access_conditions,
+ **kwargs
+ )
+ # To pass kwargs to "_batch_send", we need to remove anything that was
+ # in the Autorest signature for Autorest, otherwise transport will be upset
+ for possible_param in ['timeout', 'lease']:
+ kwargs.pop(possible_param, None)
+
+ reqs = []
+ for blob in blobs:
+ req = HttpRequest(
+ "PUT",
+ "/{}/{}".format(self.container_name, blob),
+ headers=header_parameters
+ )
+ req.format_parameters(query_parameters)
+ reqs.append(req)
+
+ return await self._batch_send(*reqs, **kwargs)
+
def get_blob_client(
self, blob, # type: Union[str, BlobProperties]
snapshot=None # type: str
diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py
index 7f4f7fef0d38..bedf49a3be52 100644
--- a/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py
+++ b/sdk/storage/azure-storage-blob/azure/storage/blob/blob_client.py
@@ -673,7 +673,8 @@ def download_blob(self, offset=None, length=None, validate_content=False, **kwar
}
return StorageStreamDownloader(extra_properties=extra_properties, **options)
- def _delete_blob_options(self, delete_snapshots=False, **kwargs):
+ @staticmethod
+ def _generic_delete_blob_options(delete_snapshots=False, **kwargs):
# type: (bool, **Any) -> Dict[str, Any]
access_conditions = get_access_conditions(kwargs.pop('lease', None))
mod_conditions = ModifiedAccessConditions(
@@ -681,19 +682,24 @@ def _delete_blob_options(self, delete_snapshots=False, **kwargs):
if_unmodified_since=kwargs.pop('if_unmodified_since', None),
if_match=kwargs.pop('if_match', None),
if_none_match=kwargs.pop('if_none_match', None))
- if self.snapshot and delete_snapshots:
- raise ValueError("The delete_snapshots option cannot be used with a specific snapshot.")
if delete_snapshots:
delete_snapshots = DeleteSnapshotsOptionType(delete_snapshots)
options = {
'timeout': kwargs.pop('timeout', None),
'delete_snapshots': delete_snapshots or None,
- 'snapshot': self.snapshot,
'lease_access_conditions': access_conditions,
'modified_access_conditions': mod_conditions}
options.update(kwargs)
return options
+ def _delete_blob_options(self, delete_snapshots=False, **kwargs):
+ # type: (bool, **Any) -> Dict[str, Any]
+ if self.snapshot and delete_snapshots:
+ raise ValueError("The delete_snapshots option cannot be used with a specific snapshot.")
+ options = self._generic_delete_blob_options(delete_snapshots, **kwargs)
+ options['snapshot'] = self.snapshot
+ return options
+
@distributed_trace
def delete_blob(self, delete_snapshots=False, **kwargs):
# type: (bool, **Any) -> None
diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py
index 0d00056451e9..a4f176c35685 100644
--- a/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py
+++ b/sdk/storage/azure-storage-blob/azure/storage/blob/container_client.py
@@ -1,3 +1,4 @@
+# pylint: disable=too-many-lines
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
@@ -20,6 +21,7 @@
from azure.core.paging import ItemPaged
from azure.core.tracing.decorator import distributed_trace
+from azure.core.pipeline.transport import HttpRequest
from ._shared.base_client import StorageAccountHostsMixin, parse_connection_str, parse_query
from ._shared.request_handlers import add_metadata_headers, serialize_iso
@@ -951,6 +953,286 @@ def delete_blob(
timeout=timeout,
**kwargs)
+ def _generate_delete_blobs_options(
+ self, snapshot=None,
+ timeout=None,
+ delete_snapshots=None,
+ request_id=None,
+ lease_access_conditions=None,
+ modified_access_conditions=None
+ ):
+ """This code is a copy from _generated.
+
+ Once Autorest is able to provide request preparation this code should be removed.
+ """
+ lease_id = None
+ if lease_access_conditions is not None:
+ lease_id = lease_access_conditions.lease_id
+ if_modified_since = None
+ if modified_access_conditions is not None:
+ if_modified_since = modified_access_conditions.if_modified_since
+ if_unmodified_since = None
+ if modified_access_conditions is not None:
+ if_unmodified_since = modified_access_conditions.if_unmodified_since
+ if_match = None
+ if modified_access_conditions is not None:
+ if_match = modified_access_conditions.if_match
+ if_none_match = None
+ if modified_access_conditions is not None:
+ if_none_match = modified_access_conditions.if_none_match
+
+ # Construct parameters
+ query_parameters = {}
+ if snapshot is not None:
+ query_parameters['snapshot'] = self._client._serialize.query("snapshot", snapshot, 'str') # pylint: disable=protected-access
+ if timeout is not None:
+ query_parameters['timeout'] = self._client._serialize.query("timeout", timeout, 'int', minimum=0) # pylint: disable=protected-access
+
+ # Construct headers
+ header_parameters = {}
+ if delete_snapshots is not None:
+ header_parameters['x-ms-delete-snapshots'] = self._client._serialize.header( # pylint: disable=protected-access
+ "delete_snapshots", delete_snapshots, 'DeleteSnapshotsOptionType')
+ if request_id is not None:
+ header_parameters['x-ms-client-request-id'] = self._client._serialize.header( # pylint: disable=protected-access
+ "request_id", request_id, 'str')
+ if lease_id is not None:
+ header_parameters['x-ms-lease-id'] = self._client._serialize.header( # pylint: disable=protected-access
+ "lease_id", lease_id, 'str')
+ if if_modified_since is not None:
+ header_parameters['If-Modified-Since'] = self._client._serialize.header( # pylint: disable=protected-access
+ "if_modified_since", if_modified_since, 'rfc-1123')
+ if if_unmodified_since is not None:
+ header_parameters['If-Unmodified-Since'] = self._client._serialize.header( # pylint: disable=protected-access
+ "if_unmodified_since", if_unmodified_since, 'rfc-1123')
+ if if_match is not None:
+ header_parameters['If-Match'] = self._client._serialize.header( # pylint: disable=protected-access
+ "if_match", if_match, 'str')
+ if if_none_match is not None:
+ header_parameters['If-None-Match'] = self._client._serialize.header( # pylint: disable=protected-access
+ "if_none_match", if_none_match, 'str')
+
+ return query_parameters, header_parameters
+
+ @distributed_trace
+ def delete_blobs(self, *blobs, **kwargs):
+ # type: (...) -> None
+ """Marks the specified blobs or snapshots for deletion.
+
+ The blob is later deleted during garbage collection.
+ Note that in order to delete a blob, you must delete all of its
+ snapshots. You can delete both at the same time with the Delete
+ Blob operation.
+
+ If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot
+ and retains the blob or snapshot for specified number of days.
+ After specified number of days, blob's data is removed from the service during garbage collection.
+ Soft deleted blob or snapshot is accessible through List Blobs API specifying `include="deleted"` option.
+ Soft-deleted blob or snapshot can be restored using Undelete API.
+
+ :param blobs: The blobs with which to interact.
+ :type blobs: str or ~azure.storage.blob.models.BlobProperties
+ :param str delete_snapshots:
+ Required if the blob has associated snapshots. Values include:
+ - "only": Deletes only the blobs snapshots.
+ - "include": Deletes the blob along with all snapshots.
+ :param lease:
+ Required if the blob has an active lease. Value can be a Lease object
+ or the lease ID as a string.
+ :type lease: ~azure.storage.blob.lease.LeaseClient or str
+ :param str delete_snapshots:
+ Required if the blob has associated snapshots. Values include:
+ - "only": Deletes only the blobs snapshots.
+ - "include": Deletes the blob along with all snapshots.
+ :param datetime if_modified_since:
+ A DateTime value. Azure expects the date value passed in to be UTC.
+ If timezone is included, any non-UTC datetimes will be converted to UTC.
+ If a date is passed in without timezone info, it is assumed to be UTC.
+ Specify this header to perform the operation only
+ if the resource has been modified since the specified time.
+ :param datetime if_unmodified_since:
+ A DateTime value. Azure expects the date value passed in to be UTC.
+ If timezone is included, any non-UTC datetimes will be converted to UTC.
+ If a date is passed in without timezone info, it is assumed to be UTC.
+ Specify this header to perform the operation only if
+ the resource has not been modified since the specified date/time.
+ :param str if_match:
+ An ETag value, or the wildcard character (*). Specify this header to perform
+ the operation only if the resource's ETag matches the value specified.
+ :param str if_none_match:
+ An ETag value, or the wildcard character (*). Specify this header
+ to perform the operation only if the resource's ETag does not match
+ the value specified. Specify the wildcard character (*) to perform
+ the operation only if the resource does not exist, and fail the
+ operation if it does exist.
+ :param int timeout:
+ The timeout parameter is expressed in seconds.
+ :rtype: None
+ """
+ options = BlobClient._generic_delete_blob_options( # pylint: disable=protected-access
+ **kwargs
+ )
+ query_parameters, header_parameters = self._generate_delete_blobs_options(**options)
+ # To pass kwargs to "_batch_send", we need to remove anything that was
+ # in the Autorest signature for Autorest, otherwise transport will be upset
+ for possible_param in ['timeout', 'delete_snapshots', 'lease_access_conditions', 'modified_access_conditions']:
+ options.pop(possible_param, None)
+
+ reqs = []
+ for blob in blobs:
+ req = HttpRequest(
+ "DELETE",
+ "/{}/{}".format(self.container_name, blob),
+ headers=header_parameters
+ )
+ req.format_parameters(query_parameters)
+ reqs.append(req)
+
+ return self._batch_send(*reqs, **options)
+
+ def _generate_set_tier_options(
+ self, tier, timeout=None, rehydrate_priority=None, request_id=None, lease_access_conditions=None
+ ):
+ """This code is a copy from _generated.
+
+ Once Autorest is able to provide request preparation this code should be removed.
+ """
+ lease_id = None
+ if lease_access_conditions is not None:
+ lease_id = lease_access_conditions.lease_id
+
+ comp = "tier"
+
+ # Construct parameters
+ query_parameters = {}
+ if timeout is not None:
+ query_parameters['timeout'] = self._client._serialize.query("timeout", timeout, 'int', minimum=0) # pylint: disable=protected-access
+ query_parameters['comp'] = self._client._serialize.query("comp", comp, 'str') # pylint: disable=protected-access, specify-parameter-names-in-call
+
+ # Construct headers
+ header_parameters = {}
+ header_parameters['x-ms-access-tier'] = self._client._serialize.header("tier", tier, 'str') # pylint: disable=protected-access, specify-parameter-names-in-call
+ if rehydrate_priority is not None:
+ header_parameters['x-ms-rehydrate-priority'] = self._client._serialize.header( # pylint: disable=protected-access
+ "rehydrate_priority", rehydrate_priority, 'str')
+ if request_id is not None:
+ header_parameters['x-ms-client-request-id'] = self._client._serialize.header( # pylint: disable=protected-access
+ "request_id", request_id, 'str')
+ if lease_id is not None:
+ header_parameters['x-ms-lease-id'] = self._client._serialize.header("lease_id", lease_id, 'str') # pylint: disable=protected-access
+
+ return query_parameters, header_parameters
+
+ @distributed_trace
+ def set_standard_blob_tier_blobs(
+ self,
+ standard_blob_tier, # type: Union[str, StandardBlobTier]
+ *blobs, # type: Union[str, BlobProperties]
+ **kwargs
+ ):
+ # type: (...) -> Iterator[HttpResponse]
+ """This operation sets the tier on block blobs.
+
+ A block blob's tier determines Hot/Cool/Archive storage type.
+ This operation does not update the blob's ETag.
+
+ :param blobs: The blobs with which to interact.
+ :type blobs: str or ~azure.storage.blob.models.BlobProperties
+ :param standard_blob_tier:
+ Indicates the tier to be set on the blob. Options include 'Hot', 'Cool',
+ 'Archive'. The hot tier is optimized for storing data that is accessed
+ frequently. The cool storage tier is optimized for storing data that
+ is infrequently accessed and stored for at least a month. The archive
+ tier is optimized for storing data that is rarely accessed and stored
+ for at least six months with flexible latency requirements.
+ :type standard_blob_tier: str or ~azure.storage.blob.models.StandardBlobTier
+ :param int timeout:
+ The timeout parameter is expressed in seconds.
+ :param lease:
+ Required if the blob has an active lease. Value can be a LeaseClient object
+ or the lease ID as a string.
+ :type lease: ~azure.storage.blob.lease.LeaseClient or str
+ :rtype: None
+ """
+ access_conditions = get_access_conditions(kwargs.pop('lease', None))
+ if standard_blob_tier is None:
+ raise ValueError("A StandardBlobTier must be specified")
+
+ query_parameters, header_parameters = self._generate_set_tier_options(
+ tier=standard_blob_tier,
+ lease_access_conditions=access_conditions,
+ **kwargs
+ )
+ # To pass kwargs to "_batch_send", we need to remove anything that was
+ # in the Autorest signature for Autorest, otherwise transport will be upset
+ for possible_param in ['timeout', 'lease']:
+ kwargs.pop(possible_param, None)
+
+ reqs = []
+ for blob in blobs:
+ req = HttpRequest(
+ "PUT",
+ "/{}/{}".format(self.container_name, blob),
+ headers=header_parameters
+ )
+ req.format_parameters(query_parameters)
+ reqs.append(req)
+
+ return self._batch_send(*reqs, **kwargs)
+
+ @distributed_trace
+ def set_premium_page_blob_tier_blobs(
+ self,
+ premium_page_blob_tier, # type: Union[str, PremiumPageBlobTier]
+ *blobs, # type: Union[str, BlobProperties]
+ **kwargs
+ ):
+ # type: (...) -> Iterator[HttpResponse]
+ """Sets the page blob tiers on the blobs. This API is only supported for page blobs on premium accounts.
+
+ :param blobs: The blobs with which to interact.
+ :type blobs: str or ~azure.storage.blob.models.BlobProperties
+ :param premium_page_blob_tier:
+ A page blob tier value to set the blob to. The tier correlates to the size of the
+ blob and number of allowed IOPS. This is only applicable to page blobs on
+ premium storage accounts.
+ :type premium_page_blob_tier: ~azure.storage.blob.models.PremiumPageBlobTier
+ :param int timeout:
+ The timeout parameter is expressed in seconds. This method may make
+ multiple calls to the Azure service and the timeout will apply to
+ each call individually.
+ :param lease:
+ Required if the blob has an active lease. Value can be a LeaseClient object
+ or the lease ID as a string.
+ :type lease: ~azure.storage.blob.lease.LeaseClient or str
+ :rtype: None
+ """
+ access_conditions = get_access_conditions(kwargs.pop('lease', None))
+ if premium_page_blob_tier is None:
+ raise ValueError("A PremiumPageBlobTier must be specified")
+
+ query_parameters, header_parameters = self._generate_set_tier_options(
+ tier=premium_page_blob_tier,
+ lease_access_conditions=access_conditions,
+ **kwargs
+ )
+ # To pass kwargs to "_batch_send", we need to remove anything that was
+ # in the Autorest signature for Autorest, otherwise transport will be upset
+ for possible_param in ['timeout', 'lease']:
+ kwargs.pop(possible_param, None)
+
+ reqs = []
+ for blob in blobs:
+ req = HttpRequest(
+ "PUT",
+ "/{}/{}".format(self.container_name, blob),
+ headers=header_parameters
+ )
+ req.format_parameters(query_parameters)
+ reqs.append(req)
+
+ return self._batch_send(*reqs, **kwargs)
+
def get_blob_client(
self, blob, # type: Union[str, BlobProperties]
snapshot=None # type: str
diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_delete_blobs_simple.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_delete_blobs_simple.yaml
new file mode 100644
index 000000000000..2c9dc6710d1b
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_delete_blobs_simple.yaml
@@ -0,0 +1,266 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '0'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 404c268a-e56c-11e9-8565-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container40320ffd?restype=container
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Date:
+ - Wed, 02 Oct 2019 23:27:49 GMT
+ ETag:
+ - '"0x8D74790244CD3F2"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id:
+ - 2e9c4a7f-501e-0091-3f79-791aed000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 406fbe28-e56c-11e9-932e-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container40320ffd/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:27:49 GMT
+ ETag:
+ - '"0x8D747902454372A"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 2e9c4aa6-501e-0091-6479-791aed000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 407647f0-e56c-11e9-a9ed-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container40320ffd/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:27:49 GMT
+ ETag:
+ - '"0x8D74790245C9BA3"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 2e9c4abf-501e-0091-7979-791aed000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 407ed140-e56c-11e9-a07b-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container40320ffd/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ ETag:
+ - '"0x8D7479024632B6A"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 2e9c4af0-501e-0091-2979-791aed000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: "--===============8911883992722617746==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /container40320ffd/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:27:51 GMT\r\nx-ms-client-request-id: 4084db54-e56c-11e9-8797-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:vyDpAPz8TaXR5sTt3LaoLLZmDXEuhJCky86GVPIOmUQ=\r\n\r\n\r\n--===============8911883992722617746==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /container40320ffd/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:27:51 GMT\r\nx-ms-client-request-id:
+ 40850146-e56c-11e9-8a70-1831bf6ae40e\r\nAuthorization: SharedKey storagename:yRlN32wb+MK7DXJp1qPrhLOncARuDUUjzwsNRKqe/LI=\r\n\r\n\r\n--===============8911883992722617746==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /container40320ffd/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:27:51 GMT\r\nx-ms-client-request-id:
+ 40850147-e56c-11e9-b3d9-1831bf6ae40e\r\nAuthorization: SharedKey storagename:qhPtekve+yBJAtzJnPsoS3E2IdK2867mUsw6226fKOo=\r\n\r\n\r\n--===============8911883992722617746==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================8911883992722617746==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 408613dc-e56c-11e9-9685-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_f0656806-c881-4025-8bba-603c1f075aa8\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 2e9c4b1c-501e-0091-5379-791aed1e2d9f\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_f0656806-c881-4025-8bba-603c1f075aa8\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 2e9c4b1c-501e-0091-5379-791aed1e2da1\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_f0656806-c881-4025-8bba-603c1f075aa8\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 2e9c4b1c-501e-0091-5379-791aed1e2da2\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_f0656806-c881-4025-8bba-603c1f075aa8--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_f0656806-c881-4025-8bba-603c1f075aa8
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 2e9c4b1c-501e-0091-5379-791aed000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+version: 1
diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_delete_blobs_snapshot.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_delete_blobs_snapshot.yaml
new file mode 100644
index 000000000000..bf44adbf971b
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_delete_blobs_snapshot.yaml
@@ -0,0 +1,426 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '0'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 40b10828-e56c-11e9-b82e-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container617e10e3?restype=container
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ ETag:
+ - '"0x8D7479024A3C2B8"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id:
+ - a9ba22f4-f01e-000e-1079-7956ef000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 40c694ba-e56c-11e9-8ad0-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container617e10e3/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ ETag:
+ - '"0x8D7479024A9838C"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - a9ba2317-f01e-000e-2d79-7956ef000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '0'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 40cb385e-e56c-11e9-b5fb-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container617e10e3/blob1?comp=snapshot
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ ETag:
+ - '"0x8D7479024A9838C"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id:
+ - a9ba233a-f01e-000e-4f79-7956ef000000
+ x-ms-request-server-encrypted:
+ - 'false'
+ x-ms-snapshot:
+ - '2019-10-02T23:27:51.2566284Z'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 40d1f4a4-e56c-11e9-b182-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container617e10e3/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ ETag:
+ - '"0x8D7479024B654D8"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - a9ba2351-f01e-000e-6679-7956ef000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 40d8731e-e56c-11e9-ba1f-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container617e10e3/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ ETag:
+ - '"0x8D7479024BC968D"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - a9ba2371-f01e-000e-0379-7956ef000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: null
+ headers:
+ Accept:
+ - application/xml
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 40de09b6-e56c-11e9-998e-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: GET
+ uri: https://storagename.blob.core.windows.net/container617e10e3?include=snapshots&restype=container&comp=list
+ response:
+ body:
+ string: "\uFEFFblob12019-10-02T23:27:51.2566284ZWed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024A9838C11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottruetrueblob1Wed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024A9838C11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob2Wed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024B654D811application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob3Wed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024BC968D11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrue"
+ headers:
+ Content-Type:
+ - application/xml
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - a9ba2383-f01e-000e-1579-7956ef000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============3459304103527371314==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /container617e10e3/blob1? HTTP/1.1\r\nx-ms-delete-snapshots:
+ only\r\nx-ms-date: Wed, 02 Oct 2019 23:27:51 GMT\r\nx-ms-client-request-id:
+ 40e6f4c2-e56c-11e9-98d9-1831bf6ae40e\r\nAuthorization: SharedKey storagename:cXMhY5oqSdhqhzne+vC5WMw/O7h7DlpjGh/XiWSku/c=\r\n\r\n\r\n--===============3459304103527371314==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /container617e10e3/blob2? HTTP/1.1\r\nx-ms-delete-snapshots: only\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:27:51 GMT\r\nx-ms-client-request-id: 40e6f4c3-e56c-11e9-b7b3-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:ugyealFbrFB7Aazr7Bo+FjX0vItAuSCpgCyU3qvHoGE=\r\n\r\n\r\n--===============3459304103527371314==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /container617e10e3/blob3? HTTP/1.1\r\nx-ms-delete-snapshots: only\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:27:51 GMT\r\nx-ms-client-request-id: 40e6f4c4-e56c-11e9-8760-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:a1nviBTPatxPjnp1/fzj5yzi7CW7ibCrQDUj4nbQMHs=\r\n\r\n\r\n--===============3459304103527371314==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1224'
+ Content-Type:
+ - multipart/mixed; boundary================3459304103527371314==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 40e7420a-e56c-11e9-ae20-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:51 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_bf2693d9-6669-4afc-99bd-42df497f92af\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: a9ba23a7-f01e-000e-3879-7956ef1edacc\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_bf2693d9-6669-4afc-99bd-42df497f92af\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: a9ba23a7-f01e-000e-3879-7956ef1edace\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:a9ba23a7-f01e-000e-3879-7956ef1edace\nTime:2019-10-02T23:27:51.4521191Z\r\n--batchresponse_bf2693d9-6669-4afc-99bd-42df497f92af\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: a9ba23a7-f01e-000e-3879-7956ef1edacf\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:a9ba23a7-f01e-000e-3879-7956ef1edacf\nTime:2019-10-02T23:27:51.4521191Z\r\n--batchresponse_bf2693d9-6669-4afc-99bd-42df497f92af--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_bf2693d9-6669-4afc-99bd-42df497f92af
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - a9ba23a7-f01e-000e-3879-7956ef000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: null
+ headers:
+ Accept:
+ - application/xml
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 40f0bd98-e56c-11e9-bc6d-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:27:52 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: GET
+ uri: https://storagename.blob.core.windows.net/container617e10e3?include=snapshots&restype=container&comp=list
+ response:
+ body:
+ string: "\uFEFFblob1Wed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024A9838C11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob2Wed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024B654D811application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob3Wed,
+ 02 Oct 2019 23:27:51 GMTWed, 02 Oct 2019 23:27:51
+ GMT0x8D7479024BC968D11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrue"
+ headers:
+ Content-Type:
+ - application/xml
+ Date:
+ - Wed, 02 Oct 2019 23:27:50 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - a9ba23c8-f01e-000e-5879-7956ef000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_standard_blob_tier_set_tier_api_batch.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_standard_blob_tier_set_tier_api_batch.yaml
new file mode 100644
index 000000000000..3598cbef77e2
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/tests/recordings/test_container.test_standard_blob_tier_set_tier_api_batch.yaml
@@ -0,0 +1,1322 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '0'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8be64b8c-e56c-11e9-879f-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a?restype=container
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D747906FE8388D"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id:
+ - 39ef909c-d01e-00b0-6f79-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: "--===============1483581254377965210==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /containera687174a/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id: 8c0c6140-e56c-11e9-b4a6-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:UiVXjEnPsxw+CBLDKVwFRVpT0YdGHKq49i+0EsL84AA=\r\n\r\n\r\n--===============1483581254377965210==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /containera687174a/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c0c6141-e56c-11e9-be8a-1831bf6ae40e\r\nAuthorization: SharedKey storagename:LHu86Yxl0zZMYLOwgd4dNVpS2UfZ7J2GZcwXrS2pzQE=\r\n\r\n\r\n--===============1483581254377965210==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /containera687174a/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c0c8858-e56c-11e9-aff8-1831bf6ae40e\r\nAuthorization: SharedKey storagename:YVb9JFgSGe7fjD5Kd1AfA16fqQscUWdufd+RkG26FlE=\r\n\r\n\r\n--===============1483581254377965210==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================1483581254377965210==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c0d73e4-e56c-11e9-a250-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_f2415df9-cc8e-4dc7-95c4-21b60b2e1675\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: 39ef90b9-d01e-00b0-0a79-793e961e611c\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:39ef90b9-d01e-00b0-0a79-793e961e611c\nTime:2019-10-02T23:29:57.5487074Z\r\n--batchresponse_f2415df9-cc8e-4dc7-95c4-21b60b2e1675\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: 39ef90b9-d01e-00b0-0a79-793e961e611e\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:39ef90b9-d01e-00b0-0a79-793e961e611e\nTime:2019-10-02T23:29:57.5487074Z\r\n--batchresponse_f2415df9-cc8e-4dc7-95c4-21b60b2e1675\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: 39ef90b9-d01e-00b0-0a79-793e961e611f\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:39ef90b9-d01e-00b0-0a79-793e961e611f\nTime:2019-10-02T23:29:57.5487074Z\r\n--batchresponse_f2415df9-cc8e-4dc7-95c4-21b60b2e1675--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_f2415df9-cc8e-4dc7-95c4-21b60b2e1675
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef90b9-d01e-00b0-0a79-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c1eb0ae-e56c-11e9-bfd1-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D747907002B685"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef9108-d01e-00b0-5179-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c251950-e56c-11e9-8f34-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D747907008D12D"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef9122-d01e-00b0-6679-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c2ae5ae-e56c-11e9-95ab-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D74790700EC4AD"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef9144-d01e-00b0-0179-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c3075ca-e56c-11e9-b860-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Accept-Ranges:
+ - bytes
+ Content-Length:
+ - '11'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Content-Type:
+ - application/octet-stream
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D747907002B685"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier:
+ - Hot
+ x-ms-access-tier-inferred:
+ - 'true'
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-creation-time:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ x-ms-lease-state:
+ - available
+ x-ms-lease-status:
+ - unlocked
+ x-ms-request-id:
+ - 39ef9163-d01e-00b0-2079-793e96000000
+ x-ms-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============3485947800101400709==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nPUT /containera687174a/blob1?comp=tier HTTP/1.1\r\nContent-Length:
+ 0\r\nx-ms-access-tier: Archive\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c36799e-e56c-11e9-96c8-1831bf6ae40e\r\nAuthorization: SharedKey storagename:JkapTAnFkkWEKnNqb9s8UfQPx34gvAzMtHe/ShejRzw=\r\n\r\n\r\n--===============3485947800101400709==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nPUT
+ /containera687174a/blob2?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Archive\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c36799f-e56c-11e9-ad8e-1831bf6ae40e\r\nAuthorization: SharedKey storagename:ZjLvzFCLamCCor/tqSLgqEEJ/FeV3xxafyNlyPY8uuM=\r\n\r\n\r\n--===============3485947800101400709==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nPUT
+ /containera687174a/blob3?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Archive\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c3679a0-e56c-11e9-83dc-1831bf6ae40e\r\nAuthorization: SharedKey storagename:M5Jt22fkFUE+xgOYiQ+ZTQMkSRzsKFbcuocKyu8lsvk=\r\n\r\n\r\n--===============3485947800101400709==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1293'
+ Content-Type:
+ - multipart/mixed; boundary================3485947800101400709==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c36c7c0-e56c-11e9-ae48-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_6493f1ce-4c1d-4aa5-84ca-73549df8936d\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef9180-d01e-00b0-3d79-793e961e612e\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_6493f1ce-4c1d-4aa5-84ca-73549df8936d\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef9180-d01e-00b0-3d79-793e961e612f\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_6493f1ce-4c1d-4aa5-84ca-73549df8936d\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef9180-d01e-00b0-3d79-793e961e6130\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_6493f1ce-4c1d-4aa5-84ca-73549df8936d--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_6493f1ce-4c1d-4aa5-84ca-73549df8936d
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef9180-d01e-00b0-3d79-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c3fca76-e56c-11e9-9f17-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Accept-Ranges:
+ - bytes
+ Content-Length:
+ - '11'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Content-Type:
+ - application/octet-stream
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D747907002B685"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier:
+ - Archive
+ x-ms-access-tier-change-time:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-creation-time:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ x-ms-lease-state:
+ - available
+ x-ms-lease-status:
+ - unlocked
+ x-ms-request-id:
+ - 39ef91ad-d01e-00b0-6a79-793e96000000
+ x-ms-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============3596608585363756258==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /containera687174a/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id: 8c446e6e-e56c-11e9-98b4-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:Cf1l+IdHT5pLTKFkaYYszqolSlUWPkhvayxguGChFNM=\r\n\r\n\r\n--===============3596608585363756258==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /containera687174a/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c446e6f-e56c-11e9-afcf-1831bf6ae40e\r\nAuthorization: SharedKey storagename:BPg1qRQ+WFFTEdnI88csJZP7cq4BQ8/xNnPyUVvUo0E=\r\n\r\n\r\n--===============3596608585363756258==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /containera687174a/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c44946e-e56c-11e9-ad3e-1831bf6ae40e\r\nAuthorization: SharedKey storagename:uIGHVLjmBAInCrQH9YmvSz/vJyjuvZyaysgtA248TzQ=\r\n\r\n\r\n--===============3596608585363756258==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================3596608585363756258==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c44e274-e56c-11e9-904d-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_723231f0-dd17-4abd-83a8-2336ab208e7a\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef91cc-d01e-00b0-0779-793e961e6133\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_723231f0-dd17-4abd-83a8-2336ab208e7a\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef91cc-d01e-00b0-0779-793e961e6134\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_723231f0-dd17-4abd-83a8-2336ab208e7a\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef91cc-d01e-00b0-0779-793e961e6135\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_723231f0-dd17-4abd-83a8-2336ab208e7a--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_723231f0-dd17-4abd-83a8-2336ab208e7a
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef91cc-d01e-00b0-0779-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c4ba4f0-e56c-11e9-aac4-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D74790702FBA4F"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef91eb-d01e-00b0-2679-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c520100-e56c-11e9-bc69-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:56 GMT
+ ETag:
+ - '"0x8D74790703649E4"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef9202-d01e-00b0-3d79-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c585480-e56c-11e9-b5f3-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D74790703CD9C0"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef9219-d01e-00b0-5479-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c5eaea4-e56c-11e9-832c-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Accept-Ranges:
+ - bytes
+ Content-Length:
+ - '11'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Content-Type:
+ - application/octet-stream
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D74790702FBA4F"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier:
+ - Hot
+ x-ms-access-tier-inferred:
+ - 'true'
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-creation-time:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ x-ms-lease-state:
+ - available
+ x-ms-lease-status:
+ - unlocked
+ x-ms-request-id:
+ - 39ef922a-d01e-00b0-6479-793e96000000
+ x-ms-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============8089144083184603275==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nPUT /containera687174a/blob1?comp=tier HTTP/1.1\r\nContent-Length:
+ 0\r\nx-ms-access-tier: Cool\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c63e934-e56c-11e9-9f70-1831bf6ae40e\r\nAuthorization: SharedKey storagename:215ijii+HbTbASqrh+m6BVutAnCZavZ++HK31VgRlzU=\r\n\r\n\r\n--===============8089144083184603275==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nPUT
+ /containera687174a/blob2?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Cool\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c63e935-e56c-11e9-bba1-1831bf6ae40e\r\nAuthorization: SharedKey storagename:qqI6xg7pQbjBBL7Q1tr+FZnHTN+FmvJgOV83kffkPTw=\r\n\r\n\r\n--===============8089144083184603275==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nPUT
+ /containera687174a/blob3?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Cool\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c63e936-e56c-11e9-986e-1831bf6ae40e\r\nAuthorization: SharedKey storagename:FS60zvJqEXzSpd7Zr3Cec9RdeNPa5U+R794uR4Ee8yk=\r\n\r\n\r\n--===============8089144083184603275==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1284'
+ Content-Type:
+ - multipart/mixed; boundary================8089144083184603275==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c643846-e56c-11e9-9c80-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_9a31cb17-099d-4d0d-a966-cda3308762d8\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef924d-d01e-00b0-0679-793e961e6136\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_9a31cb17-099d-4d0d-a966-cda3308762d8\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef924d-d01e-00b0-0679-793e961e6137\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_9a31cb17-099d-4d0d-a966-cda3308762d8\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef924d-d01e-00b0-0679-793e961e6138\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_9a31cb17-099d-4d0d-a966-cda3308762d8--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_9a31cb17-099d-4d0d-a966-cda3308762d8
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef924d-d01e-00b0-0679-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c6adfd8-e56c-11e9-a993-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Accept-Ranges:
+ - bytes
+ Content-Length:
+ - '11'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Content-Type:
+ - application/octet-stream
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D74790702FBA4F"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier:
+ - Cool
+ x-ms-access-tier-change-time:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-creation-time:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ x-ms-lease-state:
+ - available
+ x-ms-lease-status:
+ - unlocked
+ x-ms-request-id:
+ - 39ef9279-d01e-00b0-3079-793e96000000
+ x-ms-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============5575056120482726072==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /containera687174a/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id: 8c6fad42-e56c-11e9-a40a-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:CeEFmWwz8wg2zyFLqZBgz9sWnnzogfe4yGrXj6jRtt4=\r\n\r\n\r\n--===============5575056120482726072==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /containera687174a/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c6fd324-e56c-11e9-b57e-1831bf6ae40e\r\nAuthorization: SharedKey storagename:cl7h9S0iamtkjPdyJf/xCeCpcaM2ilTF2+ux57IpHMA=\r\n\r\n\r\n--===============5575056120482726072==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /containera687174a/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c6fd325-e56c-11e9-afb0-1831bf6ae40e\r\nAuthorization: SharedKey storagename:05ypdkBQIqYg/RMV1cmWlj4c52I9kGPl3kuQ7EZoR4Y=\r\n\r\n\r\n--===============5575056120482726072==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================5575056120482726072==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c702136-e56c-11e9-a7b8-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_c85a109b-e1b4-469a-96f3-361e2dc853b2\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef9295-d01e-00b0-4b79-793e961e613d\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_c85a109b-e1b4-469a-96f3-361e2dc853b2\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef9295-d01e-00b0-4b79-793e961e613e\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_c85a109b-e1b4-469a-96f3-361e2dc853b2\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef9295-d01e-00b0-4b79-793e961e613f\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_c85a109b-e1b4-469a-96f3-361e2dc853b2--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_c85a109b-e1b4-469a-96f3-361e2dc853b2
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef9295-d01e-00b0-4b79-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c78446e-e56c-11e9-9edf-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D74790705C21CF"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef92c0-d01e-00b0-7279-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c7e4f38-e56c-11e9-9dc9-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D7479070623C2C"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef92e4-d01e-00b0-1379-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: hello world
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 8c847b58-e56c-11e9-ab05-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ Content-Length:
+ - '0'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D7479070682FA2"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64:
+ - vo7q9sPVKY0=
+ x-ms-request-id:
+ - 39ef92fc-d01e-00b0-2879-793e96000000
+ x-ms-request-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 201
+ message: Created
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c8a11b0-e56c-11e9-a069-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Accept-Ranges:
+ - bytes
+ Content-Length:
+ - '11'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Content-Type:
+ - application/octet-stream
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D74790705C21CF"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier:
+ - Hot
+ x-ms-access-tier-inferred:
+ - 'true'
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-creation-time:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-lease-state:
+ - available
+ x-ms-lease-status:
+ - unlocked
+ x-ms-request-id:
+ - 39ef930e-d01e-00b0-3979-793e96000000
+ x-ms-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============5715678060279454027==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nPUT /containera687174a/blob1?comp=tier HTTP/1.1\r\nContent-Length:
+ 0\r\nx-ms-access-tier: Hot\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c8e8452-e56c-11e9-8d77-1831bf6ae40e\r\nAuthorization: SharedKey storagename:IBVXRoHYodB+DIEIAOp1yfMyjn0910oOxBCjy/b3vWs=\r\n\r\n\r\n--===============5715678060279454027==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nPUT
+ /containera687174a/blob2?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Hot\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id: 8c8e8453-e56c-11e9-bee2-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:PB6IJemRV6Vqt0Y/kQXUbIn+1kUX894/4XPZZLGmGyI=\r\n\r\n\r\n--===============5715678060279454027==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nPUT
+ /containera687174a/blob3?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Hot\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id: 8c8eaa34-e56c-11e9-b171-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:SeJxLYIwzrwfl5PoX4RyZ9SfdVtBpePzE5W6ObFOwP4=\r\n\r\n\r\n--===============5715678060279454027==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1281'
+ Content-Type:
+ - multipart/mixed; boundary================5715678060279454027==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c8ef95a-e56c-11e9-9164-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_b6816b40-aa4a-4e13-99f8-db84954be5db\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef9322-d01e-00b0-4c79-793e961e6148\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_b6816b40-aa4a-4e13-99f8-db84954be5db\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef9322-d01e-00b0-4c79-793e961e6149\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_b6816b40-aa4a-4e13-99f8-db84954be5db\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 39ef9322-d01e-00b0-4c79-793e961e614a\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_b6816b40-aa4a-4e13-99f8-db84954be5db--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_b6816b40-aa4a-4e13-99f8-db84954be5db
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef9322-d01e-00b0-4c79-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+- request:
+ body: null
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c955074-e56c-11e9-9582-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/containera687174a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ Accept-Ranges:
+ - bytes
+ Content-Length:
+ - '11'
+ Content-MD5:
+ - XrY7u+Ae7tCTyyK7j1rNww==
+ Content-Type:
+ - application/octet-stream
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ ETag:
+ - '"0x8D74790705C21CF"'
+ Last-Modified:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier:
+ - Hot
+ x-ms-access-tier-change-time:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-creation-time:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-lease-state:
+ - available
+ x-ms-lease-status:
+ - unlocked
+ x-ms-request-id:
+ - 39ef933a-d01e-00b0-6479-793e96000000
+ x-ms-server-encrypted:
+ - 'true'
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 200
+ message: OK
+- request:
+ body: "--===============5183461022170956857==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /containera687174a/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id: 8c9a348c-e56c-11e9-a98a-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:zFylWRP5on4lmjkhDJAPiPu4vMpr7bxhVnmVu1dIe4U=\r\n\r\n\r\n--===============5183461022170956857==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /containera687174a/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c9a5b9e-e56c-11e9-ba16-1831bf6ae40e\r\nAuthorization: SharedKey storagename:onp9uFerwAeLViyD1x+/Www+g2irtYcB3qeZ4DC272E=\r\n\r\n\r\n--===============5183461022170956857==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /containera687174a/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:29:58 GMT\r\nx-ms-client-request-id:
+ 8c9a5b9f-e56c-11e9-9321-1831bf6ae40e\r\nAuthorization: SharedKey storagename:C/6xrthKyt7l5vPh2NgR7ONM++nRPP05R7h39Bb8iOU=\r\n\r\n\r\n--===============5183461022170956857==--\r\n"
+ headers:
+ Accept:
+ - '*/*'
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================5183461022170956857==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 8c9aa9ba-e56c-11e9-96cb-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:29:58 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_7a38dc67-c8ef-4d9b-ae64-2b04b11f284f\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef9351-d01e-00b0-7a79-793e961e614c\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_7a38dc67-c8ef-4d9b-ae64-2b04b11f284f\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef9351-d01e-00b0-7a79-793e961e614d\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_7a38dc67-c8ef-4d9b-ae64-2b04b11f284f\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 39ef9351-d01e-00b0-7a79-793e961e614e\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_7a38dc67-c8ef-4d9b-ae64-2b04b11f284f--"
+ headers:
+ Content-Type:
+ - multipart/mixed; boundary=batchresponse_7a38dc67-c8ef-4d9b-ae64-2b04b11f284f
+ Date:
+ - Wed, 02 Oct 2019 23:29:57 GMT
+ Server:
+ - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ Transfer-Encoding:
+ - chunked
+ x-ms-request-id:
+ - 39ef9351-d01e-00b0-7a79-793e96000000
+ x-ms-version:
+ - '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+version: 1
diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_delete_blobs_simple.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_delete_blobs_simple.yaml
new file mode 100644
index 000000000000..9cd848ab0010
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_delete_blobs_simple.yaml
@@ -0,0 +1,285 @@
+interactions:
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 24761c64-e56d-11e9-ad36-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:13 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containeraa4e127a?restype=container
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:12 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D747910865C811"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id: 8c2c2a12-901e-006a-3a79-79a777000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containeraa4e127a
+ - restype=container
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 24899374-e56d-11e9-b396-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:13 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containeraa4e127a/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:12 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791086C714B"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 8c2c2a22-901e-006a-4679-79a777000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containeraa4e127a/blob1
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 248f71fe-e56d-11e9-8379-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:13 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containeraa4e127a/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:12 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479108734F45"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 8c2c2a32-901e-006a-5679-79a777000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containeraa4e127a/blob2
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 249633d4-e56d-11e9-b40f-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:13 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containeraa4e127a/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:12 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791087969BE"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 8c2c2a44-901e-006a-6779-79a777000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containeraa4e127a/blob3
+ - ''
+ - ''
+- request:
+ body: "--===============0872275850216249893==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /containeraa4e127a/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:34:13 GMT\r\nx-ms-client-request-id: 249bc928-e56d-11e9-8a78-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:FAA6wmBM/Vo50GKEBnkwrip4DbkSiizArLjJkjFJXbM=\r\n\r\n\r\n--===============0872275850216249893==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /containeraa4e127a/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:13 GMT\r\nx-ms-client-request-id:
+ 249bc929-e56d-11e9-876d-1831bf6ae40e\r\nAuthorization: SharedKey storagename:vSUUco9xi+Wj/DwuuistZDbBrPsxEU9qo8xjqMSckT8=\r\n\r\n\r\n--===============0872275850216249893==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /containeraa4e127a/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:13 GMT\r\nx-ms-client-request-id:
+ 249bc92a-e56d-11e9-9c05-1831bf6ae40e\r\nAuthorization: SharedKey storagename:iP/wlodCCrYCWMYz4Vyrv6/dLwDgxfmUMr6dYOQMeYE=\r\n\r\n\r\n--===============0872275850216249893==--\r\n"
+ headers:
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================0872275850216249893==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 249cb24c-e56d-11e9-a996-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:13 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_dc7ce28b-cd1c-4770-b051-98de0c310e58\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 8c2c2a5c-901e-006a-7d79-79a7771e842b\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_dc7ce28b-cd1c-4770-b051-98de0c310e58\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 8c2c2a5c-901e-006a-7d79-79a7771e842d\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_dc7ce28b-cd1c-4770-b051-98de0c310e58\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 8c2c2a5c-901e-006a-7d79-79a7771e842e\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_dc7ce28b-cd1c-4770-b051-98de0c310e58--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_dc7ce28b-cd1c-4770-b051-98de0c310e58
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:12 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: 8c2c2a5c-901e-006a-7d79-79a777000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+version: 1
diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_delete_blobs_snapshot.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_delete_blobs_snapshot.yaml
new file mode 100644
index 000000000000..ce1d5be443c3
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_delete_blobs_snapshot.yaml
@@ -0,0 +1,458 @@
+interactions:
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 24acbb7a-e56d-11e9-9b04-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containerd0941360?restype=container
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791089B22BC"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id: b242b8cb-b01e-0099-4679-7900e2000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360
+ - restype=container
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 24be1458-e56d-11e9-920d-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containerd0941360/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479108A0A118"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: b242b8d8-b01e-0099-5179-7900e2000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360/blob1
+ - ''
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 24c651c6-e56d-11e9-9542-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containerd0941360/blob1?comp=snapshot
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479108A0A118"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id: b242b8ec-b01e-0099-6279-7900e2000000
+ x-ms-request-server-encrypted: 'false'
+ x-ms-snapshot: '2019-10-02T23:34:13.7309250Z'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360/blob1
+ - comp=snapshot
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 24cba8e8-e56d-11e9-8af9-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containerd0941360/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479108AE359F"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: b242b8f8-b01e-0099-6e79-7900e2000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360/blob2
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 24d1c366-e56d-11e9-b3ab-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/containerd0941360/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479108B4EC76"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: b242b90e-b01e-0099-0379-7900e2000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360/blob3
+ - ''
+ - ''
+- request:
+ body: null
+ headers:
+ Accept:
+ - application/xml
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 24d70e40-e56d-11e9-a133-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: GET
+ uri: https://storagename.blob.core.windows.net/containerd0941360?include=snapshots&restype=container&comp=list
+ response:
+ body:
+ string: "\uFEFFblob12019-10-02T23:34:13.7309250ZWed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108A0A11811application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottruetrueblob1Wed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108A0A11811application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob2Wed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108AE359F11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob3Wed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108B4EC7611application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrue"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/xml
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: b242b911-b01e-0099-0679-7900e2000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360
+ - include=snapshots&restype=container&comp=list
+ - ''
+- request:
+ body: "--===============7998856315149802492==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /containerd0941360/blob1? HTTP/1.1\r\nx-ms-delete-snapshots:
+ only\r\nx-ms-date: Wed, 02 Oct 2019 23:34:14 GMT\r\nx-ms-client-request-id:
+ 24dfc35b-e56d-11e9-9c49-1831bf6ae40e\r\nAuthorization: SharedKey storagename:UB7LfNetpvgQaiT0YsYkx6rPoiGJ1GWFVf90Pbht4PQ=\r\n\r\n\r\n--===============7998856315149802492==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /containerd0941360/blob2? HTTP/1.1\r\nx-ms-delete-snapshots: only\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:34:14 GMT\r\nx-ms-client-request-id: 24dfc35a-e56d-11e9-a261-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:ga7dxFIMwaJN++JqWfrS5ArP5QVUtD7skKPBTBeCuO0=\r\n\r\n\r\n--===============7998856315149802492==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /containerd0941360/blob3? HTTP/1.1\r\nx-ms-delete-snapshots: only\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:34:14 GMT\r\nx-ms-client-request-id: 24dfc35c-e56d-11e9-882b-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:8Dh1oNkS8omkQrhg1MZOxz9HX0Lhj+KyxPGkpNgUDlY=\r\n\r\n\r\n--===============7998856315149802492==--\r\n"
+ headers:
+ Content-Length:
+ - '1224'
+ Content-Type:
+ - multipart/mixed; boundary================7998856315149802492==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 24e01178-e56d-11e9-9703-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_35579099-eb20-4851-ad90-9521253e026e\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: b242b924-b01e-0099-1879-7900e21e1483\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_35579099-eb20-4851-ad90-9521253e026e\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: b242b924-b01e-0099-1879-7900e21e1485\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:b242b924-b01e-0099-1879-7900e21e1485\nTime:2019-10-02T23:34:13.9769390Z\r\n--batchresponse_35579099-eb20-4851-ad90-9521253e026e\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does
+ not exist.\r\nx-ms-error-code: BlobNotFound\r\nx-ms-request-id: b242b924-b01e-0099-1879-7900e21e1486\r\nx-ms-version:
+ 2019-02-02\r\nContent-Length: 216\r\nContent-Type: application/xml\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n\uFEFF\nBlobNotFoundThe
+ specified blob does not exist.\nRequestId:b242b924-b01e-0099-1879-7900e21e1486\nTime:2019-10-02T23:34:13.9769390Z\r\n--batchresponse_35579099-eb20-4851-ad90-9521253e026e--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_35579099-eb20-4851-ad90-9521253e026e
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: b242b924-b01e-0099-1879-7900e2000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+- request:
+ body: null
+ headers:
+ Accept:
+ - application/xml
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 24f30692-e56d-11e9-a289-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:14 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: GET
+ uri: https://storagename.blob.core.windows.net/containerd0941360?include=snapshots&restype=container&comp=list
+ response:
+ body:
+ string: "\uFEFFblob1Wed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108A0A11811application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob2Wed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108AE359F11application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrueblob3Wed,
+ 02 Oct 2019 23:34:13 GMTWed, 02 Oct 2019 23:34:13
+ GMT0x8D7479108B4EC7611application/octet-streamXrY7u+Ae7tCTyyK7j1rNww==BlockBlobHottrueunlockedavailabletrue"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/xml
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:13 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: b242b942-b01e-0099-3579-7900e2000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /containerd0941360
+ - include=snapshots&restype=container&comp=list
+ - ''
+version: 1
diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_standard_blob_tier_set_tier_api_batch.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_standard_blob_tier_set_tier_api_batch.yaml
new file mode 100644
index 000000000000..b8925e6c4655
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/tests/recordings/test_container_async.test_standard_blob_tier_set_tier_api_batch.yaml
@@ -0,0 +1,1325 @@
+interactions:
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 32d7c2dc-e56d-11e9-9db5-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:37 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7?restype=container
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479116D2797E"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-request-id: c97a0e14-a01e-0071-7d79-799974000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7
+ - restype=container
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 330081c6-e56d-11e9-87cc-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479116E3383E"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: c97a0e59-a01e-0071-3b79-799974000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 33062838-e56d-11e9-8003-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479116E904C5"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: c97a0e70-a01e-0071-5279-799974000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob2
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 330c27b0-e56d-11e9-afb2-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479116EEF81E"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: c97a0e91-a01e-0071-6e79-799974000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob3
+ - ''
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 33132c9e-e56d-11e9-9723-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Accept-Ranges
+ : bytes
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '11'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/octet-stream
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479116E3383E"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier: Hot
+ x-ms-access-tier-inferred: 'true'
+ x-ms-blob-type: BlockBlob
+ x-ms-creation-time: Wed, 02 Oct 2019 23:34:37 GMT
+ x-ms-lease-state: available
+ x-ms-lease-status: unlocked
+ x-ms-request-id: c97a0eb5-a01e-0071-1279-799974000000
+ x-ms-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: "--===============5802361980353224357==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nPUT /container3d7c19c7/blob1?comp=tier HTTP/1.1\r\nContent-Length:
+ 0\r\nx-ms-access-tier: Archive\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 331a7fa0-e56d-11e9-801a-1831bf6ae40e\r\nAuthorization: SharedKey storagename:pOd7Li6+PCp6RwpB/8txWn9enj72uZqNDJM/yxgW/qg=\r\n\r\n\r\n--===============5802361980353224357==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nPUT
+ /container3d7c19c7/blob2?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Archive\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 331a7f9f-e56d-11e9-a0cb-1831bf6ae40e\r\nAuthorization: SharedKey storagename:CL0F6M5fMpKwC/g/ZQllS3FNuC/ZERZLdkb5FNVHTSk=\r\n\r\n\r\n--===============5802361980353224357==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nPUT
+ /container3d7c19c7/blob3?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Archive\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 331a7f9e-e56d-11e9-8142-1831bf6ae40e\r\nAuthorization: SharedKey storagename:kT/BrdmwrkWixIKsFwKs+JtmhDH4JycbB/X6kAXod14=\r\n\r\n\r\n--===============5802361980353224357==--\r\n"
+ headers:
+ Content-Length:
+ - '1293'
+ Content-Type:
+ - multipart/mixed; boundary================5802361980353224357==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 331b68c0-e56d-11e9-903c-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_238f34ad-2ef1-4e8f-ad72-4e053dd442d8\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 2ea12eb8-501e-0091-3c79-791aed1e5238\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_238f34ad-2ef1-4e8f-ad72-4e053dd442d8\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 2ea12eb8-501e-0091-3c79-791aed1e523a\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_238f34ad-2ef1-4e8f-ad72-4e053dd442d8\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 2ea12eb8-501e-0091-3c79-791aed1e523b\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_238f34ad-2ef1-4e8f-ad72-4e053dd442d8--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_238f34ad-2ef1-4e8f-ad72-4e053dd442d8
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: 2ea12eb8-501e-0091-3c79-791aed000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 3331ab86-e56d-11e9-ba5b-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Accept-Ranges
+ : bytes
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '11'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/octet-stream
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479116E3383E"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier: Archive
+ x-ms-access-tier-change-time: Wed, 02 Oct 2019 23:34:37 GMT
+ x-ms-blob-type: BlockBlob
+ x-ms-creation-time: Wed, 02 Oct 2019 23:34:37 GMT
+ x-ms-lease-state: available
+ x-ms-lease-status: unlocked
+ x-ms-request-id: 2ea12ee9-501e-0091-6c79-791aed000000
+ x-ms-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: "--===============1060753039404979828==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /container3d7c19c7/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id: 33364540-e56d-11e9-9878-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:S/N5AIT6JVVz+ukPIvBmhvBn0W4T70Owrh+l6c5KLR8=\r\n\r\n\r\n--===============1060753039404979828==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /container3d7c19c7/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 33364542-e56d-11e9-81f7-1831bf6ae40e\r\nAuthorization: SharedKey storagename:So7Kdr7n2sIOs+nXBTkdhIvoqzqf1Ix5xV6O4+uDnLc=\r\n\r\n\r\n--===============1060753039404979828==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /container3d7c19c7/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 33364541-e56d-11e9-bec3-1831bf6ae40e\r\nAuthorization: SharedKey storagename:uNeVcTa0IZsOaAmu9WDWWe4MJeUITSfGDKrfEjjC5sU=\r\n\r\n\r\n--===============1060753039404979828==--\r\n"
+ headers:
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================1060753039404979828==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 33366c52-e56d-11e9-ac00-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_e11492a4-5f25-48ff-8839-65ee748cdcd1\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 45b83b52-601e-0023-1679-79e59c1e6f0e\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_e11492a4-5f25-48ff-8839-65ee748cdcd1\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 45b83b52-601e-0023-1679-79e59c1e6f10\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_e11492a4-5f25-48ff-8839-65ee748cdcd1\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 45b83b52-601e-0023-1679-79e59c1e6f11\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_e11492a4-5f25-48ff-8839-65ee748cdcd1--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_e11492a4-5f25-48ff-8839-65ee748cdcd1
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: 45b83b52-601e-0023-1679-79e59c000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 3349d806-e56d-11e9-b52f-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791172CC4B3"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 45b83b7b-601e-0023-3e79-79e59c000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 334fcb74-e56d-11e9-8b65-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479117335494"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 45b83b97-601e-0023-5779-79e59c000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob2
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 335673a8-e56d-11e9-ba2e-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D747911738F9CB"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 45b83bac-601e-0023-6979-79e59c000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob3
+ - ''
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 335b0d1e-e56d-11e9-a3fe-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Accept-Ranges
+ : bytes
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '11'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/octet-stream
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791172CC4B3"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier: Hot
+ x-ms-access-tier-inferred: 'true'
+ x-ms-blob-type: BlockBlob
+ x-ms-creation-time: Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-lease-state: available
+ x-ms-lease-status: unlocked
+ x-ms-request-id: 45b83bbb-601e-0023-7879-79e59c000000
+ x-ms-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: "--===============8384162589281376436==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nPUT /container3d7c19c7/blob1?comp=tier HTTP/1.1\r\nContent-Length:
+ 0\r\nx-ms-access-tier: Cool\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 335eddaf-e56d-11e9-97ff-1831bf6ae40e\r\nAuthorization: SharedKey storagename:xHmMZBjPWfFYaqAsg09EcYnZ7jutQTmjF/x7RUdEnOw=\r\n\r\n\r\n--===============8384162589281376436==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nPUT
+ /container3d7c19c7/blob2?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Cool\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 335eddb0-e56d-11e9-a0bf-1831bf6ae40e\r\nAuthorization: SharedKey storagename:pR8Mfuwg8CQy83Kl8Yk4NJMuHW85CDQAj/sqb47yS8U=\r\n\r\n\r\n--===============8384162589281376436==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nPUT
+ /container3d7c19c7/blob3?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Cool\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 335eddae-e56d-11e9-ab2e-1831bf6ae40e\r\nAuthorization: SharedKey storagename:HfM90lZP+SwJ1TzA2C3ZA7WrwuZ9VIxOZCArKq57f8w=\r\n\r\n\r\n--===============8384162589281376436==--\r\n"
+ headers:
+ Content-Length:
+ - '1284'
+ Content-Type:
+ - multipart/mixed; boundary================8384162589281376436==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 335f2cfe-e56d-11e9-8b67-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_3773e08a-4ca7-48ed-8a17-b8f3e4587693\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 4d079d02-201e-006f-4479-7975ac1e00d4\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_3773e08a-4ca7-48ed-8a17-b8f3e4587693\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 4d079d02-201e-006f-4479-7975ac1e00d6\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_3773e08a-4ca7-48ed-8a17-b8f3e4587693\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 4d079d02-201e-006f-4479-7975ac1e00d7\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_3773e08a-4ca7-48ed-8a17-b8f3e4587693--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_3773e08a-4ca7-48ed-8a17-b8f3e4587693
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: 4d079d02-201e-006f-4479-7975ac000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 3370a074-e56d-11e9-97be-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Accept-Ranges
+ : bytes
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '11'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/octet-stream
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:37 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791172CC4B3"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier: Cool
+ x-ms-access-tier-change-time: Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-blob-type: BlockBlob
+ x-ms-creation-time: Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-lease-state: available
+ x-ms-lease-status: unlocked
+ x-ms-request-id: 4d079d15-201e-006f-5379-7975ac000000
+ x-ms-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: "--===============7887429700725587355==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /container3d7c19c7/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id: 33753486-e56d-11e9-ac79-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:XlGV2pwHKZ3Hg9KU4oEVkF+mI9W3OKMdof+MUpG9o0s=\r\n\r\n\r\n--===============7887429700725587355==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /container3d7c19c7/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 33753487-e56d-11e9-86cb-1831bf6ae40e\r\nAuthorization: SharedKey storagename:LB/lqbwvfs2uQJznVaKaGU1qvoLnhQwNo3kKrMephTA=\r\n\r\n\r\n--===============7887429700725587355==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /container3d7c19c7/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:38 GMT\r\nx-ms-client-request-id:
+ 33753488-e56d-11e9-aac5-1831bf6ae40e\r\nAuthorization: SharedKey storagename:fa+vsvA91rRiFZVC+TjzGkOW5wF0JeTnWkEOJy7LF48=\r\n\r\n\r\n--===============7887429700725587355==--\r\n"
+ headers:
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================7887429700725587355==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 33755ba6-e56d-11e9-9b92-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_897df75a-6226-4fd4-9055-18ca7f162434\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 5c3c0e4c-101e-0064-2d79-798ec71e3e2d\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_897df75a-6226-4fd4-9055-18ca7f162434\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 5c3c0e4c-101e-0064-2d79-798ec71e3e2f\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_897df75a-6226-4fd4-9055-18ca7f162434\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: 5c3c0e4c-101e-0064-2d79-798ec71e3e30\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_897df75a-6226-4fd4-9055-18ca7f162434--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_897df75a-6226-4fd4-9055-18ca7f162434
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: 5c3c0e4c-101e-0064-2d79-798ec7000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 3387b018-e56d-11e9-9dea-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791176A4362"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 5c3c0e5e-101e-0064-3f79-798ec7000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 338d3aa6-e56d-11e9-a062-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob2
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D7479117700FA4"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 5c3c0e73-101e-0064-5379-798ec7000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob2
+ - ''
+ - ''
+- request:
+ body: hello world
+ headers:
+ Content-Length:
+ - '11'
+ Content-Type:
+ - application/octet-stream
+ If-None-Match:
+ - '*'
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-blob-type:
+ - BlockBlob
+ x-ms-client-request-id:
+ - 3392f6c0-e56d-11e9-bafd-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: PUT
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob3
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '0'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D747911776514E"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-content-crc64: vo7q9sPVKY0=
+ x-ms-request-id: 5c3c0e8c-101e-0064-6b79-798ec7000000
+ x-ms-request-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 201
+ message: Created
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob3
+ - ''
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 33986614-e56d-11e9-8a77-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Accept-Ranges
+ : bytes
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '11'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/octet-stream
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791176A4362"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier: Hot
+ x-ms-access-tier-inferred: 'true'
+ x-ms-blob-type: BlockBlob
+ x-ms-creation-time: Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-lease-state: available
+ x-ms-lease-status: unlocked
+ x-ms-request-id: 5c3c0e9a-101e-0064-7879-798ec7000000
+ x-ms-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: "--===============5308695583842449546==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nPUT /container3d7c19c7/blob1?comp=tier HTTP/1.1\r\nContent-Length:
+ 0\r\nx-ms-access-tier: Hot\r\nx-ms-date: Wed, 02 Oct 2019 23:34:39 GMT\r\nx-ms-client-request-id:
+ 339d5392-e56d-11e9-bdea-1831bf6ae40e\r\nAuthorization: SharedKey storagename:F8yhqZPmXO7EmiNQsZqPDblUYl2LSr/wt4JsJca8Bkw=\r\n\r\n\r\n--===============5308695583842449546==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nPUT
+ /container3d7c19c7/blob2?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Hot\r\nx-ms-date: Wed, 02 Oct 2019 23:34:39 GMT\r\nx-ms-client-request-id: 339d5393-e56d-11e9-8c80-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:jS+sQ29jp/GPf4SIiyCib+NVcI9R9fcaHs8seL/csLw=\r\n\r\n\r\n--===============5308695583842449546==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nPUT
+ /container3d7c19c7/blob3?comp=tier HTTP/1.1\r\nContent-Length: 0\r\nx-ms-access-tier:
+ Hot\r\nx-ms-date: Wed, 02 Oct 2019 23:34:39 GMT\r\nx-ms-client-request-id: 339d7ae8-e56d-11e9-8a88-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:zbgDbDKApE1bOVrD67DNARCB6ADMz371RZcEXpwRPI8=\r\n\r\n\r\n--===============5308695583842449546==--\r\n"
+ headers:
+ Content-Length:
+ - '1281'
+ Content-Type:
+ - multipart/mixed; boundary================5308695583842449546==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 339da1b8-e56d-11e9-a989-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_55bf2fbc-6cf3-43b3-b7f7-6b3e79f1a866\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 88f6ede9-901e-009e-4279-796c811e4a8b\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_55bf2fbc-6cf3-43b3-b7f7-6b3e79f1a866\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 88f6ede9-901e-009e-4279-796c811e4a8d\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_55bf2fbc-6cf3-43b3-b7f7-6b3e79f1a866\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
+ 88f6ede9-901e-009e-4279-796c811e4a8e\r\nx-ms-version: 2019-02-02\r\nServer:
+ Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_55bf2fbc-6cf3-43b3-b7f7-6b3e79f1a866--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_55bf2fbc-6cf3-43b3-b7f7-6b3e79f1a866
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: 88f6ede9-901e-009e-4279-796c81000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+- request:
+ body: null
+ headers:
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 33af96ba-e56d-11e9-b793-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: HEAD
+ uri: https://storagename.blob.core.windows.net/container3d7c19c7/blob1
+ response:
+ body:
+ string: ''
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Accept-Ranges
+ : bytes
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Length
+ : '11'
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Md5
+ : XrY7u+Ae7tCTyyK7j1rNww==
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : application/octet-stream
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Etag
+ : '"0x8D74791176A4362"'
+ ? !!python/object/new:multidict._istr.istr
+ - Last-Modified
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ x-ms-access-tier: Hot
+ x-ms-access-tier-change-time: Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-blob-type: BlockBlob
+ x-ms-creation-time: Wed, 02 Oct 2019 23:34:38 GMT
+ x-ms-lease-state: available
+ x-ms-lease-status: unlocked
+ x-ms-request-id: 88f6edfc-901e-009e-5379-796c81000000
+ x-ms-server-encrypted: 'true'
+ x-ms-version: '2019-02-02'
+ status:
+ code: 200
+ message: OK
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /container3d7c19c7/blob1
+ - ''
+ - ''
+- request:
+ body: "--===============7945161974409073757==\r\nContent-Type: application/http\r\nContent-Transfer-Encoding:
+ binary\r\nContent-ID: 0\r\n\r\nDELETE /container3d7c19c7/blob1? HTTP/1.1\r\nx-ms-date:
+ Wed, 02 Oct 2019 23:34:39 GMT\r\nx-ms-client-request-id: 33b48407-e56d-11e9-b0f2-1831bf6ae40e\r\nAuthorization:
+ SharedKey storagename:/a55a5lsjdYZH/P4BP8+lIEVg7081pVLBbc6PpOeT/A=\r\n\r\n\r\n--===============7945161974409073757==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 1\r\n\r\nDELETE
+ /container3d7c19c7/blob2? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:39 GMT\r\nx-ms-client-request-id:
+ 33b48406-e56d-11e9-a2f1-1831bf6ae40e\r\nAuthorization: SharedKey storagename:hElc6IUrPeXujnB6wgiYK0sNnswHh5tCFsVJs7CN6DM=\r\n\r\n\r\n--===============7945161974409073757==\r\nContent-Type:
+ application/http\r\nContent-Transfer-Encoding: binary\r\nContent-ID: 2\r\n\r\nDELETE
+ /container3d7c19c7/blob3? HTTP/1.1\r\nx-ms-date: Wed, 02 Oct 2019 23:34:39 GMT\r\nx-ms-client-request-id:
+ 33b48408-e56d-11e9-ac61-1831bf6ae40e\r\nAuthorization: SharedKey storagename:3PdTre1M5TkyIu9t5eKepJ96YdCN4oJQKGVoqs0gPyM=\r\n\r\n\r\n--===============7945161974409073757==--\r\n"
+ headers:
+ Content-Length:
+ - '1137'
+ Content-Type:
+ - multipart/mixed; boundary================7945161974409073757==
+ User-Agent:
+ - azsdk-python-storage-blob/12.0.0b4 Python/3.6.3 (Windows-10-10.0.18362-SP0)
+ x-ms-client-request-id:
+ - 33b4d222-e56d-11e9-a947-1831bf6ae40e
+ x-ms-date:
+ - Wed, 02 Oct 2019 23:34:39 GMT
+ x-ms-version:
+ - '2019-02-02'
+ method: POST
+ uri: https://storagename.blob.core.windows.net/?comp=batch
+ response:
+ body:
+ string: "--batchresponse_9d6d9a0c-eba6-4b69-966f-c5a214183f04\r\nContent-Type:
+ application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: ea41c276-901e-0055-5b79-796fd41ed228\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_9d6d9a0c-eba6-4b69-966f-c5a214183f04\r\nContent-Type:
+ application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: ea41c276-901e-0055-5b79-796fd41ed22a\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_9d6d9a0c-eba6-4b69-966f-c5a214183f04\r\nContent-Type:
+ application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-delete-type-permanent:
+ true\r\nx-ms-request-id: ea41c276-901e-0055-5b79-796fd41ed22b\r\nx-ms-version:
+ 2019-02-02\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_9d6d9a0c-eba6-4b69-966f-c5a214183f04--"
+ headers:
+ ? !!python/object/new:multidict._istr.istr
+ - Content-Type
+ : multipart/mixed; boundary=batchresponse_9d6d9a0c-eba6-4b69-966f-c5a214183f04
+ ? !!python/object/new:multidict._istr.istr
+ - Date
+ : Wed, 02 Oct 2019 23:34:38 GMT
+ ? !!python/object/new:multidict._istr.istr
+ - Server
+ : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
+ ? !!python/object/new:multidict._istr.istr
+ - Transfer-Encoding
+ : chunked
+ x-ms-request-id: ea41c276-901e-0055-5b79-796fd4000000
+ x-ms-version: '2019-02-02'
+ status:
+ code: 202
+ message: Accepted
+ url: !!python/object/new:yarl.URL
+ state: !!python/tuple
+ - !!python/object/new:urllib.parse.SplitResult
+ - https
+ - lmazueltracingtest.blob.core.windows.net
+ - /
+ - comp=batch
+ - ''
+version: 1
diff --git a/sdk/storage/azure-storage-blob/tests/test_container.py b/sdk/storage/azure-storage-blob/tests/test_container.py
index 1e02d20e4b4a..cf707fe22095 100644
--- a/sdk/storage/azure-storage-blob/tests/test_container.py
+++ b/sdk/storage/azure-storage-blob/tests/test_container.py
@@ -7,6 +7,8 @@
# --------------------------------------------------------------------------
import pytest
import unittest
+import re
+import sys
from dateutil.tz import tzutc
import requests
@@ -21,12 +23,16 @@
ContainerPermissions,
PublicAccess,
ContainerPermissions,
- AccessPolicy
+ AccessPolicy,
+ StandardBlobTier,
+ PremiumPageBlobTier
)
from azure.identity import ClientSecretCredential
from testcase import StorageTestCase, TestMode, record, LogCaptured
+import pytest
+
#------------------------------------------------------------------------------
TEST_CONTAINER_PREFIX = 'container'
#------------------------------------------------------------------------------
@@ -862,7 +868,7 @@ def test_list_blobs_with_include_snapshots(self):
@record
def test_list_blobs_with_include_metadata(self):
# Arrange
-
+
container = self._create_container()
data = b'hello world'
blob1 = container.get_blob_client('blob1')
@@ -961,6 +967,165 @@ def test_list_blobs_with_delimiter(self):
self.assertNamedItemInContainer(resp, 'b/')
self.assertNamedItemInContainer(resp, 'blob4')
+ @pytest.mark.skipif(sys.version_info < (3, 0), reason="Batch not supported on Python 2.7")
+ @record
+ def test_delete_blobs_simple(self):
+ # Arrange
+ container = self._create_container()
+ data = b'hello world'
+
+ try:
+ container.get_blob_client('blob1').upload_blob(data)
+ container.get_blob_client('blob2').upload_blob(data)
+ container.get_blob_client('blob3').upload_blob(data)
+ except:
+ pass
+
+ # Act
+ response = container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+ assert len(response) == 3
+ assert response[0].status_code == 202
+ assert response[1].status_code == 202
+ assert response[2].status_code == 202
+
+ @pytest.mark.skipif(sys.version_info < (3, 0), reason="Batch not supported on Python 2.7")
+ @record
+ def test_delete_blobs_snapshot(self):
+ # Arrange
+ container = self._create_container()
+ data = b'hello world'
+
+ try:
+ blob1_client = container.get_blob_client('blob1')
+ blob1_client.upload_blob(data)
+ blob1_client.create_snapshot()
+ container.get_blob_client('blob2').upload_blob(data)
+ container.get_blob_client('blob3').upload_blob(data)
+ except:
+ pass
+ blobs = list(container.list_blobs(include='snapshots'))
+ assert len(blobs) == 4 # 3 blobs + 1 snapshot
+
+ # Act
+ response = container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ delete_snapshots='only'
+ )
+ assert len(response) == 3
+ assert response[0].status_code == 202
+ assert response[1].status_code == 404 # There was no snapshot
+ assert response[2].status_code == 404 # There was no snapshot
+
+ blobs = list(container.list_blobs(include='snapshots'))
+ assert len(blobs) == 3 # 3 blobs
+
+ @pytest.mark.skipif(sys.version_info < (3, 0), reason="Batch not supported on Python 2.7")
+ @record
+ def test_standard_blob_tier_set_tier_api_batch(self):
+ container = self._create_container()
+ tiers = [StandardBlobTier.Archive, StandardBlobTier.Cool, StandardBlobTier.Hot]
+
+ response = container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+
+ for tier in tiers:
+ blob = container.get_blob_client('blob1')
+ data = b'hello world'
+ blob.upload_blob(data)
+ container.get_blob_client('blob2').upload_blob(data)
+ container.get_blob_client('blob3').upload_blob(data)
+
+ blob_ref = blob.get_blob_properties()
+ assert blob_ref.blob_tier is not None
+ assert blob_ref.blob_tier_inferred
+ assert blob_ref.blob_tier_change_time is None
+
+ parts = container.set_standard_blob_tier_blobs(
+ tier,
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+
+ parts = list(parts)
+ assert len(parts) == 3
+
+ assert parts[0].status_code in [200, 202]
+ assert parts[1].status_code in [200, 202]
+ assert parts[2].status_code in [200, 202]
+
+ blob_ref2 = blob.get_blob_properties()
+ assert tier == blob_ref2.blob_tier
+ assert not blob_ref2.blob_tier_inferred
+ assert blob_ref2.blob_tier_change_time is not None
+
+ response = container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+
+ @pytest.mark.skip(reason="Wasn't able to get premium account with batch enabled")
+ # once we have premium tests, still we don't want to test Py 2.7
+ # @pytest.mark.skipif(sys.version_info < (3, 0), reason="Batch not supported on Python 2.7")
+ @record
+ def test_premium_tier_set_tier_api_batch(self):
+ url = self._get_premium_account_url()
+ credential = self._get_premium_shared_key_credential()
+ pbs = BlobServiceClient(url, credential=credential)
+
+ try:
+ container_name = self.get_resource_name('utpremiumcontainer')
+ container = pbs.get_container_client(container_name)
+
+ if not self.is_playback():
+ try:
+ container.create_container()
+ except ResourceExistsError:
+ pass
+
+ pblob = container.get_blob_client('blob1')
+ pblob.create_page_blob(1024)
+ container.get_blob_client('blob2').create_page_blob(1024)
+ container.get_blob_client('blob3').create_page_blob(1024)
+
+ blob_ref = pblob.get_blob_properties()
+ assert PremiumPageBlobTier.P10 == blob_ref.blob_tier
+ assert blob_ref.blob_tier is not None
+ assert blob_ref.blob_tier_inferred
+
+ parts = container.set_premium_page_blob_tier_blobs(
+ PremiumPageBlobTier.P50,
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+
+ parts = list(parts)
+ assert len(parts) == 3
+
+ assert parts[0].status_code in [200, 202]
+ assert parts[1].status_code in [200, 202]
+ assert parts[2].status_code in [200, 202]
+
+
+ blob_ref2 = pblob.get_blob_properties()
+ assert PremiumPageBlobTier.P50 == blob_ref2.blob_tier
+ assert not blob_ref2.blob_tier_inferred
+
+ finally:
+ container.delete_container()
+
+
@record
def test_walk_blobs_with_delimiter(self):
# Arrange
@@ -990,7 +1155,7 @@ def recursive_walk(prefix):
@record
def test_list_blobs_with_include_multiple(self):
# Arrange
-
+
container = self._create_container()
data = b'hello world'
blob1 = container.get_blob_client('blob1')
diff --git a/sdk/storage/azure-storage-blob/tests/test_container_async.py b/sdk/storage/azure-storage-blob/tests/test_container_async.py
index 212cec72043a..3f511f8e60bc 100644
--- a/sdk/storage/azure-storage-blob/tests/test_container_async.py
+++ b/sdk/storage/azure-storage-blob/tests/test_container_async.py
@@ -29,7 +29,9 @@
BlobType,
ContentSettings,
BlobProperties,
- ContainerPermissions
+ ContainerPermissions,
+ StandardBlobTier,
+ PremiumPageBlobTier
)
from testcase import StorageTestCase, TestMode, record, LogCaptured
@@ -38,6 +40,13 @@
TEST_CONTAINER_PREFIX = 'container'
#------------------------------------------------------------------------------
+async def _to_list(async_iterator):
+ result = []
+ async for item in async_iterator:
+ result.append(item)
+ return result
+
+
class AiohttpTestTransport(AioHttpTransport):
"""Workaround to vcrpy bug: https://github.com/kevin1024/vcrpy/pull/461
"""
@@ -95,7 +104,7 @@ async def _create_container(self, prefix=TEST_CONTAINER_PREFIX):
return container
#--Test cases for containers -----------------------------------------
-
+
async def _test_create_container(self):
# Arrange
container_name = self._get_container_reference()
@@ -1192,6 +1201,173 @@ async def _test_list_blobs_with_delimiter(self):
self.assertNamedItemInContainer(resp, 'b/')
self.assertNamedItemInContainer(resp, 'blob4')
+ @record
+ def test_delete_blobs_simple(self):
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(self._test_delete_blobs_simple())
+
+ async def _test_delete_blobs_simple(self):
+ # Arrange
+ container = await self._create_container()
+ data = b'hello world'
+
+ try:
+ await container.get_blob_client('blob1').upload_blob(data)
+ await container.get_blob_client('blob2').upload_blob(data)
+ await container.get_blob_client('blob3').upload_blob(data)
+ except:
+ pass
+
+ # Act
+ response = await _to_list(await container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ ))
+ assert len(response) == 3
+ assert response[0].status_code == 202
+ assert response[1].status_code == 202
+ assert response[2].status_code == 202
+
+ @record
+ def test_delete_blobs_snapshot(self):
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(self._test_delete_blobs_snapshot())
+
+ async def _test_delete_blobs_snapshot(self):
+ # Arrange
+ container = await self._create_container()
+ data = b'hello world'
+
+ try:
+ blob1_client = container.get_blob_client('blob1')
+ await blob1_client.upload_blob(data)
+ await blob1_client.create_snapshot()
+ await container.get_blob_client('blob2').upload_blob(data)
+ await container.get_blob_client('blob3').upload_blob(data)
+ except:
+ pass
+ blobs = await _to_list(container.list_blobs(include='snapshots'))
+ assert len(blobs) == 4 # 3 blobs + 1 snapshot
+
+ # Act
+ response = await _to_list(await container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ delete_snapshots='only'
+ ))
+ assert len(response) == 3
+ assert response[0].status_code == 202
+ assert response[1].status_code == 404 # There was no snapshot
+ assert response[2].status_code == 404 # There was no snapshot
+
+ blobs = await _to_list(container.list_blobs(include='snapshots'))
+ assert len(blobs) == 3 # 3 blobs
+
+ @record
+ def test_standard_blob_tier_set_tier_api_batch(self):
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(self._test_standard_blob_tier_set_tier_api_batch())
+
+ async def _test_standard_blob_tier_set_tier_api_batch(self):
+ container = await self._create_container()
+ tiers = [StandardBlobTier.Archive, StandardBlobTier.Cool, StandardBlobTier.Hot]
+
+ for tier in tiers:
+ try:
+ blob = container.get_blob_client('blob1')
+ data = b'hello world'
+ await blob.upload_blob(data)
+ await container.get_blob_client('blob2').upload_blob(data)
+ await container.get_blob_client('blob3').upload_blob(data)
+
+ blob_ref = await blob.get_blob_properties()
+ assert blob_ref.blob_tier is not None
+ assert blob_ref.blob_tier_inferred
+ assert blob_ref.blob_tier_change_time is None
+
+ parts = await _to_list(await container.set_standard_blob_tier_blobs(
+ tier,
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ ))
+
+ assert len(parts) == 3
+
+ assert parts[0].status_code in [200, 202]
+ assert parts[1].status_code in [200, 202]
+ assert parts[2].status_code in [200, 202]
+
+ blob_ref2 = await blob.get_blob_properties()
+ assert tier == blob_ref2.blob_tier
+ assert not blob_ref2.blob_tier_inferred
+ assert blob_ref2.blob_tier_change_time is not None
+
+ finally:
+ await container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+
+ @pytest.mark.skip(reason="Wasn't able to get premium account with batch enabled")
+ @record
+ def test_premium_tier_set_tier_api_batch(self):
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(self._test_premium_tier_set_tier_api_batch())
+
+ async def _test_premium_tier_set_tier_api_batch(self):
+ url = self._get_premium_account_url()
+ credential = self._get_premium_shared_key_credential()
+ pbs = BlobServiceClient(url, credential=credential)
+
+ try:
+ container_name = self.get_resource_name('utpremiumcontainer')
+ container = pbs.get_container_client(container_name)
+
+ if not self.is_playback():
+ try:
+ await container.create_container()
+ except ResourceExistsError:
+ pass
+
+ pblob = container.get_blob_client('blob1')
+ await pblob.create_page_blob(1024)
+ await container.get_blob_client('blob2').create_page_blob(1024)
+ await container.get_blob_client('blob3').create_page_blob(1024)
+
+ blob_ref = await pblob.get_blob_properties()
+ assert PremiumPageBlobTier.P10 == blob_ref.blob_tier
+ assert blob_ref.blob_tier is not None
+ assert blob_ref.blob_tier_inferred
+
+ parts = await _to_list(container.set_premium_page_blob_tier_blobs(
+ PremiumPageBlobTier.P50,
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ ))
+
+ assert len(parts) == 3
+
+ assert parts[0].status_code in [200, 202]
+ assert parts[1].status_code in [200, 202]
+ assert parts[2].status_code in [200, 202]
+
+
+ blob_ref2 = await pblob.get_blob_properties()
+ assert PremiumPageBlobTier.P50 == blob_ref2.blob_tier
+ assert not blob_ref2.blob_tier_inferred
+
+ finally:
+ await container.delete_blobs(
+ 'blob1',
+ 'blob2',
+ 'blob3',
+ )
+
@record
def test_list_blobs_with_delimiter(self):
loop = asyncio.get_event_loop()
diff --git a/sdk/storage/azure-storage-blob/tests/testcase.py b/sdk/storage/azure-storage-blob/tests/testcase.py
index 3304b2ed3638..5a171f0395ae 100644
--- a/sdk/storage/azure-storage-blob/tests/testcase.py
+++ b/sdk/storage/azure-storage-blob/tests/testcase.py
@@ -10,6 +10,7 @@
import inspect
import os
import os.path
+import re
import time
from unittest import SkipTest
@@ -348,6 +349,12 @@ def internal_scrub(key, val):
if body_str:
response['body']['string'] = self._scrub(body_str)
+ content_type = response.get('headers', {}).get('Content-Type', '')
+ if content_type:
+ content_type = (content_type[0] if isinstance(content_type, list) else content_type).lower()
+ if 'multipart/mixed' in content_type:
+ response['body']['string'] = re.sub("x-ms-client-request-id: [a-f0-9-]+\r\n", "", body_str.decode()).encode()
+
return response
def _scrub(self, val):
diff --git a/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client.py b/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client.py
index 226626d026e1..f784ac130cf9 100644
--- a/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client.py
+++ b/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client.py
@@ -26,6 +26,7 @@
import six
from azure.core import Configuration
+from azure.core.exceptions import HttpResponseError
from azure.core.pipeline import Pipeline
from azure.core.pipeline.transport import RequestsTransport
from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy
@@ -46,6 +47,8 @@
QueueMessagePolicy,
ExponentialRetry,
)
+from .._generated.models import StorageErrorException
+from .response_handlers import process_storage_error
_LOGGER = logging.getLogger(__name__)
@@ -147,11 +150,11 @@ def _format_query_string(self, sas_token, credential, snapshot=None, share_snaps
def _create_pipeline(self, credential, **kwargs):
# type: (Any, **Any) -> Tuple[Configuration, Pipeline]
- credential_policy = None
+ self._credential_policy = None
if hasattr(credential, "get_token"):
- credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
+ self._credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
elif isinstance(credential, SharedKeyCredentialPolicy):
- credential_policy = credential
+ self._credential_policy = credential
elif credential is not None:
raise TypeError("Unsupported credential: {}".format(credential))
@@ -169,7 +172,7 @@ def _create_pipeline(self, credential, **kwargs):
config.user_agent_policy,
StorageContentValidation(),
StorageRequestHook(**kwargs),
- credential_policy,
+ self._credential_policy,
ContentDecodePolicy(),
RedirectPolicy(**kwargs),
StorageHosts(hosts=self._hosts, **kwargs),
@@ -180,6 +183,38 @@ def _create_pipeline(self, credential, **kwargs):
]
return config, Pipeline(config.transport, policies=policies)
+ def _batch_send(
+ self, *reqs # type: HttpRequest
+ ):
+ """Given a series of request, do a Storage batch call.
+ """
+ request = self._client._client.post( # pylint: disable=protected-access
+ url='https://{}/?comp=batch'.format(self.primary_hostname),
+ headers={
+ 'x-ms-version': self._client._config.version # pylint: disable=protected-access
+ }
+ )
+
+ request.set_multipart_mixed(
+ *reqs,
+ policies=[
+ StorageHeadersPolicy(),
+ self._credential_policy
+ ]
+ )
+
+ pipeline_response = self._pipeline.run(
+ request,
+ )
+ response = pipeline_response.http_response
+
+ try:
+ if response.status_code not in [202]:
+ raise HttpResponseError(response=response)
+ return response.parts()
+ except StorageErrorException as error:
+ process_storage_error(error)
+
def format_shared_key_credential(account, credential):
if isinstance(credential, six.string_types):
diff --git a/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client_async.py b/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client_async.py
index 19a27ba24eb0..bdcaba15d86f 100644
--- a/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client_async.py
+++ b/sdk/storage/azure-storage-file/azure/storage/file/_shared/base_client_async.py
@@ -11,6 +11,7 @@
import logging
from azure.core.pipeline import AsyncPipeline
+from azure.core.exceptions import HttpResponseError
from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy
from azure.core.pipeline.policies import (
ContentDecodePolicy,
@@ -24,9 +25,13 @@
StorageContentValidation,
StorageRequestHook,
StorageHosts,
+ StorageHeadersPolicy,
QueueMessagePolicy)
from .policies_async import AsyncStorageResponseHook
+from .._generated.models import StorageErrorException
+from .response_handlers import process_storage_error
+
if TYPE_CHECKING:
from azure.core.pipeline import Pipeline
from azure.core import Configuration
@@ -50,11 +55,11 @@ async def __aexit__(self, *args):
def _create_pipeline(self, credential, **kwargs):
# type: (Any, **Any) -> Tuple[Configuration, Pipeline]
- credential_policy = None
+ self._credential_policy = None
if hasattr(credential, 'get_token'):
- credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
+ self._credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
elif isinstance(credential, SharedKeyCredentialPolicy):
- credential_policy = credential
+ self._credential_policy = credential
elif credential is not None:
raise TypeError("Unsupported credential: {}".format(credential))
config = kwargs.get('_configuration') or create_configuration(**kwargs)
@@ -75,7 +80,7 @@ def _create_pipeline(self, credential, **kwargs):
config.user_agent_policy,
StorageContentValidation(),
StorageRequestHook(**kwargs),
- credential_policy,
+ self._credential_policy,
ContentDecodePolicy(),
AsyncRedirectPolicy(**kwargs),
StorageHosts(hosts=self._hosts, **kwargs), # type: ignore
@@ -85,3 +90,35 @@ def _create_pipeline(self, credential, **kwargs):
DistributedTracingPolicy(),
]
return config, AsyncPipeline(config.transport, policies=policies)
+
+ async def _batch_send(
+ self, *reqs # type: HttpRequest
+ ):
+ """Given a series of request, do a Storage batch call.
+ """
+ request = self._client._client.post( # pylint: disable=protected-access
+ url='https://{}/?comp=batch'.format(self.primary_hostname),
+ headers={
+ 'x-ms-version': self._client._config.version # pylint: disable=protected-access
+ }
+ )
+
+ request.set_multipart_mixed(
+ *reqs,
+ policies=[
+ StorageHeadersPolicy(),
+ self._credential_policy
+ ]
+ )
+
+ pipeline_response = await self._pipeline.run(
+ request,
+ )
+ response = pipeline_response.http_response
+
+ try:
+ if response.status_code not in [202]:
+ raise HttpResponseError(response=response)
+ return response.parts() # Return an AsyncIterator
+ except StorageErrorException as error:
+ process_storage_error(error)
diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py
index 226626d026e1..f784ac130cf9 100644
--- a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py
+++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client.py
@@ -26,6 +26,7 @@
import six
from azure.core import Configuration
+from azure.core.exceptions import HttpResponseError
from azure.core.pipeline import Pipeline
from azure.core.pipeline.transport import RequestsTransport
from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy
@@ -46,6 +47,8 @@
QueueMessagePolicy,
ExponentialRetry,
)
+from .._generated.models import StorageErrorException
+from .response_handlers import process_storage_error
_LOGGER = logging.getLogger(__name__)
@@ -147,11 +150,11 @@ def _format_query_string(self, sas_token, credential, snapshot=None, share_snaps
def _create_pipeline(self, credential, **kwargs):
# type: (Any, **Any) -> Tuple[Configuration, Pipeline]
- credential_policy = None
+ self._credential_policy = None
if hasattr(credential, "get_token"):
- credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
+ self._credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
elif isinstance(credential, SharedKeyCredentialPolicy):
- credential_policy = credential
+ self._credential_policy = credential
elif credential is not None:
raise TypeError("Unsupported credential: {}".format(credential))
@@ -169,7 +172,7 @@ def _create_pipeline(self, credential, **kwargs):
config.user_agent_policy,
StorageContentValidation(),
StorageRequestHook(**kwargs),
- credential_policy,
+ self._credential_policy,
ContentDecodePolicy(),
RedirectPolicy(**kwargs),
StorageHosts(hosts=self._hosts, **kwargs),
@@ -180,6 +183,38 @@ def _create_pipeline(self, credential, **kwargs):
]
return config, Pipeline(config.transport, policies=policies)
+ def _batch_send(
+ self, *reqs # type: HttpRequest
+ ):
+ """Given a series of request, do a Storage batch call.
+ """
+ request = self._client._client.post( # pylint: disable=protected-access
+ url='https://{}/?comp=batch'.format(self.primary_hostname),
+ headers={
+ 'x-ms-version': self._client._config.version # pylint: disable=protected-access
+ }
+ )
+
+ request.set_multipart_mixed(
+ *reqs,
+ policies=[
+ StorageHeadersPolicy(),
+ self._credential_policy
+ ]
+ )
+
+ pipeline_response = self._pipeline.run(
+ request,
+ )
+ response = pipeline_response.http_response
+
+ try:
+ if response.status_code not in [202]:
+ raise HttpResponseError(response=response)
+ return response.parts()
+ except StorageErrorException as error:
+ process_storage_error(error)
+
def format_shared_key_credential(account, credential):
if isinstance(credential, six.string_types):
diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client_async.py
index 19a27ba24eb0..bdcaba15d86f 100644
--- a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client_async.py
+++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/base_client_async.py
@@ -11,6 +11,7 @@
import logging
from azure.core.pipeline import AsyncPipeline
+from azure.core.exceptions import HttpResponseError
from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy
from azure.core.pipeline.policies import (
ContentDecodePolicy,
@@ -24,9 +25,13 @@
StorageContentValidation,
StorageRequestHook,
StorageHosts,
+ StorageHeadersPolicy,
QueueMessagePolicy)
from .policies_async import AsyncStorageResponseHook
+from .._generated.models import StorageErrorException
+from .response_handlers import process_storage_error
+
if TYPE_CHECKING:
from azure.core.pipeline import Pipeline
from azure.core import Configuration
@@ -50,11 +55,11 @@ async def __aexit__(self, *args):
def _create_pipeline(self, credential, **kwargs):
# type: (Any, **Any) -> Tuple[Configuration, Pipeline]
- credential_policy = None
+ self._credential_policy = None
if hasattr(credential, 'get_token'):
- credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
+ self._credential_policy = AsyncBearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE)
elif isinstance(credential, SharedKeyCredentialPolicy):
- credential_policy = credential
+ self._credential_policy = credential
elif credential is not None:
raise TypeError("Unsupported credential: {}".format(credential))
config = kwargs.get('_configuration') or create_configuration(**kwargs)
@@ -75,7 +80,7 @@ def _create_pipeline(self, credential, **kwargs):
config.user_agent_policy,
StorageContentValidation(),
StorageRequestHook(**kwargs),
- credential_policy,
+ self._credential_policy,
ContentDecodePolicy(),
AsyncRedirectPolicy(**kwargs),
StorageHosts(hosts=self._hosts, **kwargs), # type: ignore
@@ -85,3 +90,35 @@ def _create_pipeline(self, credential, **kwargs):
DistributedTracingPolicy(),
]
return config, AsyncPipeline(config.transport, policies=policies)
+
+ async def _batch_send(
+ self, *reqs # type: HttpRequest
+ ):
+ """Given a series of request, do a Storage batch call.
+ """
+ request = self._client._client.post( # pylint: disable=protected-access
+ url='https://{}/?comp=batch'.format(self.primary_hostname),
+ headers={
+ 'x-ms-version': self._client._config.version # pylint: disable=protected-access
+ }
+ )
+
+ request.set_multipart_mixed(
+ *reqs,
+ policies=[
+ StorageHeadersPolicy(),
+ self._credential_policy
+ ]
+ )
+
+ pipeline_response = await self._pipeline.run(
+ request,
+ )
+ response = pipeline_response.http_response
+
+ try:
+ if response.status_code not in [202]:
+ raise HttpResponseError(response=response)
+ return response.parts() # Return an AsyncIterator
+ except StorageErrorException as error:
+ process_storage_error(error)