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 fd3c4a68beda..ce4aadaf6a82 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 @@ -2372,10 +2372,12 @@ def set_premium_page_blob_tier(self, premium_page_blob_tier, **kwargs): def _set_blob_tags_options(self, tags=None, **kwargs): # type: (Optional[Dict[str, str]], **Any) -> Dict[str, Any] tags = serialize_blob_tags(tags) + access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) options = { 'tags': tags, + 'lease_access_conditions': access_conditions, 'modified_access_conditions': mod_conditions, 'cls': return_response_headers} options.update(kwargs) @@ -2410,6 +2412,10 @@ def set_blob_tags(self, tags=None, **kwargs): blob. :keyword str if_tags_match_condition: Specify a SQL where clause on blob tags to operate only on destination blob with a matching value. + :keyword lease: + Required if the blob has an active lease. Value can be a BlobLeaseClient object + or the lease ID as a string. + :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :returns: Blob-updated property dict (Etag and last modified) @@ -2423,11 +2429,13 @@ def set_blob_tags(self, tags=None, **kwargs): def _get_blob_tags_options(self, **kwargs): # type: (**Any) -> Dict[str, str] + access_conditions = get_access_conditions(kwargs.pop('lease', None)) mod_conditions = get_modify_conditions(kwargs) options = { 'version_id': kwargs.pop('version_id', None), 'snapshot': self.snapshot, + 'lease_access_conditions': access_conditions, 'modified_access_conditions': mod_conditions, 'timeout': kwargs.pop('timeout', None), 'cls': return_headers_and_deserialized} @@ -2446,6 +2454,10 @@ def get_blob_tags(self, **kwargs): value that, when present, specifies the version of the blob to add tags to. :keyword str if_tags_match_condition: Specify a SQL where clause on blob tags to operate only on destination blob with a matching value. + :keyword lease: + Required if the blob has an active lease. Value can be a BlobLeaseClient object + or the lease ID as a string. + :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :returns: Key value pairs of blob tags. diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_service_client.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_service_client.py index 1ab68c1f0fe5..b10d626fca5c 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_service_client.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_blob_service_client.py @@ -28,7 +28,8 @@ from ._generated.models import StorageErrorException, StorageServiceProperties, KeyInfo from ._container_client import ContainerClient from ._blob_client import BlobClient -from ._models import ContainerPropertiesPaged, FilteredBlobPaged +from ._models import ContainerPropertiesPaged +from ._list_blobs_helper import FilteredBlobPaged from ._serialize import get_api_version from ._deserialize import service_stats_deserialize, service_properties_deserialize @@ -47,6 +48,7 @@ CorsRule, RetentionPolicy, StaticWebsite, + FilteredBlob ) diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py index 4d082fec96fc..a660b109ca38 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_list_blobs_helper.py @@ -6,9 +6,9 @@ # -------------------------------------------------------------------------- from azure.core.paging import PageIterator, ItemPaged -from azure.storage.blob._deserialize import get_blob_properties_from_generated_code -from ._generated.models import StorageErrorException, BlobItemInternal, BlobPrefix as GenBlobPrefix -from ._models import BlobProperties +from ._deserialize import get_blob_properties_from_generated_code, parse_tags +from ._generated.models import StorageErrorException, BlobItemInternal, BlobPrefix as GenBlobPrefix, FilterBlobItem +from ._models import BlobProperties, FilteredBlob from ._shared.models import DictMixin from ._shared.response_handlers import return_context_and_deserialized, process_storage_error @@ -164,3 +164,72 @@ def __init__(self, *args, **kwargs): self.container = kwargs.get('container') self.delimiter = kwargs.get('delimiter') self.location_mode = kwargs.get('location_mode') + + +class FilteredBlobPaged(PageIterator): + """An Iterable of Blob properties. + + :ivar str service_endpoint: The service URL. + :ivar str prefix: A blob name prefix being used to filter the list. + :ivar str marker: The continuation token of the current page of results. + :ivar int results_per_page: The maximum number of results retrieved per API call. + :ivar str continuation_token: The continuation token to retrieve the next page of results. + :ivar str location_mode: The location mode being used to list results. The available + options include "primary" and "secondary". + :ivar current_page: The current page of listed results. + :vartype current_page: list(~azure.storage.blob.FilteredBlob) + :ivar str container: The container that the blobs are listed from. + + :param callable command: Function to retrieve the next page of items. + :param str container: The name of the container. + :param int results_per_page: The maximum number of blobs to retrieve per + call. + :param str continuation_token: An opaque continuation token. + :param location_mode: Specifies the location the request should be sent to. + This mode only applies for RA-GRS accounts which allow secondary read access. + Options include 'primary' or 'secondary'. + """ + def __init__( + self, command, + container=None, + results_per_page=None, + continuation_token=None, + location_mode=None): + super(FilteredBlobPaged, self).__init__( + get_next=self._get_next_cb, + extract_data=self._extract_data_cb, + continuation_token=continuation_token or "" + ) + self._command = command + self.service_endpoint = None + self.marker = continuation_token + self.results_per_page = results_per_page + self.container = container + self.current_page = None + self.location_mode = location_mode + + def _get_next_cb(self, continuation_token): + try: + return self._command( + marker=continuation_token or None, + maxresults=self.results_per_page, + cls=return_context_and_deserialized, + use_location=self.location_mode) + except StorageErrorException as error: + process_storage_error(error) + + def _extract_data_cb(self, get_next_return): + self.location_mode, self._response = get_next_return + self.service_endpoint = self._response.service_endpoint + self.marker = self._response.next_marker + self.current_page = [self._build_item(item) for item in self._response.blobs] + + return self._response.next_marker or None, self.current_page + + @staticmethod + def _build_item(item): + if isinstance(item, FilterBlobItem): + tags = parse_tags(item.tags) + blob = FilteredBlob(name=item.name, container_name=item.container_name, tags=tags) + return blob + return item diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py index c27fa9c02fc4..5fe44dcb2ece 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/_models.py @@ -9,7 +9,7 @@ from enum import Enum from azure.core.paging import PageIterator -from azure.storage.blob._generated.models import FilterBlobItem, ArrowField +from ._generated.models import ArrowField from ._shared import decode_base64_to_text from ._shared.response_handlers import return_context_and_deserialized, process_storage_error @@ -565,78 +565,13 @@ class FilteredBlob(DictMixin): :type name: str :ivar container_name: Container name. :type container_name: str + :ivar tags: Key value pairs of blob tags. + :type tags: Dict[str, str] """ def __init__(self, **kwargs): self.name = kwargs.get('name', None) self.container_name = kwargs.get('container_name', None) - - -class FilteredBlobPaged(PageIterator): - """An Iterable of Blob properties. - - :ivar str service_endpoint: The service URL. - :ivar str prefix: A blob name prefix being used to filter the list. - :ivar str marker: The continuation token of the current page of results. - :ivar int results_per_page: The maximum number of results retrieved per API call. - :ivar str continuation_token: The continuation token to retrieve the next page of results. - :ivar str location_mode: The location mode being used to list results. The available - options include "primary" and "secondary". - :ivar current_page: The current page of listed results. - :vartype current_page: list(~azure.storage.blob.FilteredBlob) - :ivar str container: The container that the blobs are listed from. - - :param callable command: Function to retrieve the next page of items. - :param str container: The name of the container. - :param int results_per_page: The maximum number of blobs to retrieve per - call. - :param str continuation_token: An opaque continuation token. - :param location_mode: Specifies the location the request should be sent to. - This mode only applies for RA-GRS accounts which allow secondary read access. - Options include 'primary' or 'secondary'. - """ - def __init__( - self, command, - container=None, - results_per_page=None, - continuation_token=None, - location_mode=None): - super(FilteredBlobPaged, self).__init__( - get_next=self._get_next_cb, - extract_data=self._extract_data_cb, - continuation_token=continuation_token or "" - ) - self._command = command - self.service_endpoint = None - self.marker = continuation_token - self.results_per_page = results_per_page - self.container = container - self.current_page = None - self.location_mode = location_mode - - def _get_next_cb(self, continuation_token): - try: - return self._command( - marker=continuation_token or None, - maxresults=self.results_per_page, - cls=return_context_and_deserialized, - use_location=self.location_mode) - except StorageErrorException as error: - process_storage_error(error) - - def _extract_data_cb(self, get_next_return): - self.location_mode, self._response = get_next_return - self.service_endpoint = self._response.service_endpoint - self.marker = self._response.next_marker - self.current_page = [self._build_item(item) for item in self._response.blobs] - - return self._response.next_marker or None, self.current_page - - @staticmethod - def _build_item(item): - if isinstance(item, FilterBlobItem): - blob = FilteredBlob(name=item.name, container_name=item.container_name) # pylint: disable=protected-access - return blob - return item + self.tags = kwargs.get('tags', None) class LeaseProperties(DictMixin): diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py index 6b08edcd2fe7..3568ba02f279 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_blob_client_async.py @@ -1527,6 +1527,10 @@ async def set_blob_tags(self, tags=None, **kwargs): :keyword str if_tags_match_condition: Specify a SQL where clause on blob tags to operate only on blob with a matching value. eg. "\"tagname\"='my tag'" + :keyword lease: + Required if the blob has an active lease. Value can be a BlobLeaseClient object + or the lease ID as a string. + :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :returns: Blob-updated property dict (Etag and last modified) @@ -1552,6 +1556,10 @@ async def get_blob_tags(self, **kwargs): :keyword str if_tags_match_condition: Specify a SQL where clause on blob tags to operate only on blob with a matching value. eg. "\"tagname\"='my tag'" + :keyword lease: + Required if the blob has an active lease. Value can be a BlobLeaseClient object + or the lease ID as a string. + :paramtype lease: ~azure.storage.blob.BlobLeaseClient or str :keyword int timeout: The timeout parameter is expressed in seconds. :returns: Key value pairs of blob tags. diff --git a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py index 3e54d03cc3b8..9b8bd9f2af72 100644 --- a/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py +++ b/sdk/storage/azure-storage-blob/azure/storage/blob/aio/_models.py @@ -7,6 +7,7 @@ # pylint: disable=super-init-not-called, too-many-lines from azure.core.async_paging import AsyncPageIterator +from .._deserialize import parse_tags from .._models import ContainerProperties, FilteredBlob from .._shared.response_handlers import return_context_and_deserialized, process_storage_error @@ -136,6 +137,7 @@ async def _extract_data_cb(self, get_next_return): @staticmethod def _build_item(item): if isinstance(item, FilterBlobItem): - blob = FilteredBlob(name=item.name, container_name=item.container_name) # pylint: disable=protected-access + tags = parse_tags(item.tags) + blob = FilteredBlob(name=item.name, container_name=item.container_name, tags=tags) return blob return item diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_filter_blobs.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_filter_blobs.yaml index 59ae949b576f..25ab5e6a1d9b 100644 --- a/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_filter_blobs.yaml +++ b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_filter_blobs.yaml @@ -11,32 +11,33 @@ interactions: Content-Length: - '0' User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:03:45 GMT + - Fri, 06 Nov 2020 19:43:26 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/containerd79a0d11?timeout=5&restype=container + uri: https://storagename.blob.core.windows.net/containerd79a0d11?timeout=5&restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:820fefb8-101e-0017-8075-b473c9000000\nTime:2020-11-06T19:43:26.7136424Z" headers: content-length: - - '0' + - '230' + content-type: + - application/xml date: - - Thu, 02 Jul 2020 22:03:45 GMT - etag: - - '"0x8D81ED3CB3980B2"' - last-modified: - - Thu, 02 Jul 2020 22:03:46 GMT + - Fri, 06 Nov 2020 19:43:26 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - ContainerAlreadyExists x-ms-version: - - '2019-12-12' + - '2020-04-08' status: - code: 201 - message: Created + code: 409 + message: The specified container already exists. - request: body: null headers: @@ -49,32 +50,33 @@ interactions: Content-Length: - '0' User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container1d79a0d11?restype=container + uri: https://storagename.blob.core.windows.net/container1d79a0d11?restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:820feff2-101e-0017-3575-b473c9000000\nTime:2020-11-06T19:43:26.7946995Z" headers: content-length: - - '0' + - '230' + content-type: + - application/xml date: - - Thu, 02 Jul 2020 22:03:46 GMT - etag: - - '"0x8D81ED3CB4717B8"' - last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - ContainerAlreadyExists x-ms-version: - - '2019-12-12' + - '2020-04-08' status: - code: 201 - message: Created + code: 409 + message: The specified container already exists. - request: body: null headers: @@ -87,32 +89,33 @@ interactions: Content-Length: - '0' User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container2d79a0d11?restype=container + uri: https://storagename.blob.core.windows.net/container2d79a0d11?restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:820ff013-101e-0017-5075-b473c9000000\nTime:2020-11-06T19:43:26.8517405Z" headers: content-length: - - '0' + - '230' + content-type: + - application/xml date: - - Thu, 02 Jul 2020 22:03:46 GMT - etag: - - '"0x8D81ED3CB5487AE"' - last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - ContainerAlreadyExists x-ms-version: - - '2019-12-12' + - '2020-04-08' status: - code: 201 - message: Created + code: 409 + message: The specified container already exists. - request: body: null headers: @@ -125,32 +128,33 @@ interactions: Content-Length: - '0' User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container3d79a0d11?restype=container + uri: https://storagename.blob.core.windows.net/container3d79a0d11?restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:820ff01c-101e-0017-5675-b473c9000000\nTime:2020-11-06T19:43:26.9087810Z" headers: content-length: - - '0' + - '230' + content-type: + - application/xml date: - - Thu, 02 Jul 2020 22:03:46 GMT - etag: - - '"0x8D81ED3CB68AF9D"' - last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - ContainerAlreadyExists x-ms-version: - - '2019-12-12' + - '2020-04-08' status: - code: 201 - message: Created + code: 409 + message: The specified container already exists. - request: body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa headers: @@ -165,17 +169,17 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/containerd79a0d11/blob1 + uri: https://storagename.blob.core.windows.net/containerd79a0d11/blob1 response: body: string: '' @@ -185,11 +189,11 @@ interactions: content-md5: - yaNM/IXZgmmMasifdgcavQ== date: - - Thu, 02 Jul 2020 22:03:46 GMT + - Fri, 06 Nov 2020 19:43:26 GMT etag: - - '"0x8D81ED3CB7B9C18"' + - '"0x8D8828C3B00FC83"' last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:26 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: @@ -197,7 +201,9 @@ interactions: x-ms-request-server-encrypted: - 'true' x-ms-version: - - '2019-12-12' + - '2020-04-08' + x-ms-version-id: + - '2020-11-06T19:43:26.9887891Z' status: code: 201 message: Created @@ -215,17 +221,17 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:27 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container1d79a0d11/blob2 + uri: https://storagename.blob.core.windows.net/container1d79a0d11/blob2 response: body: string: '' @@ -235,11 +241,11 @@ interactions: content-md5: - yaNM/IXZgmmMasifdgcavQ== date: - - Thu, 02 Jul 2020 22:03:46 GMT + - Fri, 06 Nov 2020 19:43:26 GMT etag: - - '"0x8D81ED3CB8B2F58"' + - '"0x8D8828C3B0BACE8"' last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:27 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: @@ -247,7 +253,9 @@ interactions: x-ms-request-server-encrypted: - 'true' x-ms-version: - - '2019-12-12' + - '2020-04-08' + x-ms-version-id: + - '2020-11-06T19:43:27.0588408Z' status: code: 201 message: Created @@ -265,17 +273,17 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:27 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container2d79a0d11/blob3 + uri: https://storagename.blob.core.windows.net/container2d79a0d11/blob3 response: body: string: '' @@ -285,11 +293,11 @@ interactions: content-md5: - yaNM/IXZgmmMasifdgcavQ== date: - - Thu, 02 Jul 2020 22:03:46 GMT + - Fri, 06 Nov 2020 19:43:26 GMT etag: - - '"0x8D81ED3CB991492"' + - '"0x8D8828C3B191CC5"' last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:27 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: @@ -297,7 +305,9 @@ interactions: x-ms-request-server-encrypted: - 'true' x-ms-version: - - '2019-12-12' + - '2020-04-08' + x-ms-version-id: + - '2020-11-06T19:43:27.1479018Z' status: code: 201 message: Created @@ -315,17 +325,17 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:27 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container3d79a0d11/blob4 + uri: https://storagename.blob.core.windows.net/container3d79a0d11/blob4 response: body: string: '' @@ -335,11 +345,11 @@ interactions: content-md5: - yaNM/IXZgmmMasifdgcavQ== date: - - Thu, 02 Jul 2020 22:03:46 GMT + - Fri, 06 Nov 2020 19:43:26 GMT etag: - - '"0x8D81ED3CBAB1941"' + - '"0x8D8828C3B270205"' last-modified: - - Thu, 02 Jul 2020 22:03:47 GMT + - Fri, 06 Nov 2020 19:43:27 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: @@ -347,7 +357,9 @@ interactions: x-ms-request-server-encrypted: - 'true' x-ms-version: - - '2019-12-12' + - '2020-04-08' + x-ms-version-id: + - '2020-11-06T19:43:27.2389673Z' status: code: 201 message: Created @@ -361,28 +373,31 @@ interactions: Connection: - keep-alive User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:06:12 GMT + - Fri, 06 Nov 2020 19:43:37 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: GET - uri: https://pytagstoragestorname.blob.core.windows.net/?where=tag1%3D%27firsttag%27&maxresults=2&comp=blobs + uri: https://storagename.blob.core.windows.net/?where=tag1%3D%27firsttag%27%20and%20tag2%3D%27secondtag%27&maxresults=2&comp=blobs response: body: string: "\uFEFF\ntag1='firsttag'2blob2container1d79a0d11firsttagblob3container2d79a0d11firsttag2!244!MDAwMDM1IWNvbnRhaW5lcjNkNzlhMGQxMQEwMUQ2NTBCQ0E4RjFBQjJDITAwMDAwNSFibG9iNCEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhMTdjN2Y5YzMtODZlMC00ODdjLTg1YjAtODRkMGViNmI1M2MzITAwMDAwNCF0YWcxIQ--" + ServiceEndpoint=\"https://storagename.blob.core.windows.net/\">tag1='firsttag' + and tag2='secondtag'2blob2container12fd60f8etag1firsttagtag2secondtagblob2container1d79a0d11tag1firsttagtag2secondtag2!244!MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhMzI5OTE2MzEtZmU0OC00MmU5LThiMWItMDA5YjU0ZGVkM2JjITAwMDAwNCF0YWcxIQ--" headers: content-type: - application/xml date: - - Thu, 02 Jul 2020 22:06:12 GMT + - Fri, 06 Nov 2020 19:43:37 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 transfer-encoding: - chunked + vary: + - Origin x-ms-version: - - '2019-12-12' + - '2020-04-08' status: code: 200 message: OK @@ -396,28 +411,31 @@ interactions: Connection: - keep-alive User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:06:48 GMT + - Fri, 06 Nov 2020 19:43:37 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: GET - uri: https://pytagstoragestorname.blob.core.windows.net/?where=tag1%3D%27firsttag%27&marker=2%21244%21MDAwMDM1IWNvbnRhaW5lcjNkNzlhMGQxMQEwMUQ2NTBCQ0E4RjFBQjJDITAwMDAwNSFibG9iNCEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhMTdjN2Y5YzMtODZlMC00ODdjLTg1YjAtODRkMGViNmI1M2MzITAwMDAwNCF0YWcxIQ--&maxresults=2&comp=blobs + uri: https://storagename.blob.core.windows.net/?where=tag1%3D%27firsttag%27%20and%20tag2%3D%27secondtag%27&marker=2%21244%21MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhMzI5OTE2MzEtZmU0OC00MmU5LThiMWItMDA5YjU0ZGVkM2JjITAwMDAwNCF0YWcxIQ--&maxresults=2&comp=blobs response: body: string: "\uFEFF\n2!244!MDAwMDM1IWNvbnRhaW5lcjNkNzlhMGQxMQEwMUQ2NTBCQ0E4RjFBQjJDITAwMDAwNSFibG9iNCEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhMTdjN2Y5YzMtODZlMC00ODdjLTg1YjAtODRkMGViNmI1M2MzITAwMDAwNCF0YWcxIQ--tag1='firsttag'2blob4container3d79a0d11firsttagblob1containerd79a0d11firsttag" + ServiceEndpoint=\"https://storagename.blob.core.windows.net/\">2!244!MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhMzI5OTE2MzEtZmU0OC00MmU5LThiMWItMDA5YjU0ZGVkM2JjITAwMDAwNCF0YWcxIQ--tag1='firsttag' + and tag2='secondtag'2blob3container22fd60f8etag1firsttagtag2secondtagblob3container2d79a0d11tag1firsttagtag2secondtag2!240!MDAwMDM0IWNvbnRhaW5lcjJmZDYwZjhlATAxRDZCNDcwNjA2NDc2NjIhMDAwMDA1IWJsb2IxITAwMDAxNiEIAAAACAAAAGZpcnN0dGFnITAwMDAwMSEwITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaITAwMDAzNiFlYTY0ZTA3Mi0wZGJiLTRkYTgtYmUzYi01ZjdiOTYxNDYyNTchMDAwMDA0IXRhZzEh" headers: content-type: - application/xml date: - - Thu, 02 Jul 2020 22:06:48 GMT + - Fri, 06 Nov 2020 19:43:37 GMT server: - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 transfer-encoding: - chunked + vary: + - Origin x-ms-version: - - '2019-12-12' + - '2020-04-08' status: code: 200 message: OK diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_set_blob_tags_with_lease.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_set_blob_tags_with_lease.yaml new file mode 100644 index 000000000000..0117c5523fa3 --- /dev/null +++ b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags.test_set_blob_tags_with_lease.yaml @@ -0,0 +1,372 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:47 GMT + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/container942b11f6?timeout=5&restype=container + response: + body: + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:6b2d2938-f01e-000f-1885-b4acae000000\nTime:2020-11-06T21:43:47.5808008Z" + headers: + content-length: + - '230' + content-type: + - application/xml + date: + - Fri, 06 Nov 2020 21:43:46 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - ContainerAlreadyExists + x-ms-version: + - '2020-04-08' + status: + code: 409 + message: The specified container already exists. +- request: + body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1024' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-blob-type: + - BlockBlob + x-ms-date: + - Fri, 06 Nov 2020 21:43:47 GMT + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6 + response: + body: + string: '' + headers: + content-length: + - '0' + content-md5: + - yaNM/IXZgmmMasifdgcavQ== + date: + - Fri, 06 Nov 2020 21:43:47 GMT + etag: + - '"0x8D8829D0ADB38C6"' + last-modified: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-content-crc64: + - ov8U1LLnyKc= + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-04-08' + x-ms-version-id: + - '2020-11-06T21:43:47.6540614Z' + 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.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:47 GMT + x-ms-lease-action: + - acquire + x-ms-lease-duration: + - '-1' + x-ms-proposed-lease-id: + - 2e317d7c-4e67-4f47-b3e4-c65dc53e30d4 + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6?comp=lease + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Fri, 06 Nov 2020 21:43:47 GMT + etag: + - '"0x8D8829D0ADB38C6"' + last-modified: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-lease-id: + - 2e317d7c-4e67-4f47-b3e4-c65dc53e30d4 + x-ms-version: + - '2020-04-08' + status: + code: 201 + message: Created +- request: + body: ' + + tag1firsttagtag2secondtagtag3thirdtag' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '217' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:47 GMT + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6?comp=tags + response: + body: + string: "\uFEFF\nLeaseIdMissingThere + is currently a lease on the blob and no lease ID was specified in the request.\nRequestId:6b2d29d0-f01e-000f-2785-b4acae000000\nTime:2020-11-06T21:43:47.9960936Z" + headers: + content-length: + - '268' + content-type: + - application/xml + date: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - LeaseIdMissing + x-ms-version: + - '2020-04-08' + status: + code: 412 + message: There is currently a lease on the blob and no lease ID was specified + in the request. +- request: + body: ' + + tag1firsttagtag2secondtagtag3thirdtag' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '217' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:48 GMT + x-ms-lease-id: + - 2e317d7c-4e67-4f47-b3e4-c65dc53e30d4 + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6?comp=tags + response: + body: + string: '' + headers: + date: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-04-08' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:48 GMT + x-ms-version: + - '2020-04-08' + method: GET + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6?comp=tags + response: + body: + string: "\uFEFF\ntag1firsttagtag2secondtagtag3thirdtag" + headers: + content-length: + - '220' + content-type: + - application/xml + date: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + vary: + - Origin + x-ms-version: + - '2020-04-08' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:48 GMT + x-ms-lease-id: + - '''d92e6954-3274-4715-811c-727ca7145303''' + x-ms-version: + - '2020-04-08' + method: GET + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6?comp=tags + response: + body: + string: "\uFEFF\nInvalidHeaderValueThe + value for one of the HTTP headers is not in the correct format.\nRequestId:6b2d2b0d-f01e-000f-4a85-b4acae000000\nTime:2020-11-06T21:43:48.2933032Zx-ms-lease-id'd92e6954-3274-4715-811c-727ca7145303'" + headers: + content-length: + - '368' + content-type: + - application/xml + date: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + vary: + - Origin + x-ms-error-code: + - InvalidHeaderValue + x-ms-version: + - '2020-04-08' + status: + code: 400 + message: The value for one of the HTTP headers is not in the correct format. +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:48 GMT + x-ms-lease-id: + - 2e317d7c-4e67-4f47-b3e4-c65dc53e30d4 + x-ms-version: + - '2020-04-08' + method: GET + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6?comp=tags + response: + body: + string: "\uFEFF\ntag1firsttagtag2secondtagtag3thirdtag" + headers: + content-length: + - '220' + content-type: + - application/xml + date: + - Fri, 06 Nov 2020 21:43:47 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + vary: + - Origin + x-ms-version: + - '2020-04-08' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:43:48 GMT + x-ms-lease-id: + - 2e317d7c-4e67-4f47-b3e4-c65dc53e30d4 + x-ms-version: + - '2020-04-08' + method: DELETE + uri: https://storagename.blob.core.windows.net/container942b11f6/blob942b11f6 + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Fri, 06 Nov 2020 21:43:48 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-delete-type-permanent: + - 'false' + x-ms-version: + - '2020-04-08' + status: + code: 202 + message: Accepted +version: 1 diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_filter_blobs.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_filter_blobs.yaml index 33704cef9a73..6290de18b2a4 100644 --- a/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_filter_blobs.yaml +++ b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_filter_blobs.yaml @@ -3,102 +3,106 @@ interactions: body: null headers: User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:12:35 GMT + - Fri, 06 Nov 2020 19:44:38 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container2fd60f8e?timeout=5&restype=container + uri: https://storagename.blob.core.windows.net/container2fd60f8e?timeout=5&restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:1bf4f8c6-801e-0015-4b75-b4cd71000000\nTime:2020-11-06T19:44:38.6773417Z" headers: - content-length: '0' - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED5071497F3"' - last-modified: Thu, 02 Jul 2020 22:12:36 GMT + content-length: '230' + content-type: application/xml + date: Fri, 06 Nov 2020 19:44:38 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 - x-ms-version: '2019-12-12' + x-ms-error-code: ContainerAlreadyExists + x-ms-version: '2020-04-08' status: - code: 201 - message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container2fd60f8e?timeout=5&restype=container + code: 409 + message: The specified container already exists. + url: https://seanmcccanary3.blob.core.windows.net/container2fd60f8e?timeout=5&restype=container - request: body: null headers: User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:12:36 GMT + - Fri, 06 Nov 2020 19:44:38 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container12fd60f8e?restype=container + uri: https://storagename.blob.core.windows.net/container12fd60f8e?restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:1bf4f8d5-801e-0015-5175-b4cd71000000\nTime:2020-11-06T19:44:38.7594004Z" headers: - content-length: '0' - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED507225687"' - last-modified: Thu, 02 Jul 2020 22:12:36 GMT + content-length: '230' + content-type: application/xml + date: Fri, 06 Nov 2020 19:44:38 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 - x-ms-version: '2019-12-12' + x-ms-error-code: ContainerAlreadyExists + x-ms-version: '2020-04-08' status: - code: 201 - message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container12fd60f8e?restype=container + code: 409 + message: The specified container already exists. + url: https://seanmcccanary3.blob.core.windows.net/container12fd60f8e?restype=container - request: body: null headers: User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:12:37 GMT + - Fri, 06 Nov 2020 19:44:38 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container22fd60f8e?restype=container + uri: https://storagename.blob.core.windows.net/container22fd60f8e?restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:1bf4f8d9-801e-0015-5475-b4cd71000000\nTime:2020-11-06T19:44:38.8284490Z" headers: - content-length: '0' - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED5072F51A5"' - last-modified: Thu, 02 Jul 2020 22:12:37 GMT + content-length: '230' + content-type: application/xml + date: Fri, 06 Nov 2020 19:44:38 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 - x-ms-version: '2019-12-12' + x-ms-error-code: ContainerAlreadyExists + x-ms-version: '2020-04-08' status: - code: 201 - message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container22fd60f8e?restype=container + code: 409 + message: The specified container already exists. + url: https://seanmcccanary3.blob.core.windows.net/container22fd60f8e?restype=container - request: body: null headers: User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:12:37 GMT + - Fri, 06 Nov 2020 19:44:38 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container32fd60f8e?restype=container + uri: https://storagename.blob.core.windows.net/container32fd60f8e?restype=container response: body: - string: '' + string: "\uFEFFContainerAlreadyExistsThe + specified container already exists.\nRequestId:1bf4f8e6-801e-0015-6075-b4cd71000000\nTime:2020-11-06T19:44:38.8844884Z" headers: - content-length: '0' - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED5073D1034"' - last-modified: Thu, 02 Jul 2020 22:12:37 GMT + content-length: '230' + content-type: application/xml + date: Fri, 06 Nov 2020 19:44:38 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 - x-ms-version: '2019-12-12' + x-ms-error-code: ContainerAlreadyExists + x-ms-version: '2020-04-08' status: - code: 201 - message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container32fd60f8e?restype=container + code: 409 + message: The specified container already exists. + url: https://seanmcccanary3.blob.core.windows.net/container32fd60f8e?restype=container - request: body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa headers: @@ -107,34 +111,35 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:12:37 GMT + - Fri, 06 Nov 2020 19:44:38 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container2fd60f8e/blob1 + uri: https://storagename.blob.core.windows.net/container2fd60f8e/blob1 response: body: string: '' headers: content-length: '0' content-md5: yaNM/IXZgmmMasifdgcavQ== - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED5074BB319"' - last-modified: Thu, 02 Jul 2020 22:12:37 GMT + date: Fri, 06 Nov 2020 19:44:38 GMT + etag: '"0x8D8828C65F4D6FC"' + last-modified: Fri, 06 Nov 2020 19:44:39 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: ov8U1LLnyKc= x-ms-request-server-encrypted: 'true' - x-ms-version: '2019-12-12' + x-ms-version: '2020-04-08' + x-ms-version-id: '2020-11-06T19:44:39.0512140Z' status: code: 201 message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container2fd60f8e/blob1 + url: https://seanmcccanary3.blob.core.windows.net/container2fd60f8e/blob1 - request: body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa headers: @@ -143,34 +148,35 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:12:37 GMT + - Fri, 06 Nov 2020 19:44:39 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container12fd60f8e/blob2 + uri: https://storagename.blob.core.windows.net/container12fd60f8e/blob2 response: body: string: '' headers: content-length: '0' content-md5: yaNM/IXZgmmMasifdgcavQ== - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED5075AF89D"' - last-modified: Thu, 02 Jul 2020 22:12:37 GMT + date: Fri, 06 Nov 2020 19:44:38 GMT + etag: '"0x8D8828C66018375"' + last-modified: Fri, 06 Nov 2020 19:44:39 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: ov8U1LLnyKc= x-ms-request-server-encrypted: 'true' - x-ms-version: '2019-12-12' + x-ms-version: '2020-04-08' + x-ms-version-id: '2020-11-06T19:44:39.1342725Z' status: code: 201 message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container12fd60f8e/blob2 + url: https://seanmcccanary3.blob.core.windows.net/container12fd60f8e/blob2 - request: body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa headers: @@ -179,34 +185,35 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:12:37 GMT + - Fri, 06 Nov 2020 19:44:39 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container22fd60f8e/blob3 + uri: https://storagename.blob.core.windows.net/container22fd60f8e/blob3 response: body: string: '' headers: content-length: '0' content-md5: yaNM/IXZgmmMasifdgcavQ== - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED50769EFF0"' - last-modified: Thu, 02 Jul 2020 22:12:37 GMT + date: Fri, 06 Nov 2020 19:44:38 GMT + etag: '"0x8D8828C660BBE8E"' + last-modified: Fri, 06 Nov 2020 19:44:39 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: ov8U1LLnyKc= x-ms-request-server-encrypted: 'true' - x-ms-version: '2019-12-12' + x-ms-version: '2020-04-08' + x-ms-version-id: '2020-11-06T19:44:39.2013214Z' status: code: 201 message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container22fd60f8e/blob3 + url: https://seanmcccanary3.blob.core.windows.net/container22fd60f8e/blob3 - request: body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa headers: @@ -215,86 +222,91 @@ interactions: Content-Type: - application/octet-stream User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-blob-type: - BlockBlob x-ms-date: - - Thu, 02 Jul 2020 22:12:37 GMT + - Fri, 06 Nov 2020 19:44:39 GMT x-ms-tags: - tag1=firsttag&tag2=secondtag&tag3=thirdtag x-ms-version: - - '2019-12-12' + - '2020-04-08' method: PUT - uri: https://pytagstoragestorname.blob.core.windows.net/container32fd60f8e/blob4 + uri: https://storagename.blob.core.windows.net/container32fd60f8e/blob4 response: body: string: '' headers: content-length: '0' content-md5: yaNM/IXZgmmMasifdgcavQ== - date: Thu, 02 Jul 2020 22:12:36 GMT - etag: '"0x8D81ED5077B58C5"' - last-modified: Thu, 02 Jul 2020 22:12:37 GMT + date: Fri, 06 Nov 2020 19:44:38 GMT + etag: '"0x8D8828C6619076A"' + last-modified: Fri, 06 Nov 2020 19:44:39 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-content-crc64: ov8U1LLnyKc= x-ms-request-server-encrypted: 'true' - x-ms-version: '2019-12-12' + x-ms-version: '2020-04-08' + x-ms-version-id: '2020-11-06T19:44:39.2893843Z' status: code: 201 message: Created - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/container32fd60f8e/blob4 + url: https://seanmcccanary3.blob.core.windows.net/container32fd60f8e/blob4 - request: body: null headers: Accept: - application/xml User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:12:43 GMT + - Fri, 06 Nov 2020 19:50:02 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: GET - uri: https://pytagstoragestorname.blob.core.windows.net/?where=tag1%3D'firsttag'&maxresults=2&comp=blobs + uri: https://storagename.blob.core.windows.net/?where=%22tag1%22%3D'firsttag'%20and%20%22tag2%22%3D'secondtag'&maxresults=2&comp=blobs response: body: string: "\uFEFF\ntag1='firsttag'2blob2container12fd60f8efirsttagblob3container22fd60f8efirsttag2!240!MDAwMDM0IWNvbnRhaW5lcjJmZDYwZjhlATAxRDY1MEJERTQ5REMwRDYhMDAwMDA1IWJsb2IxITAwMDAxNiEIAAAACAAAAGZpcnN0dGFnITAwMDAwMSEwITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaITAwMDAzNiFhODVmY2U3MS0zOGU4LTQ0OTgtYWM3My0xZThhYjUzYWIwMmYhMDAwMDA0IXRhZzEh" + ServiceEndpoint=\"https://storagename.blob.core.windows.net/\">"tag1"='firsttag' + and "tag2"='secondtag'2blob2container12fd60f8etag1firsttagtag2secondtagblob2container1d79a0d11tag1firsttagtag2secondtag2!244!MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhNGY3YjQ2NWYtODM0My00M2ZlLTg5YjItYzkzOTVhMTMwN2RmITAwMDAwNCF0YWcxIQ--" headers: content-type: application/xml - date: Thu, 02 Jul 2020 22:12:42 GMT + date: Fri, 06 Nov 2020 19:50:03 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 transfer-encoding: chunked - x-ms-version: '2019-12-12' + vary: Origin + x-ms-version: '2020-04-08' status: code: 200 message: OK - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/?where=tag1%3D'firsttag'&maxresults=2&comp=blobs + url: https://seanmcccanary3.blob.core.windows.net/?where=%22tag1%22%3D'firsttag'%20and%20%22tag2%22%3D'secondtag'&maxresults=2&comp=blobs - request: body: null headers: Accept: - application/xml User-Agent: - - azsdk-python-storage-blob/12.3.3 Python/3.7.3 (Windows-10-10.0.18362-SP0) + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) x-ms-date: - - Thu, 02 Jul 2020 22:13:02 GMT + - Fri, 06 Nov 2020 19:50:04 GMT x-ms-version: - - '2019-12-12' + - '2020-04-08' method: GET - uri: https://pytagstoragestorname.blob.core.windows.net/?where=tag1%3D'firsttag'&marker=2!240!MDAwMDM0IWNvbnRhaW5lcjJmZDYwZjhlATAxRDY1MEJERTQ5REMwRDYhMDAwMDA1IWJsb2IxITAwMDAxNiEIAAAACAAAAGZpcnN0dGFnITAwMDAwMSEwITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaITAwMDAzNiFhODVmY2U3MS0zOGU4LTQ0OTgtYWM3My0xZThhYjUzYWIwMmYhMDAwMDA0IXRhZzEh&maxresults=2&comp=blobs + uri: https://storagename.blob.core.windows.net/?where=%22tag1%22%3D'firsttag'%20and%20%22tag2%22%3D'secondtag'&marker=2!244!MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhNGY3YjQ2NWYtODM0My00M2ZlLTg5YjItYzkzOTVhMTMwN2RmITAwMDAwNCF0YWcxIQ--&maxresults=2&comp=blobs response: body: string: "\uFEFF\n2!240!MDAwMDM0IWNvbnRhaW5lcjJmZDYwZjhlATAxRDY1MEJERTQ5REMwRDYhMDAwMDA1IWJsb2IxITAwMDAxNiEIAAAACAAAAGZpcnN0dGFnITAwMDAwMSEwITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaITAwMDAzNiFhODVmY2U3MS0zOGU4LTQ0OTgtYWM3My0xZThhYjUzYWIwMmYhMDAwMDA0IXRhZzEhtag1='firsttag'2blob1container2fd60f8efirsttagblob4container32fd60f8efirsttag" + ServiceEndpoint=\"https://storagename.blob.core.windows.net/\">2!244!MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhNGY3YjQ2NWYtODM0My00M2ZlLTg5YjItYzkzOTVhMTMwN2RmITAwMDAwNCF0YWcxIQ--"tag1"='firsttag' + and "tag2"='secondtag'2blob3container22fd60f8etag1firsttagtag2secondtagblob3container2d79a0d11tag1firsttagtag2secondtag2!240!MDAwMDM0IWNvbnRhaW5lcjJmZDYwZjhlATAxRDZCNDcwNjA2NDc2NjIhMDAwMDA1IWJsb2IxITAwMDAxNiEIAAAACAAAAGZpcnN0dGFnITAwMDAwMSEwITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaITAwMDAzNiEwZGJkMTMwZi0yNzU0LTRiYjUtOTg2OC01ZGZkYzM2OGY3ZTkhMDAwMDA0IXRhZzEh" headers: content-type: application/xml - date: Thu, 02 Jul 2020 22:13:02 GMT + date: Fri, 06 Nov 2020 19:50:03 GMT server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 transfer-encoding: chunked - x-ms-version: '2019-12-12' + vary: Origin + x-ms-version: '2020-04-08' status: code: 200 message: OK - url: https://pytagstoragerbckbwvtpu4v.blob.core.windows.net/?where=tag1%3D'firsttag'&marker=2!240!MDAwMDM0IWNvbnRhaW5lcjJmZDYwZjhlATAxRDY1MEJERTQ5REMwRDYhMDAwMDA1IWJsb2IxITAwMDAxNiEIAAAACAAAAGZpcnN0dGFnITAwMDAwMSEwITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaITAwMDAzNiFhODVmY2U3MS0zOGU4LTQ0OTgtYWM3My0xZThhYjUzYWIwMmYhMDAwMDA0IXRhZzEh&maxresults=2&comp=blobs + url: https://seanmcccanary3.blob.core.windows.net/?where=%22tag1%22%3D'firsttag'%20and%20%22tag2%22%3D'secondtag'&marker=2!244!MDAwMDM1IWNvbnRhaW5lcjIyZmQ2MGY4ZQEwMUQ2QjQ3MDYwN0ZBNDdBITAwMDAwNSFibG9iMyEwMDAwMTYhCAAAAAgAAABmaXJzdHRhZyEwMDAwMDEhMCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiEwMDAwMzYhNGY3YjQ2NWYtODM0My00M2ZlLTg5YjItYzkzOTVhMTMwN2RmITAwMDAwNCF0YWcxIQ--&maxresults=2&comp=blobs version: 1 diff --git a/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_set_blob_tags_with_lease.yaml b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_set_blob_tags_with_lease.yaml new file mode 100644 index 000000000000..5ec08a3549a1 --- /dev/null +++ b/sdk/storage/azure-storage-blob/tests/recordings/test_blob_tags_async.test_set_blob_tags_with_lease.yaml @@ -0,0 +1,270 @@ +interactions: +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:53 GMT + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/containera431473?timeout=5&restype=container + response: + body: + string: '' + headers: + content-length: '0' + date: Fri, 06 Nov 2020 21:47:52 GMT + etag: '"0x8D8829D9D9E464C"' + last-modified: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-04-08' + status: + code: 201 + message: Created + url: https://seanmcccanary3.blob.core.windows.net/containera431473?timeout=5&restype=container +- request: + body: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + headers: + Content-Length: + - '1024' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-blob-type: + - BlockBlob + x-ms-date: + - Fri, 06 Nov 2020 21:47:53 GMT + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473 + response: + body: + string: '' + headers: + content-length: '0' + content-md5: yaNM/IXZgmmMasifdgcavQ== + date: Fri, 06 Nov 2020 21:47:53 GMT + etag: '"0x8D8829D9DA61294"' + last-modified: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-content-crc64: ov8U1LLnyKc= + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-04-08' + x-ms-version-id: '2020-11-06T21:47:53.9308180Z' + status: + code: 201 + message: Created + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473 +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:53 GMT + x-ms-lease-action: + - acquire + x-ms-lease-duration: + - '-1' + x-ms-proposed-lease-id: + - c4582a27-fa57-40db-8cc8-379fde913433 + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473?comp=lease + response: + body: + string: '' + headers: + content-length: '0' + date: Fri, 06 Nov 2020 21:47:53 GMT + etag: '"0x8D8829D9DA61294"' + last-modified: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-lease-id: c4582a27-fa57-40db-8cc8-379fde913433 + x-ms-version: '2020-04-08' + status: + code: 201 + message: Created + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473?comp=lease +- request: + body: ' + + tag1firsttagtag2secondtagtag3thirdtag' + headers: + Content-Length: + - '217' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:54 GMT + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473?comp=tags + response: + body: + string: "\uFEFF\nLeaseIdMissingThere + is currently a lease on the blob and no lease ID was specified in the request.\nRequestId:dccdd42d-401e-0035-4086-b4b6d6000000\nTime:2020-11-06T21:47:54.1899339Z" + headers: + content-length: '268' + content-type: application/xml + date: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: LeaseIdMissing + x-ms-version: '2020-04-08' + status: + code: 412 + message: There is currently a lease on the blob and no lease ID was specified + in the request. + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473?comp=tags +- request: + body: ' + + tag1firsttagtag2secondtagtag3thirdtag' + headers: + Content-Length: + - '217' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:54 GMT + x-ms-lease-id: + - c4582a27-fa57-40db-8cc8-379fde913433 + x-ms-version: + - '2020-04-08' + method: PUT + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473?comp=tags + response: + body: + string: '' + headers: + date: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-04-08' + status: + code: 204 + message: No Content + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473?comp=tags +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:54 GMT + x-ms-version: + - '2020-04-08' + method: GET + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473?comp=tags + response: + body: + string: "\uFEFF\ntag1firsttagtag2secondtagtag3thirdtag" + headers: + content-length: '220' + content-type: application/xml + date: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + vary: Origin + x-ms-version: '2020-04-08' + status: + code: 200 + message: OK + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473?comp=tags +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:54 GMT + x-ms-lease-id: + - '''d92e6954-3274-4715-811c-727ca7145303''' + x-ms-version: + - '2020-04-08' + method: GET + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473?comp=tags + response: + body: + string: "\uFEFF\nInvalidHeaderValueThe + value for one of the HTTP headers is not in the correct format.\nRequestId:dccdd4c8-401e-0035-4986-b4b6d6000000\nTime:2020-11-06T21:47:54.3740649Zx-ms-lease-id'd92e6954-3274-4715-811c-727ca7145303'" + headers: + content-length: '368' + content-type: application/xml + date: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + vary: Origin + x-ms-error-code: InvalidHeaderValue + x-ms-version: '2020-04-08' + status: + code: 400 + message: The value for one of the HTTP headers is not in the correct format. + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473?comp=tags +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:54 GMT + x-ms-lease-id: + - c4582a27-fa57-40db-8cc8-379fde913433 + x-ms-version: + - '2020-04-08' + method: GET + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473?comp=tags + response: + body: + string: "\uFEFF\ntag1firsttagtag2secondtagtag3thirdtag" + headers: + content-length: '220' + content-type: application/xml + date: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + vary: Origin + x-ms-version: '2020-04-08' + status: + code: 200 + message: OK + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473?comp=tags +- request: + body: null + headers: + User-Agent: + - azsdk-python-storage-blob/12.6.0b2 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Fri, 06 Nov 2020 21:47:54 GMT + x-ms-lease-id: + - c4582a27-fa57-40db-8cc8-379fde913433 + x-ms-version: + - '2020-04-08' + method: DELETE + uri: https://storagename.blob.core.windows.net/containera431473/bloba431473 + response: + body: + string: '' + headers: + content-length: '0' + date: Fri, 06 Nov 2020 21:47:53 GMT + server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-delete-type-permanent: 'false' + x-ms-version: '2020-04-08' + status: + code: 202 + message: Accepted + url: https://seanmcccanary3.blob.core.windows.net/containera431473/bloba431473 +version: 1 diff --git a/sdk/storage/azure-storage-blob/tests/test_blob_tags.py b/sdk/storage/azure-storage-blob/tests/test_blob_tags.py index 7f84b5c1511e..e166b9cf8103 100644 --- a/sdk/storage/azure-storage-blob/tests/test_blob_tags.py +++ b/sdk/storage/azure-storage-blob/tests/test_blob_tags.py @@ -19,7 +19,7 @@ from _shared.testcase import StorageTestCase, GlobalStorageAccountPreparer, GlobalResourceGroupPreparer from azure.core.exceptions import ( - ResourceExistsError, ResourceModifiedError) + ResourceExistsError, ResourceModifiedError, HttpResponseError) from azure.storage.blob import ( BlobServiceClient, BlobBlock, generate_account_sas, ResourceTypes, AccountSasPermissions, generate_container_sas, @@ -103,6 +103,29 @@ def test_set_blob_tags(self, resource_group, location, storage_account, storage_ # Assert self.assertIsNotNone(resp) + @pytest.mark.playback_test_only + @GlobalStorageAccountPreparer() + def test_set_blob_tags_with_lease(self, resource_group, location, storage_account, storage_account_key): + self._setup(storage_account, storage_account_key) + blob_client, _ = self._create_block_blob() + lease = blob_client.acquire_lease() + + # Act + blob_tags = {"tag1": "firsttag", "tag2": "secondtag", "tag3": "thirdtag"} + with self.assertRaises(HttpResponseError): + blob_client.set_blob_tags(blob_tags) + blob_client.set_blob_tags(blob_tags, lease=lease) + + blob_client.get_blob_tags() + with self.assertRaises(HttpResponseError): + blob_client.get_blob_tags(lease="'d92e6954-3274-4715-811c-727ca7145303'") + resp = blob_client.get_blob_tags(lease=lease) + + self.assertIsNotNone(resp) + self.assertEqual(len(resp), 3) + + blob_client.delete_blob(lease=lease) + @pytest.mark.playback_test_only @GlobalStorageAccountPreparer() def test_set_blob_tags_for_a_version(self, resource_group, location, storage_account, storage_account_key): @@ -276,8 +299,8 @@ def test_list_blobs_returns_tags(self, resource_group, location, storage_account for key, value in blob.tags.items(): self.assertEqual(tags[key], value) - @GlobalResourceGroupPreparer() - @StorageAccountPreparer(random_name_enabled=True, location="canadacentral", name_prefix='pytagstorage') + @pytest.mark.playback_test_only + @GlobalStorageAccountPreparer() def test_filter_blobs(self, resource_group, location, storage_account, storage_account_key): self._setup(storage_account, storage_account_key) container_name1 = self._create_container(prefix="container1") @@ -292,7 +315,7 @@ def test_filter_blobs(self, resource_group, location, storage_account, storage_a if self.is_live: sleep(10) - where = "tag1='firsttag'" + where = "tag1='firsttag' and tag2='secondtag'" blob_list = self.bsc.find_blobs_by_tags(filter_expression=where, results_per_page=2).by_page() first_page = next(blob_list) items_on_page1 = list(first_page) @@ -301,6 +324,9 @@ def test_filter_blobs(self, resource_group, location, storage_account, storage_a self.assertEqual(2, len(items_on_page1)) self.assertEqual(2, len(items_on_page2)) + self.assertEqual(len(items_on_page2[0]['tags']), 2) + self.assertEqual(items_on_page2[0]['tags']['tag1'], 'firsttag') + self.assertEqual(items_on_page2[0]['tags']['tag2'], 'secondtag') @pytest.mark.live_test_only @GlobalResourceGroupPreparer() diff --git a/sdk/storage/azure-storage-blob/tests/test_blob_tags_async.py b/sdk/storage/azure-storage-blob/tests/test_blob_tags_async.py index 4d4804c4e41d..755018a18a6c 100644 --- a/sdk/storage/azure-storage-blob/tests/test_blob_tags_async.py +++ b/sdk/storage/azure-storage-blob/tests/test_blob_tags_async.py @@ -19,7 +19,7 @@ from _shared.testcase import GlobalStorageAccountPreparer, GlobalResourceGroupPreparer from azure.core.exceptions import ( - ResourceExistsError, ResourceModifiedError) + ResourceExistsError, ResourceModifiedError, HttpResponseError) from azure.storage.blob import BlobBlock from azure.storage.blob.aio import BlobServiceClient #------------------------------------------------------------------------------ @@ -93,6 +93,31 @@ async def test_set_blob_tags(self, resource_group, location, storage_account, st # Assert self.assertIsNotNone(resp) + @pytest.mark.playback_test_only + @GlobalStorageAccountPreparer() + @AsyncStorageTestCase.await_prepared_test + async def test_set_blob_tags_with_lease(self, resource_group, location, storage_account, storage_account_key): + await self._setup(storage_account, storage_account_key) + blob_client, _ = await self._create_block_blob() + lease = await blob_client.acquire_lease() + + # Act + blob_tags = {"tag1": "firsttag", "tag2": "secondtag", "tag3": "thirdtag"} + + with self.assertRaises(HttpResponseError): + await blob_client.set_blob_tags(blob_tags) + await blob_client.set_blob_tags(blob_tags, lease=lease) + + await blob_client.get_blob_tags() + with self.assertRaises(HttpResponseError): + await blob_client.get_blob_tags(lease="'d92e6954-3274-4715-811c-727ca7145303'") + resp = await blob_client.get_blob_tags(lease=lease) + + self.assertIsNotNone(resp) + self.assertEqual(len(resp), 3) + + await blob_client.delete_blob(lease=lease) + @pytest.mark.playback_test_only @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test @@ -276,8 +301,8 @@ async def test_list_blobs_returns_tags(self, resource_group, location, storage_a for key, value in blob.tags.items(): self.assertEqual(tags[key], value) - @GlobalResourceGroupPreparer() - @StorageAccountPreparer(random_name_enabled=True, location="canadacentral", name_prefix='pytagstorage') + @pytest.mark.playback_test_only + @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test async def test_filter_blobs(self, resource_group, location, storage_account, storage_account_key): await self._setup(storage_account, storage_account_key) @@ -294,7 +319,7 @@ async def test_filter_blobs(self, resource_group, location, storage_account, sto if self.is_live: sleep(10) - where = "tag1='firsttag'" + where = "\"tag1\"='firsttag' and \"tag2\"='secondtag'" blob_list = self.bsc.find_blobs_by_tags(filter_expression=where, results_per_page=2).by_page() first_page = await blob_list.__anext__() items_on_page1 = list() @@ -307,4 +332,7 @@ async def test_filter_blobs(self, resource_group, location, storage_account, sto self.assertEqual(2, len(items_on_page1)) self.assertEqual(2, len(items_on_page2)) + self.assertEqual(len(items_on_page2[0]['tags']), 2) + self.assertEqual(items_on_page2[0]['tags']['tag1'], 'firsttag') + self.assertEqual(items_on_page2[0]['tags']['tag2'], 'secondtag') #------------------------------------------------------------------------------