From c365a7cce37d88d03fc4616430d69cf29822e3b6 Mon Sep 17 00:00:00 2001 From: xiafu Date: Mon, 31 May 2021 23:06:57 -0700 Subject: [PATCH 1/2] [STG78][FileShare]List Files v2 --- .../storage/fileshare/_directory_client.py | 13 + .../aio/operations/_directory_operations.py | 27 +- .../aio/operations/_file_operations.py | 24 +- .../aio/operations/_share_operations.py | 20 +- .../fileshare/_generated/models/__init__.py | 2 + .../models/_azure_file_storage_enums.py | 7 + .../fileshare/_generated/models/_models.py | 56 ++ .../_generated/models/_models_py3.py | 70 ++ .../operations/_directory_operations.py | 27 +- .../_generated/operations/_file_operations.py | 24 +- .../operations/_share_operations.py | 20 +- .../azure/storage/fileshare/_models.py | 30 +- .../azure/storage/fileshare/_serialize.py | 3 +- .../azure/storage/fileshare/_share_client.py | 13 + .../fileshare/aio/_directory_client_async.py | 13 + .../azure/storage/fileshare/aio/_models.py | 6 +- .../fileshare/aio/_share_client_async.py | 13 + ...ories_and_files_include_extended_info.yaml | 203 +++++ ...ectories_and_files_include_other_data.yaml | 707 ++++++++++++++++++ ...and_files_include_extended_info_async.yaml | 146 ++++ ...es_and_files_include_other_data_async.yaml | 488 ++++++++++++ .../tests/test_directory.py | 102 ++- .../tests/test_directory_async.py | 114 ++- 23 files changed, 2004 insertions(+), 124 deletions(-) create mode 100644 sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_extended_info.yaml create mode 100644 sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_other_data.yaml create mode 100644 sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_extended_info_async.yaml create mode 100644 sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_other_data_async.yaml diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_directory_client.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_directory_client.py index 557c94f08e17..06749f27b88d 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_directory_client.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_directory_client.py @@ -335,6 +335,19 @@ def list_directories_and_files(self, name_starts_with=None, **kwargs): :param str name_starts_with: Filters the results to return only entities whose names begin with the specified prefix. + :keyword list[str] include: + Include this parameter to specify one or more datasets to include in the response. + Possible str values are "timestamps", "Etag", "Attributes", "PermissionKey". + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + + :keyword bool include_extended_info: + If this is set to true, file id will be returned in listed results. + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + :keyword int timeout: The timeout parameter is expressed in seconds. :returns: An auto-paging iterable of dict-like DirectoryProperties and FileProperties diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_directory_operations.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_directory_operations.py index 0efbbbdf16b0..2d3fa63570b1 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_directory_operations.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_directory_operations.py @@ -5,7 +5,7 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Any, Callable, Dict, Generic, Optional, TypeVar +from typing import Any, Callable, Dict, Generic, List, Optional, TypeVar, Union import warnings from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error @@ -42,7 +42,7 @@ def __init__(self, client, config, serializer, deserializer) -> None: async def create( self, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, file_permission: Optional[str] = "inherit", file_permission_key: Optional[str] = None, file_attributes: str = "none", @@ -58,7 +58,7 @@ async def create( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param file_permission: If specified the permission (security descriptor) shall be set for the directory/file. This header can be used if Permission size is <= 8KB, else x-ms-file-permission-key header shall be used. Default value: Inherit. If SDDL is specified as @@ -104,7 +104,7 @@ async def create( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if file_permission is not None: header_parameters['x-ms-file-permission'] = self._serialize.header("file_permission", file_permission, 'str') @@ -205,7 +205,7 @@ async def get_properties( raise HttpResponseError(response=response, model=error) response_headers = {} - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['ETag']=self._deserialize('str', response.headers.get('ETag')) response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) response_headers['x-ms-request-id']=self._deserialize('str', response.headers.get('x-ms-request-id')) @@ -393,7 +393,7 @@ async def set_properties( async def set_metadata( self, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, **kwargs: Any ) -> None: """Updates user defined metadata for the specified directory. @@ -404,7 +404,7 @@ async def set_metadata( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :keyword callable cls: A custom type or function that will be passed the direct response :return: None, or the result of cls(response) :rtype: None @@ -436,7 +436,7 @@ async def set_metadata( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') @@ -468,6 +468,8 @@ async def list_files_and_directories_segment( marker: Optional[str] = None, maxresults: Optional[int] = None, timeout: Optional[int] = None, + include: Optional[List[Union[str, "_models.ListFilesIncludeType"]]] = None, + include_extended_info: Optional[bool] = None, **kwargs: Any ) -> "_models.ListFilesAndDirectoriesSegmentResponse": """Returns a list of files or directories under the specified share or directory. It lists the @@ -493,6 +495,11 @@ async def list_files_and_directories_segment( href="https://docs.microsoft.com/en-us/rest/api/storageservices/Setting-Timeouts-for-File-Service-Operations?redirectedfrom=MSDN">Setting Timeouts for File Service Operations.`. :type timeout: int + :param include: Include this parameter to specify one or more datasets to include in the + response. + :type include: list[str or ~azure.storage.fileshare.models.ListFilesIncludeType] + :param include_extended_info: + :type include_extended_info: bool :keyword callable cls: A custom type or function that will be passed the direct response :return: ListFilesAndDirectoriesSegmentResponse, or the result of cls(response) :rtype: ~azure.storage.fileshare.models.ListFilesAndDirectoriesSegmentResponse @@ -528,10 +535,14 @@ async def list_files_and_directories_segment( query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1) if timeout is not None: query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0) + if include is not None: + query_parameters['include'] = self._serialize.query("include", include, '[str]', div=',') # Construct headers header_parameters = {} # type: Dict[str, Any] header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') + if include_extended_info is not None: + header_parameters['x-ms-file-extended-info'] = self._serialize.header("include_extended_info", include_extended_info, 'bool') header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') request = self._client.get(url, query_parameters, header_parameters) diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_file_operations.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_file_operations.py index fe33e0c76d17..b0d493ea7844 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_file_operations.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_file_operations.py @@ -43,7 +43,7 @@ async def create( self, file_content_length: int, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, file_permission: Optional[str] = "inherit", file_permission_key: Optional[str] = None, file_attributes: str = "none", @@ -63,7 +63,7 @@ async def create( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param file_permission: If specified the permission (security descriptor) shall be set for the directory/file. This header can be used if Permission size is <= 8KB, else x-ms-file-permission-key header shall be used. Default value: Inherit. If SDDL is specified as @@ -144,7 +144,7 @@ async def create( if _file_content_disposition is not None: header_parameters['x-ms-content-disposition'] = self._serialize.header("file_content_disposition", _file_content_disposition, 'str') if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') if file_permission is not None: header_parameters['x-ms-file-permission'] = self._serialize.header("file_permission", file_permission, 'str') if file_permission_key is not None: @@ -259,7 +259,7 @@ async def download( response_headers = {} if response.status_code == 200: response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['Content-Length']=self._deserialize('long', response.headers.get('Content-Length')) response_headers['Content-Type']=self._deserialize('str', response.headers.get('Content-Type')) response_headers['Content-Range']=self._deserialize('str', response.headers.get('Content-Range')) @@ -295,7 +295,7 @@ async def download( if response.status_code == 206: response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['Content-Length']=self._deserialize('long', response.headers.get('Content-Length')) response_headers['Content-Type']=self._deserialize('str', response.headers.get('Content-Type')) response_headers['Content-Range']=self._deserialize('str', response.headers.get('Content-Range')) @@ -403,7 +403,7 @@ async def get_properties( response_headers = {} response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['x-ms-type']=self._deserialize('str', response.headers.get('x-ms-type')) response_headers['Content-Length']=self._deserialize('long', response.headers.get('Content-Length')) response_headers['Content-Type']=self._deserialize('str', response.headers.get('Content-Type')) @@ -655,7 +655,7 @@ async def set_http_headers( async def set_metadata( self, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, lease_access_conditions: Optional["_models.LeaseAccessConditions"] = None, **kwargs: Any ) -> None: @@ -667,7 +667,7 @@ async def set_metadata( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param lease_access_conditions: Parameter group. :type lease_access_conditions: ~azure.storage.fileshare.models.LeaseAccessConditions :keyword callable cls: A custom type or function that will be passed the direct response @@ -703,7 +703,7 @@ async def set_metadata( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if _lease_id is not None: header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", _lease_id, 'str') @@ -1393,7 +1393,7 @@ async def start_copy( self, copy_source: str, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, file_permission: Optional[str] = "inherit", file_permission_key: Optional[str] = None, copy_file_smb_info: Optional["_models.CopyFileSmbInfo"] = None, @@ -1416,7 +1416,7 @@ async def start_copy( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param file_permission: If specified the permission (security descriptor) shall be set for the directory/file. This header can be used if Permission size is <= 8KB, else x-ms-file-permission-key header shall be used. Default value: Inherit. If SDDL is specified as @@ -1475,7 +1475,7 @@ async def start_copy( header_parameters = {} # type: Dict[str, Any] header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str') if file_permission is not None: header_parameters['x-ms-file-permission'] = self._serialize.header("file_permission", file_permission, 'str') diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_share_operations.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_share_operations.py index afcb4fb70baf..ca08ada9f572 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_share_operations.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/aio/operations/_share_operations.py @@ -42,7 +42,7 @@ def __init__(self, client, config, serializer, deserializer) -> None: async def create( self, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, quota: Optional[int] = None, access_tier: Optional[Union[str, "_models.ShareAccessTier"]] = None, enabled_protocols: Optional[str] = None, @@ -58,7 +58,7 @@ async def create( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param quota: Specifies the maximum size of the share, in gigabytes. :type quota: int :param access_tier: Specifies the access tier of the share. @@ -96,7 +96,7 @@ async def create( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') if quota is not None: header_parameters['x-ms-share-quota'] = self._serialize.header("quota", quota, 'int', minimum=1) if access_tier is not None: @@ -198,7 +198,7 @@ async def get_properties( raise HttpResponseError(response=response, model=error) response_headers = {} - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['ETag']=self._deserialize('str', response.headers.get('ETag')) response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) response_headers['x-ms-request-id']=self._deserialize('str', response.headers.get('x-ms-request-id')) @@ -778,7 +778,7 @@ async def break_lease( async def create_snapshot( self, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, **kwargs: Any ) -> None: """Creates a read-only snapshot of a share. @@ -789,7 +789,7 @@ async def create_snapshot( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :keyword callable cls: A custom type or function that will be passed the direct response :return: None, or the result of cls(response) :rtype: None @@ -821,7 +821,7 @@ async def create_snapshot( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') @@ -1083,7 +1083,7 @@ async def set_properties( async def set_metadata( self, timeout: Optional[int] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[str] = None, lease_access_conditions: Optional["_models.LeaseAccessConditions"] = None, **kwargs: Any ) -> None: @@ -1095,7 +1095,7 @@ async def set_metadata( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param lease_access_conditions: Parameter group. :type lease_access_conditions: ~azure.storage.fileshare.models.LeaseAccessConditions :keyword callable cls: A custom type or function that will be passed the direct response @@ -1133,7 +1133,7 @@ async def set_metadata( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if _lease_id is not None: header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", _lease_id, 'str') diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/__init__.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/__init__.py index 8a030e591a11..27d6752b6174 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/__init__.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/__init__.py @@ -74,6 +74,7 @@ LeaseDurationType, LeaseStateType, LeaseStatusType, + ListFilesIncludeType, ListSharesIncludeType, PermissionCopyModeType, ShareAccessTier, @@ -117,6 +118,7 @@ 'LeaseDurationType', 'LeaseStateType', 'LeaseStatusType', + 'ListFilesIncludeType', 'ListSharesIncludeType', 'PermissionCopyModeType', 'ShareAccessTier', diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_azure_file_storage_enums.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_azure_file_storage_enums.py index 19c0e2af840b..1c8b35163df6 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_azure_file_storage_enums.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_azure_file_storage_enums.py @@ -67,6 +67,13 @@ class LeaseStatusType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): LOCKED = "locked" UNLOCKED = "unlocked" +class ListFilesIncludeType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + TIMESTAMPS = "Timestamps" + ETAG = "Etag" + ATTRIBUTES = "Attributes" + PERMISSION_KEY = "PermissionKey" + class ListSharesIncludeType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): SNAPSHOTS = "snapshots" diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models.py index 3150082e7f4b..024a56b80905 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models.py @@ -180,6 +180,14 @@ class DirectoryItem(msrest.serialization.Model): :param name: Required. :type name: str + :param file_id: + :type file_id: str + :param properties: File properties. + :type properties: ~azure.storage.fileshare.models.FileProperty + :param attributes: + :type attributes: str + :param permission_key: + :type permission_key: str """ _validation = { @@ -188,6 +196,10 @@ class DirectoryItem(msrest.serialization.Model): _attribute_map = { 'name': {'key': 'Name', 'type': 'str'}, + 'file_id': {'key': 'FileId', 'type': 'str'}, + 'properties': {'key': 'Properties', 'type': 'FileProperty'}, + 'attributes': {'key': 'Attributes', 'type': 'str'}, + 'permission_key': {'key': 'PermissionKey', 'type': 'str'}, } _xml_map = { 'name': 'Directory' @@ -199,6 +211,10 @@ def __init__( ): super(DirectoryItem, self).__init__(**kwargs) self.name = kwargs['name'] + self.file_id = kwargs.get('file_id', None) + self.properties = kwargs.get('properties', None) + self.attributes = kwargs.get('attributes', None) + self.permission_key = kwargs.get('permission_key', None) class FileHTTPHeaders(msrest.serialization.Model): @@ -249,8 +265,14 @@ class FileItem(msrest.serialization.Model): :param name: Required. :type name: str + :param file_id: + :type file_id: str :param properties: Required. File properties. :type properties: ~azure.storage.fileshare.models.FileProperty + :param attributes: + :type attributes: str + :param permission_key: + :type permission_key: str """ _validation = { @@ -260,7 +282,10 @@ class FileItem(msrest.serialization.Model): _attribute_map = { 'name': {'key': 'Name', 'type': 'str'}, + 'file_id': {'key': 'FileId', 'type': 'str'}, 'properties': {'key': 'Properties', 'type': 'FileProperty'}, + 'attributes': {'key': 'Attributes', 'type': 'str'}, + 'permission_key': {'key': 'PermissionKey', 'type': 'str'}, } _xml_map = { 'name': 'File' @@ -272,7 +297,10 @@ def __init__( ): super(FileItem, self).__init__(**kwargs) self.name = kwargs['name'] + self.file_id = kwargs.get('file_id', None) self.properties = kwargs['properties'] + self.attributes = kwargs.get('attributes', None) + self.permission_key = kwargs.get('permission_key', None) class FileProperty(msrest.serialization.Model): @@ -285,6 +313,18 @@ class FileProperty(msrest.serialization.Model): reflect that fact until the handle is closed or the op-lock is broken. To retrieve current property values, call Get File Properties. :type content_length: long + :param creation_time: + :type creation_time: ~datetime.datetime + :param last_access_time: + :type last_access_time: ~datetime.datetime + :param last_write_time: + :type last_write_time: ~datetime.datetime + :param change_time: + :type change_time: ~datetime.datetime + :param last_modified: + :type last_modified: ~datetime.datetime + :param etag: + :type etag: str """ _validation = { @@ -293,6 +333,12 @@ class FileProperty(msrest.serialization.Model): _attribute_map = { 'content_length': {'key': 'Content-Length', 'type': 'long'}, + 'creation_time': {'key': 'CreationTime', 'type': 'iso-8601'}, + 'last_access_time': {'key': 'LastAccessTime', 'type': 'iso-8601'}, + 'last_write_time': {'key': 'LastWriteTime', 'type': 'iso-8601'}, + 'change_time': {'key': 'ChangeTime', 'type': 'iso-8601'}, + 'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123'}, + 'etag': {'key': 'Etag', 'type': 'str'}, } def __init__( @@ -301,6 +347,12 @@ def __init__( ): super(FileProperty, self).__init__(**kwargs) self.content_length = kwargs['content_length'] + self.creation_time = kwargs.get('creation_time', None) + self.last_access_time = kwargs.get('last_access_time', None) + self.last_write_time = kwargs.get('last_write_time', None) + self.change_time = kwargs.get('change_time', None) + self.last_modified = kwargs.get('last_modified', None) + self.etag = kwargs.get('etag', None) class FileRange(msrest.serialization.Model): @@ -474,6 +526,8 @@ class ListFilesAndDirectoriesSegmentResponse(msrest.serialization.Model): :type segment: ~azure.storage.fileshare.models.FilesAndDirectoriesListSegment :param next_marker: Required. :type next_marker: str + :param directory_id: + :type directory_id: str """ _validation = { @@ -495,6 +549,7 @@ class ListFilesAndDirectoriesSegmentResponse(msrest.serialization.Model): 'max_results': {'key': 'MaxResults', 'type': 'int'}, 'segment': {'key': 'Segment', 'type': 'FilesAndDirectoriesListSegment'}, 'next_marker': {'key': 'NextMarker', 'type': 'str'}, + 'directory_id': {'key': 'DirectoryId', 'type': 'str'}, } _xml_map = { 'name': 'EnumerationResults' @@ -514,6 +569,7 @@ def __init__( self.max_results = kwargs.get('max_results', None) self.segment = kwargs['segment'] self.next_marker = kwargs['next_marker'] + self.directory_id = kwargs.get('directory_id', None) class ListHandlesResponse(msrest.serialization.Model): diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models_py3.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models_py3.py index ecc763b72403..c95e0af95c94 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models_py3.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/models/_models_py3.py @@ -205,6 +205,14 @@ class DirectoryItem(msrest.serialization.Model): :param name: Required. :type name: str + :param file_id: + :type file_id: str + :param properties: File properties. + :type properties: ~azure.storage.fileshare.models.FileProperty + :param attributes: + :type attributes: str + :param permission_key: + :type permission_key: str """ _validation = { @@ -213,6 +221,10 @@ class DirectoryItem(msrest.serialization.Model): _attribute_map = { 'name': {'key': 'Name', 'type': 'str'}, + 'file_id': {'key': 'FileId', 'type': 'str'}, + 'properties': {'key': 'Properties', 'type': 'FileProperty'}, + 'attributes': {'key': 'Attributes', 'type': 'str'}, + 'permission_key': {'key': 'PermissionKey', 'type': 'str'}, } _xml_map = { 'name': 'Directory' @@ -222,10 +234,18 @@ def __init__( self, *, name: str, + file_id: Optional[str] = None, + properties: Optional["FileProperty"] = None, + attributes: Optional[str] = None, + permission_key: Optional[str] = None, **kwargs ): super(DirectoryItem, self).__init__(**kwargs) self.name = name + self.file_id = file_id + self.properties = properties + self.attributes = attributes + self.permission_key = permission_key class FileHTTPHeaders(msrest.serialization.Model): @@ -283,8 +303,14 @@ class FileItem(msrest.serialization.Model): :param name: Required. :type name: str + :param file_id: + :type file_id: str :param properties: Required. File properties. :type properties: ~azure.storage.fileshare.models.FileProperty + :param attributes: + :type attributes: str + :param permission_key: + :type permission_key: str """ _validation = { @@ -294,7 +320,10 @@ class FileItem(msrest.serialization.Model): _attribute_map = { 'name': {'key': 'Name', 'type': 'str'}, + 'file_id': {'key': 'FileId', 'type': 'str'}, 'properties': {'key': 'Properties', 'type': 'FileProperty'}, + 'attributes': {'key': 'Attributes', 'type': 'str'}, + 'permission_key': {'key': 'PermissionKey', 'type': 'str'}, } _xml_map = { 'name': 'File' @@ -305,11 +334,17 @@ def __init__( *, name: str, properties: "FileProperty", + file_id: Optional[str] = None, + attributes: Optional[str] = None, + permission_key: Optional[str] = None, **kwargs ): super(FileItem, self).__init__(**kwargs) self.name = name + self.file_id = file_id self.properties = properties + self.attributes = attributes + self.permission_key = permission_key class FileProperty(msrest.serialization.Model): @@ -322,6 +357,18 @@ class FileProperty(msrest.serialization.Model): reflect that fact until the handle is closed or the op-lock is broken. To retrieve current property values, call Get File Properties. :type content_length: long + :param creation_time: + :type creation_time: ~datetime.datetime + :param last_access_time: + :type last_access_time: ~datetime.datetime + :param last_write_time: + :type last_write_time: ~datetime.datetime + :param change_time: + :type change_time: ~datetime.datetime + :param last_modified: + :type last_modified: ~datetime.datetime + :param etag: + :type etag: str """ _validation = { @@ -330,16 +377,34 @@ class FileProperty(msrest.serialization.Model): _attribute_map = { 'content_length': {'key': 'Content-Length', 'type': 'long'}, + 'creation_time': {'key': 'CreationTime', 'type': 'iso-8601'}, + 'last_access_time': {'key': 'LastAccessTime', 'type': 'iso-8601'}, + 'last_write_time': {'key': 'LastWriteTime', 'type': 'iso-8601'}, + 'change_time': {'key': 'ChangeTime', 'type': 'iso-8601'}, + 'last_modified': {'key': 'Last-Modified', 'type': 'rfc-1123'}, + 'etag': {'key': 'Etag', 'type': 'str'}, } def __init__( self, *, content_length: int, + creation_time: Optional[datetime.datetime] = None, + last_access_time: Optional[datetime.datetime] = None, + last_write_time: Optional[datetime.datetime] = None, + change_time: Optional[datetime.datetime] = None, + last_modified: Optional[datetime.datetime] = None, + etag: Optional[str] = None, **kwargs ): super(FileProperty, self).__init__(**kwargs) self.content_length = content_length + self.creation_time = creation_time + self.last_access_time = last_access_time + self.last_write_time = last_write_time + self.change_time = change_time + self.last_modified = last_modified + self.etag = etag class FileRange(msrest.serialization.Model): @@ -530,6 +595,8 @@ class ListFilesAndDirectoriesSegmentResponse(msrest.serialization.Model): :type segment: ~azure.storage.fileshare.models.FilesAndDirectoriesListSegment :param next_marker: Required. :type next_marker: str + :param directory_id: + :type directory_id: str """ _validation = { @@ -551,6 +618,7 @@ class ListFilesAndDirectoriesSegmentResponse(msrest.serialization.Model): 'max_results': {'key': 'MaxResults', 'type': 'int'}, 'segment': {'key': 'Segment', 'type': 'FilesAndDirectoriesListSegment'}, 'next_marker': {'key': 'NextMarker', 'type': 'str'}, + 'directory_id': {'key': 'DirectoryId', 'type': 'str'}, } _xml_map = { 'name': 'EnumerationResults' @@ -568,6 +636,7 @@ def __init__( share_snapshot: Optional[str] = None, marker: Optional[str] = None, max_results: Optional[int] = None, + directory_id: Optional[str] = None, **kwargs ): super(ListFilesAndDirectoriesSegmentResponse, self).__init__(**kwargs) @@ -580,6 +649,7 @@ def __init__( self.max_results = max_results self.segment = segment self.next_marker = next_marker + self.directory_id = directory_id class ListHandlesResponse(msrest.serialization.Model): diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_directory_operations.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_directory_operations.py index c3505cf7047f..8b241b5a8e30 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_directory_operations.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_directory_operations.py @@ -16,7 +16,7 @@ if TYPE_CHECKING: # pylint: disable=unused-import,ungrouped-imports - from typing import Any, Callable, Dict, Generic, Optional, TypeVar + from typing import Any, Callable, Dict, Generic, List, Optional, TypeVar, Union T = TypeVar('T') ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -46,7 +46,7 @@ def __init__(self, client, config, serializer, deserializer): def create( self, timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] file_permission="inherit", # type: Optional[str] file_permission_key=None, # type: Optional[str] file_attributes="none", # type: str @@ -63,7 +63,7 @@ def create( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param file_permission: If specified the permission (security descriptor) shall be set for the directory/file. This header can be used if Permission size is <= 8KB, else x-ms-file-permission-key header shall be used. Default value: Inherit. If SDDL is specified as @@ -109,7 +109,7 @@ def create( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if file_permission is not None: header_parameters['x-ms-file-permission'] = self._serialize.header("file_permission", file_permission, 'str') @@ -211,7 +211,7 @@ def get_properties( raise HttpResponseError(response=response, model=error) response_headers = {} - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['ETag']=self._deserialize('str', response.headers.get('ETag')) response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) response_headers['x-ms-request-id']=self._deserialize('str', response.headers.get('x-ms-request-id')) @@ -401,7 +401,7 @@ def set_properties( def set_metadata( self, timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] **kwargs # type: Any ): # type: (...) -> None @@ -413,7 +413,7 @@ def set_metadata( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :keyword callable cls: A custom type or function that will be passed the direct response :return: None, or the result of cls(response) :rtype: None @@ -445,7 +445,7 @@ def set_metadata( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') @@ -477,6 +477,8 @@ def list_files_and_directories_segment( marker=None, # type: Optional[str] maxresults=None, # type: Optional[int] timeout=None, # type: Optional[int] + include=None, # type: Optional[List[Union[str, "_models.ListFilesIncludeType"]]] + include_extended_info=None, # type: Optional[bool] **kwargs # type: Any ): # type: (...) -> "_models.ListFilesAndDirectoriesSegmentResponse" @@ -503,6 +505,11 @@ def list_files_and_directories_segment( href="https://docs.microsoft.com/en-us/rest/api/storageservices/Setting-Timeouts-for-File-Service-Operations?redirectedfrom=MSDN">Setting Timeouts for File Service Operations.`. :type timeout: int + :param include: Include this parameter to specify one or more datasets to include in the + response. + :type include: list[str or ~azure.storage.fileshare.models.ListFilesIncludeType] + :param include_extended_info: + :type include_extended_info: bool :keyword callable cls: A custom type or function that will be passed the direct response :return: ListFilesAndDirectoriesSegmentResponse, or the result of cls(response) :rtype: ~azure.storage.fileshare.models.ListFilesAndDirectoriesSegmentResponse @@ -538,10 +545,14 @@ def list_files_and_directories_segment( query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', minimum=1) if timeout is not None: query_parameters['timeout'] = self._serialize.query("timeout", timeout, 'int', minimum=0) + if include is not None: + query_parameters['include'] = self._serialize.query("include", include, '[str]', div=',') # Construct headers header_parameters = {} # type: Dict[str, Any] header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') + if include_extended_info is not None: + header_parameters['x-ms-file-extended-info'] = self._serialize.header("include_extended_info", include_extended_info, 'bool') header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') request = self._client.get(url, query_parameters, header_parameters) diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_file_operations.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_file_operations.py index 25dcf36c3db9..b1e39abb9719 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_file_operations.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_file_operations.py @@ -47,7 +47,7 @@ def create( self, file_content_length, # type: int timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] file_permission="inherit", # type: Optional[str] file_permission_key=None, # type: Optional[str] file_attributes="none", # type: str @@ -68,7 +68,7 @@ def create( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param file_permission: If specified the permission (security descriptor) shall be set for the directory/file. This header can be used if Permission size is <= 8KB, else x-ms-file-permission-key header shall be used. Default value: Inherit. If SDDL is specified as @@ -149,7 +149,7 @@ def create( if _file_content_disposition is not None: header_parameters['x-ms-content-disposition'] = self._serialize.header("file_content_disposition", _file_content_disposition, 'str') if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') if file_permission is not None: header_parameters['x-ms-file-permission'] = self._serialize.header("file_permission", file_permission, 'str') if file_permission_key is not None: @@ -265,7 +265,7 @@ def download( response_headers = {} if response.status_code == 200: response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['Content-Length']=self._deserialize('long', response.headers.get('Content-Length')) response_headers['Content-Type']=self._deserialize('str', response.headers.get('Content-Type')) response_headers['Content-Range']=self._deserialize('str', response.headers.get('Content-Range')) @@ -301,7 +301,7 @@ def download( if response.status_code == 206: response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['Content-Length']=self._deserialize('long', response.headers.get('Content-Length')) response_headers['Content-Type']=self._deserialize('str', response.headers.get('Content-Type')) response_headers['Content-Range']=self._deserialize('str', response.headers.get('Content-Range')) @@ -410,7 +410,7 @@ def get_properties( response_headers = {} response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['x-ms-type']=self._deserialize('str', response.headers.get('x-ms-type')) response_headers['Content-Length']=self._deserialize('long', response.headers.get('Content-Length')) response_headers['Content-Type']=self._deserialize('str', response.headers.get('Content-Type')) @@ -664,7 +664,7 @@ def set_http_headers( def set_metadata( self, timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] lease_access_conditions=None, # type: Optional["_models.LeaseAccessConditions"] **kwargs # type: Any ): @@ -677,7 +677,7 @@ def set_metadata( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param lease_access_conditions: Parameter group. :type lease_access_conditions: ~azure.storage.fileshare.models.LeaseAccessConditions :keyword callable cls: A custom type or function that will be passed the direct response @@ -713,7 +713,7 @@ def set_metadata( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if _lease_id is not None: header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", _lease_id, 'str') @@ -1410,7 +1410,7 @@ def start_copy( self, copy_source, # type: str timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] file_permission="inherit", # type: Optional[str] file_permission_key=None, # type: Optional[str] copy_file_smb_info=None, # type: Optional["_models.CopyFileSmbInfo"] @@ -1434,7 +1434,7 @@ def start_copy( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param file_permission: If specified the permission (security descriptor) shall be set for the directory/file. This header can be used if Permission size is <= 8KB, else x-ms-file-permission-key header shall be used. Default value: Inherit. If SDDL is specified as @@ -1493,7 +1493,7 @@ def start_copy( header_parameters = {} # type: Dict[str, Any] header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-copy-source'] = self._serialize.header("copy_source", copy_source, 'str') if file_permission is not None: header_parameters['x-ms-file-permission'] = self._serialize.header("file_permission", file_permission, 'str') diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_share_operations.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_share_operations.py index d80aa880a4f1..02a94bf1964f 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_share_operations.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_generated/operations/_share_operations.py @@ -46,7 +46,7 @@ def __init__(self, client, config, serializer, deserializer): def create( self, timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] quota=None, # type: Optional[int] access_tier=None, # type: Optional[Union[str, "_models.ShareAccessTier"]] enabled_protocols=None, # type: Optional[str] @@ -63,7 +63,7 @@ def create( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param quota: Specifies the maximum size of the share, in gigabytes. :type quota: int :param access_tier: Specifies the access tier of the share. @@ -101,7 +101,7 @@ def create( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') if quota is not None: header_parameters['x-ms-share-quota'] = self._serialize.header("quota", quota, 'int', minimum=1) if access_tier is not None: @@ -204,7 +204,7 @@ def get_properties( raise HttpResponseError(response=response, model=error) response_headers = {} - response_headers['x-ms-meta']=self._deserialize('{str}', response.headers.get('x-ms-meta')) + response_headers['x-ms-meta']=self._deserialize('str', response.headers.get('x-ms-meta')) response_headers['ETag']=self._deserialize('str', response.headers.get('ETag')) response_headers['Last-Modified']=self._deserialize('rfc-1123', response.headers.get('Last-Modified')) response_headers['x-ms-request-id']=self._deserialize('str', response.headers.get('x-ms-request-id')) @@ -790,7 +790,7 @@ def break_lease( def create_snapshot( self, timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] **kwargs # type: Any ): # type: (...) -> None @@ -802,7 +802,7 @@ def create_snapshot( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :keyword callable cls: A custom type or function that will be passed the direct response :return: None, or the result of cls(response) :rtype: None @@ -834,7 +834,7 @@ def create_snapshot( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') @@ -1099,7 +1099,7 @@ def set_properties( def set_metadata( self, timeout=None, # type: Optional[int] - metadata=None, # type: Optional[Dict[str, str]] + metadata=None, # type: Optional[str] lease_access_conditions=None, # type: Optional["_models.LeaseAccessConditions"] **kwargs # type: Any ): @@ -1112,7 +1112,7 @@ def set_metadata( Timeouts for File Service Operations.`. :type timeout: int :param metadata: A name-value pair to associate with a file storage object. - :type metadata: dict[str, str] + :type metadata: str :param lease_access_conditions: Parameter group. :type lease_access_conditions: ~azure.storage.fileshare.models.LeaseAccessConditions :keyword callable cls: A custom type or function that will be passed the direct response @@ -1150,7 +1150,7 @@ def set_metadata( # Construct headers header_parameters = {} # type: Dict[str, Any] if metadata is not None: - header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, '{str}') + header_parameters['x-ms-meta'] = self._serialize.header("metadata", metadata, 'str') header_parameters['x-ms-version'] = self._serialize.header("self._config.version", self._config.version, 'str') if _lease_id is not None: header_parameters['x-ms-lease-id'] = self._serialize.header("lease_id", _lease_id, 'str') diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py index ef937439dffa..bb324cbcd26c 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py @@ -549,6 +549,8 @@ class DirectoryProperties(DictMixin): :vartype creation_time: str or ~datetime.datetime :ivar last_write_time: Last write time for the file. :vartype last_write_time: str or ~datetime.datetime + :ivar last_access_time: Last access time for the file. + :vartype last_access_time: ~datetime.datetime :ivar file_attributes: The file system attributes for files and directories. :vartype file_attributes: str or :class:`~azure.storage.fileshare.NTFSAttributes` @@ -576,15 +578,21 @@ def __init__(self, **kwargs): self.permission_key = kwargs.get('x-ms-file-permission-key') self.file_id = kwargs.get('x-ms-file-id') self.parent_id = kwargs.get('x-ms-file-parent-id') + self.is_directory = True @classmethod def _from_generated(cls, generated): props = cls() props.name = generated.name + props.file_id = generated.file_id + props.file_attributes = generated.attributes props.last_modified = generated.properties.last_modified + props.creation_time = generated.properties.creation_time + props.last_access_time = generated.properties.last_access_time + props.last_write_time = generated.properties.last_write_time + props.change_time = generated.properties.change_time props.etag = generated.properties.etag - props.server_encrypted = generated.properties.server_encrypted - props.metadata = generated.metadata + props.permission_key = generated.permission_key return props @@ -643,8 +651,8 @@ def _extract_data_cb(self, get_next_return): self.prefix = self._response.prefix self.marker = self._response.marker self.results_per_page = self._response.max_results - self.current_page = [_wrap_item(i) for i in self._response.segment.directory_items] - self.current_page.extend([_wrap_item(i) for i in self._response.segment.file_items]) + self.current_page = [DirectoryProperties._from_generated(i) for i in self._response.segment.directory_items] + self.current_page.extend([FileProperties._from_generated(i) for i in self._response.segment.file_items]) return self._response.next_marker or None, self.current_page @@ -707,14 +715,22 @@ def __init__(self, **kwargs): self.permission_key = kwargs.get('x-ms-file-permission-key') self.file_id = kwargs.get('x-ms-file-id') self.parent_id = kwargs.get('x-ms-file-parent-id') + self.is_directory = False @classmethod def _from_generated(cls, generated): props = cls() props.name = generated.name - props.content_length = generated.properties.content_length - props.metadata = generated.properties.metadata - props.lease = LeaseProperties._from_generated(generated) # pylint: disable=protected-access + props.file_id = generated.file_id + props.etag = generated.properties.etag + props.file_attributes = generated.attributes + props.last_modified = generated.properties.last_modified + props.creation_time = generated.properties.creation_time + props.last_access_time = generated.properties.last_access_time + props.last_write_time = generated.properties.last_write_time + props.change_time = generated.properties.change_time + props.size = generated.properties.content_length + props.permission_key = generated.permission_key return props diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_serialize.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_serialize.py index d8d7d26f1046..85c88448b175 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_serialize.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_serialize.py @@ -16,7 +16,8 @@ '2019-07-07', '2019-12-12', '2020-02-10', - '2020-04-08' + '2020-04-08', + '2020-10-02' ] diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_share_client.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_share_client.py index 2b37a56d807c..15a26a13fefe 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_share_client.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_share_client.py @@ -778,6 +778,19 @@ def list_directories_and_files( An opaque continuation token. This value can be retrieved from the next_marker field of a previous generator object. If specified, this generator will begin returning results from this point. + :keyword list[str] include: + Include this parameter to specify one or more datasets to include in the response. + Possible str values are "timestamps", "Etag", "Attributes", "PermissionKey". + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + + :keyword bool include_extended_info: + If this is set to true, file id will be returned in listed results. + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + :keyword int timeout: The timeout parameter is expressed in seconds. :returns: An auto-paging iterable of dict-like DirectoryProperties and FileProperties diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_directory_client_async.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_directory_client_async.py index d26f28a73cfc..8da17a039362 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_directory_client_async.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_directory_client_async.py @@ -215,6 +215,19 @@ def list_directories_and_files(self, name_starts_with=None, **kwargs): :param str name_starts_with: Filters the results to return only entities whose names begin with the specified prefix. + :keyword list[str] include: + Include this parameter to specify one or more datasets to include in the response. + Possible str values are "timestamps", "Etag", "Attributes", "PermissionKey". + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + + :keyword bool include_extended_info: + If this is set to true, file id will be returned in listed results. + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + :keyword int timeout: The timeout parameter is expressed in seconds. :returns: An auto-paging iterable of dict-like DirectoryProperties and FileProperties diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py index ceca247f915b..c90dbd73a330 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py @@ -11,7 +11,7 @@ from .._shared.response_handlers import return_context_and_deserialized, process_storage_error from .._generated.models import DirectoryItem -from .._models import Handle, ShareProperties +from .._models import Handle, ShareProperties, DirectoryProperties, FileProperties def _wrap_item(item): @@ -173,6 +173,6 @@ async def _extract_data_cb(self, get_next_return): self.prefix = self._response.prefix self.marker = self._response.marker self.results_per_page = self._response.max_results - self.current_page = [_wrap_item(i) for i in self._response.segment.directory_items] - self.current_page.extend([_wrap_item(i) for i in self._response.segment.file_items]) + self.current_page = [DirectoryProperties._from_generated(i) for i in self._response.segment.directory_items] + self.current_page.extend([FileProperties._from_generated(i) for i in self._response.segment.file_items]) return self._response.next_marker or None, self.current_page diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_share_client_async.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_share_client_async.py index 05fc93b88473..0d3d61778400 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_share_client_async.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_share_client_async.py @@ -638,6 +638,19 @@ def list_directories_and_files( # type: ignore An opaque continuation token. This value can be retrieved from the next_marker field of a previous generator object. If specified, this generator will begin returning results from this point. + :keyword list[str] include: + Include this parameter to specify one or more datasets to include in the response. + Possible str values are "timestamps", "Etag", "Attributes", "PermissionKey". + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + + :keyword bool include_extended_info: + If this is set to true, file id will be returned in listed results. + + .. versionadded:: 12.6.0 + This keyword argument was introduced in API version '2020-10-02'. + :keyword int timeout: The timeout parameter is expressed in seconds. :returns: An auto-paging iterable of dict-like DirectoryProperties and FileProperties diff --git a/sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_extended_info.yaml b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_extended_info.yaml new file mode 100644 index 000000000000..4a50d14d1542 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_extended_info.yaml @@ -0,0 +1,203 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:31 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare228d1d46?restype=share + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:31 GMT + etag: + - '"0x8D924C38B034DA7"' + last-modified: + - Tue, 01 Jun 2021 06:07:31 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:31 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare228d1d46/dir1?restype=directory + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:31 GMT + etag: + - '"0x8D924C38B172120"' + last-modified: + - Tue, 01 Jun 2021 06:07:32 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Directory + x-ms-file-change-time: + - '2021-06-01T06:07:32.0407328Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:32.0407328Z' + x-ms-file-id: + - '13835128424026341376' + x-ms-file-last-write-time: + - '2021-06-01T06:07:32.0407328Z' + x-ms-file-parent-id: + - '0' + x-ms-file-permission-key: + - 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:32 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare228d1d46/dir1%2Fsubdir1?restype=directory + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:31 GMT + etag: + - '"0x8D924C38B2B4909"' + last-modified: + - Tue, 01 Jun 2021 06:07:32 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Directory + x-ms-file-change-time: + - '2021-06-01T06:07:32.1728265Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:32.1728265Z' + x-ms-file-id: + - '11529285414812647424' + x-ms-file-last-write-time: + - '2021-06-01T06:07:32.1728265Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-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-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:32 GMT + x-ms-file-extended-info: + - 'true' + x-ms-version: + - '2020-10-02' + method: GET + uri: https://storagename.file.core.windows.net/utshare228d1d46/dir1?restype=directory&comp=list + response: + body: + string: "\uFEFF13835128424026341376subdir111529285414812647424" + headers: + content-type: + - application/xml + date: + - Tue, 01 Jun 2021 06:07:31 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + transfer-encoding: + - chunked + x-ms-version: + - '2020-10-02' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_other_data.yaml b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_other_data.yaml new file mode 100644 index 000000000000..6ab400668570 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory.test_list_subdirectories_and_files_include_other_data.yaml @@ -0,0 +1,707 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:46 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05?restype=share + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C393E25407"' + last-modified: + - Tue, 01 Jun 2021 06:07:46 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:46 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1?restype=directory + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C393F8ED4C"' + last-modified: + - Tue, 01 Jun 2021 06:07:46 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Directory + x-ms-file-change-time: + - '2021-06-01T06:07:46.9422924Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:46.9422924Z' + x-ms-file-id: + - '13835128424026341376' + x-ms-file-last-write-time: + - '2021-06-01T06:07:46.9422924Z' + x-ms-file-parent-id: + - '0' + x-ms-file-permission-key: + - 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1%2Fsubdir1?restype=directory + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C3940DB18E"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Directory + x-ms-file-change-time: + - '2021-06-01T06:07:47.0783886Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:47.0783886Z' + x-ms-file-id: + - '11529285414812647424' + x-ms-file-last-write-time: + - '2021-06-01T06:07:47.0783886Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1%2Fsubdir2?restype=directory + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C39420A0BE"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Directory + x-ms-file-change-time: + - '2021-06-01T06:07:47.2024766Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:47.2024766Z' + x-ms-file-id: + - '16140971433240035328' + x-ms-file-last-write-time: + - '2021-06-01T06:07:47.2024766Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1%2Fsubdir3?restype=directory + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C394353DED"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Directory + x-ms-file-change-time: + - '2021-06-01T06:07:47.3375725Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:47.3375725Z' + x-ms-file-id: + - '10376363910205800448' + x-ms-file-last-write-time: + - '2021-06-01T06:07:47.3375725Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-content-length: + - '5' + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - Inherit + x-ms-type: + - file + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1/file1 + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C3944A5062"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Archive + x-ms-file-change-time: + - '2021-06-01T06:07:47.4756706Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:47.4756706Z' + x-ms-file-id: + - '14988049928633188352' + x-ms-file-last-write-time: + - '2021-06-01T06:07:47.4756706Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 4010187179898695473*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: data1 + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '5' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-range: + - bytes=0-4 + x-ms-version: + - '2020-10-02' + x-ms-write: + - update + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1/file1?comp=range + response: + body: + string: '' + headers: + content-length: + - '0' + content-md5: + - idkDvDXe3nJP1SxRQ3/1/Q== + date: + - Tue, 01 Jun 2021 06:07:46 GMT + etag: + - '"0x8D924C3945E0306"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-content-length: + - '5' + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - Inherit + x-ms-type: + - file + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1/file2 + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:47 GMT + etag: + - '"0x8D924C39472A030"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Archive + x-ms-file-change-time: + - '2021-06-01T06:07:47.7398576Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:47.7398576Z' + x-ms-file-id: + - '12682206919419494400' + x-ms-file-last-write-time: + - '2021-06-01T06:07:47.7398576Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 4010187179898695473*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: data2 + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '5' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-range: + - bytes=0-4 + x-ms-version: + - '2020-10-02' + x-ms-write: + - update + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1/file2?comp=range + response: + body: + string: '' + headers: + content-length: + - '0' + content-md5: + - /5zy1pDYiMszf2v0UmthMA== + date: + - Tue, 01 Jun 2021 06:07:47 GMT + etag: + - '"0x8D924C39487D9AF"' + last-modified: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-content-length: + - '5' + x-ms-date: + - Tue, 01 Jun 2021 06:07:47 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - Inherit + x-ms-type: + - file + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1/file3 + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:47 GMT + etag: + - '"0x8D924C3949C28B0"' + last-modified: + - Tue, 01 Jun 2021 06:07:48 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: + - Archive + x-ms-file-change-time: + - '2021-06-01T06:07:48.0120496Z' + x-ms-file-creation-time: + - '2021-06-01T06:07:48.0120496Z' + x-ms-file-id: + - '17293892937846882304' + x-ms-file-last-write-time: + - '2021-06-01T06:07:48.0120496Z' + x-ms-file-parent-id: + - '13835128424026341376' + x-ms-file-permission-key: + - 4010187179898695473*11459378189709739967 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-02' + status: + code: 201 + message: Created +- request: + body: data3 + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '5' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:48 GMT + x-ms-range: + - bytes=0-4 + x-ms-version: + - '2020-10-02' + x-ms-write: + - update + method: PUT + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1/file3?comp=range + response: + body: + string: '' + headers: + content-length: + - '0' + content-md5: + - eTafePeILBuqu8fUXcXaoA== + date: + - Tue, 01 Jun 2021 06:07:47 GMT + etag: + - '"0x8D924C394B273D4"' + last-modified: + - Tue, 01 Jun 2021 06:07:48 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: + - 'true' + x-ms-version: + - '2020-10-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-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:48 GMT + x-ms-version: + - '2020-10-02' + method: GET + uri: https://storagename.file.core.windows.net/utsharecbe41c05/dir1?restype=directory&comp=list&include=timestamps,Etag,Attributes,PermissionKey + response: + body: + string: "\uFEFF13835128424026341376file11498804992863318835252021-06-01T06:07:47.4756706Z2021-06-01T06:07:47.4756706Z2021-06-01T06:07:47.4756706Z2021-06-01T06:07:47.4756706ZTue, + 01 Jun 2021 06:07:47 GMT\"0x8D924C3945E0306\"Archive4010187179898695473*11459378189709739967file21268220691941949440052021-06-01T06:07:47.7398576Z2021-06-01T06:07:47.7398576Z2021-06-01T06:07:47.7398576Z2021-06-01T06:07:47.7398576ZTue, + 01 Jun 2021 06:07:47 GMT\"0x8D924C39487D9AF\"Archive4010187179898695473*11459378189709739967file31729389293784688230452021-06-01T06:07:48.0120496Z2021-06-01T06:07:48.0120496Z2021-06-01T06:07:48.0120496Z2021-06-01T06:07:48.0120496ZTue, + 01 Jun 2021 06:07:48 GMT\"0x8D924C394B273D4\"Archive4010187179898695473*11459378189709739967subdir1115292854148126474242021-06-01T06:07:47.0783886Z2021-06-01T06:07:47.0783886Z2021-06-01T06:07:47.0783886Z2021-06-01T06:07:47.0783886ZTue, + 01 Jun 2021 06:07:47 GMT\"0x8D924C3940DB18E\"Directory17860367565182308406*11459378189709739967subdir2161409714332400353282021-06-01T06:07:47.2024766Z2021-06-01T06:07:47.2024766Z2021-06-01T06:07:47.2024766Z2021-06-01T06:07:47.2024766ZTue, + 01 Jun 2021 06:07:47 GMT\"0x8D924C39420A0BE\"Directory17860367565182308406*11459378189709739967subdir3103763639102058004482021-06-01T06:07:47.3375725Z2021-06-01T06:07:47.3375725Z2021-06-01T06:07:47.3375725Z2021-06-01T06:07:47.3375725ZTue, + 01 Jun 2021 06:07:47 GMT\"0x8D924C394353DED\"Directory17860367565182308406*11459378189709739967" + headers: + content-type: + - application/xml + date: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + transfer-encoding: + - chunked + x-ms-version: + - '2020-10-02' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:48 GMT + x-ms-version: + - '2020-10-02' + method: DELETE + uri: https://storagename.file.core.windows.net/utsharecbe41c05?restype=share + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 01 Jun 2021 06:07:47 GMT + server: + - Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2020-10-02' + status: + code: 202 + message: Accepted +version: 1 diff --git a/sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_extended_info_async.yaml b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_extended_info_async.yaml new file mode 100644 index 000000000000..8e96895cd3cc --- /dev/null +++ b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_extended_info_async.yaml @@ -0,0 +1,146 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:18 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharea3eb2240?restype=share + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 06:07:18 GMT + etag: '"0x8D924C382F17A28"' + last-modified: Tue, 01 Jun 2021 06:07:18 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utsharea3eb2240?restype=share +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:18 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharea3eb2240/dir1?restype=directory + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 06:07:18 GMT + etag: '"0x8D924C382FBFD59"' + last-modified: Tue, 01 Jun 2021 06:07:18 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Directory + x-ms-file-change-time: '2021-06-01T06:07:18.4410969Z' + x-ms-file-creation-time: '2021-06-01T06:07:18.4410969Z' + x-ms-file-id: '13835128424026341376' + x-ms-file-last-write-time: '2021-06-01T06:07:18.4410969Z' + x-ms-file-parent-id: '0' + x-ms-file-permission-key: 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utsharea3eb2240/dir1?restype=directory +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:18 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utsharea3eb2240/dir1%2Fsubdir1?restype=directory + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 06:07:18 GMT + etag: '"0x8D924C383048A67"' + last-modified: Tue, 01 Jun 2021 06:07:18 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Directory + x-ms-file-change-time: '2021-06-01T06:07:18.4971367Z' + x-ms-file-creation-time: '2021-06-01T06:07:18.4971367Z' + x-ms-file-id: '11529285414812647424' + x-ms-file-last-write-time: '2021-06-01T06:07:18.4971367Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utsharea3eb2240/dir1%2Fsubdir1?restype=directory +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 06:07:18 GMT + x-ms-file-extended-info: + - 'true' + x-ms-version: + - '2020-10-02' + method: GET + uri: https://storagename.file.core.windows.net/utsharea3eb2240/dir1?restype=directory&comp=list + response: + body: + string: "\uFEFF13835128424026341376subdir111529285414812647424" + headers: + content-type: application/xml + date: Tue, 01 Jun 2021 06:07:18 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + transfer-encoding: chunked + x-ms-version: '2020-10-02' + status: + code: 200 + message: OK + url: https://seanmcccanary3.file.core.windows.net/utsharea3eb2240/dir1?restype=directory&comp=list +version: 1 diff --git a/sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_other_data_async.yaml b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_other_data_async.yaml new file mode 100644 index 000000000000..0259c916a87f --- /dev/null +++ b/sdk/storage/azure-storage-file-share/tests/recordings/test_directory_async.test_list_subdirectories_and_files_include_other_data_async.yaml @@ -0,0 +1,488 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff?restype=share + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:00 GMT + etag: '"0x8D924C06627972D"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff?restype=share +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1?restype=directory + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C06634C7DB"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Directory + x-ms-file-change-time: '2021-06-01T05:45:01.6691675Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.6691675Z' + x-ms-file-id: '13835128424026341376' + x-ms-file-last-write-time: '2021-06-01T05:45:01.6691675Z' + x-ms-file-parent-id: '0' + x-ms-file-permission-key: 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1?restype=directory +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1%2Fsubdir1?restype=directory + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0663E8DA6"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Directory + x-ms-file-change-time: '2021-06-01T05:45:01.7332134Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.7332134Z' + x-ms-file-id: '11529285414812647424' + x-ms-file-last-write-time: '2021-06-01T05:45:01.7332134Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1%2Fsubdir1?restype=directory +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-content-length: + - '5' + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - Inherit + x-ms-type: + - file + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1/file3 + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0665A7F2A"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Archive + x-ms-file-change-time: '2021-06-01T05:45:01.9163434Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.9163434Z' + x-ms-file-id: '13835093239654252544' + x-ms-file-last-write-time: '2021-06-01T05:45:01.9163434Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 4010187179898695473*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1/file3 +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1%2Fsubdir3?restype=directory + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0665CF097"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Directory + x-ms-file-change-time: '2021-06-01T05:45:01.9323543Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.9323543Z' + x-ms-file-id: '13835163608398430208' + x-ms-file-last-write-time: '2021-06-01T05:45:01.9323543Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1%2Fsubdir3?restype=directory +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-content-length: + - '5' + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - Inherit + x-ms-type: + - file + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1/file2 + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0665D3EC1"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Archive + x-ms-file-change-time: '2021-06-01T05:45:01.9343553Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.9343553Z' + x-ms-file-id: '13835075647468208128' + x-ms-file-last-write-time: '2021-06-01T05:45:01.9343553Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 4010187179898695473*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1/file2 +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-content-length: + - '5' + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - Inherit + x-ms-type: + - file + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1/file1 + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0665DDB22"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Archive + x-ms-file-change-time: '2021-06-01T05:45:01.9383586Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.9383586Z' + x-ms-file-id: '13835146016212385792' + x-ms-file-last-write-time: '2021-06-01T05:45:01.9383586Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 4010187179898695473*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1/file1 +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-file-attributes: + - none + x-ms-file-creation-time: + - now + x-ms-file-last-write-time: + - now + x-ms-file-permission: + - inherit + x-ms-version: + - '2020-10-02' + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1%2Fsubdir2?restype=directory + response: + body: + string: '' + headers: + content-length: '0' + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0665E9E91"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-file-attributes: Directory + x-ms-file-change-time: '2021-06-01T05:45:01.9433617Z' + x-ms-file-creation-time: '2021-06-01T05:45:01.9433617Z' + x-ms-file-id: '13835110831840296960' + x-ms-file-last-write-time: '2021-06-01T05:45:01.9433617Z' + x-ms-file-parent-id: '13835128424026341376' + x-ms-file-permission-key: 17860367565182308406*11459378189709739967 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1%2Fsubdir2?restype=directory +- request: + body: data3 + headers: + Accept: + - application/xml + Content-Length: + - '5' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-range: + - bytes=0-4 + x-ms-version: + - '2020-10-02' + x-ms-write: + - update + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1/file3?comp=range + response: + body: + string: '' + headers: + content-length: '0' + content-md5: eTafePeILBuqu8fUXcXaoA== + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C06663F6C2"' + last-modified: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1/file3?comp=range +- request: + body: data2 + headers: + Accept: + - application/xml + Content-Length: + - '5' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:01 GMT + x-ms-range: + - bytes=0-4 + x-ms-version: + - '2020-10-02' + x-ms-write: + - update + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1/file2?comp=range + response: + body: + string: '' + headers: + content-length: '0' + content-md5: /5zy1pDYiMszf2v0UmthMA== + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0666B722E"' + last-modified: Tue, 01 Jun 2021 05:45:02 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1/file2?comp=range +- request: + body: data1 + headers: + Accept: + - application/xml + Content-Length: + - '5' + Content-Type: + - application/octet-stream + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:02 GMT + x-ms-range: + - bytes=0-4 + x-ms-version: + - '2020-10-02' + x-ms-write: + - update + method: PUT + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1/file1?comp=range + response: + body: + string: '' + headers: + content-length: '0' + content-md5: idkDvDXe3nJP1SxRQ3/1/Q== + date: Tue, 01 Jun 2021 05:45:01 GMT + etag: '"0x8D924C0666B722E"' + last-modified: Tue, 01 Jun 2021 05:45:02 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-server-encrypted: 'true' + x-ms-version: '2020-10-02' + status: + code: 201 + message: Created + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1/file1?comp=range +- request: + body: null + headers: + Accept: + - application/xml + User-Agent: + - azsdk-python-storage-file-share/12.5.0b1 Python/3.7.3 (Windows-10-10.0.19041-SP0) + x-ms-date: + - Tue, 01 Jun 2021 05:45:02 GMT + x-ms-version: + - '2020-10-02' + method: GET + uri: https://storagename.file.core.windows.net/utshare3e5420ff/dir1?restype=directory&comp=list&include=timestamps,Etag,Attributes,PermissionKey + response: + body: + string: "\uFEFF13835128424026341376file11383514601621238579252021-06-01T05:45:01.9383586Z2021-06-01T05:45:01.9383586Z2021-06-01T05:45:01.9383586Z2021-06-01T05:45:01.9383586ZTue, + 01 Jun 2021 05:45:02 GMT\"0x8D924C0666B722E\"Archive4010187179898695473*11459378189709739967file21383507564746820812852021-06-01T05:45:01.9343553Z2021-06-01T05:45:01.9343553Z2021-06-01T05:45:01.9343553Z2021-06-01T05:45:01.9343553ZTue, + 01 Jun 2021 05:45:02 GMT\"0x8D924C0666B722E\"Archive4010187179898695473*11459378189709739967file31383509323965425254452021-06-01T05:45:01.9163434Z2021-06-01T05:45:01.9163434Z2021-06-01T05:45:01.9163434Z2021-06-01T05:45:01.9163434ZTue, + 01 Jun 2021 05:45:01 GMT\"0x8D924C06663F6C2\"Archive4010187179898695473*11459378189709739967subdir1115292854148126474242021-06-01T05:45:01.7332134Z2021-06-01T05:45:01.7332134Z2021-06-01T05:45:01.7332134Z2021-06-01T05:45:01.7332134ZTue, + 01 Jun 2021 05:45:01 GMT\"0x8D924C0663E8DA6\"Directory17860367565182308406*11459378189709739967subdir2138351108318402969602021-06-01T05:45:01.9433617Z2021-06-01T05:45:01.9433617Z2021-06-01T05:45:01.9433617Z2021-06-01T05:45:01.9433617ZTue, + 01 Jun 2021 05:45:01 GMT\"0x8D924C0665E9E91\"Directory17860367565182308406*11459378189709739967subdir3138351636083984302082021-06-01T05:45:01.9323543Z2021-06-01T05:45:01.9323543Z2021-06-01T05:45:01.9323543Z2021-06-01T05:45:01.9323543ZTue, + 01 Jun 2021 05:45:01 GMT\"0x8D924C0665CF097\"Directory17860367565182308406*11459378189709739967" + headers: + content-type: application/xml + date: Tue, 01 Jun 2021 05:45:01 GMT + server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0 + transfer-encoding: chunked + x-ms-version: '2020-10-02' + status: + code: 200 + message: OK + url: https://seanmcccanary3.file.core.windows.net/utshare3e5420ff/dir1?restype=directory&comp=list&include=timestamps,Etag,Attributes,PermissionKey +version: 1 diff --git a/sdk/storage/azure-storage-file-share/tests/test_directory.py b/sdk/storage/azure-storage-file-share/tests/test_directory.py index 4b57f77a5822..b17056c82702 100644 --- a/sdk/storage/azure-storage-file-share/tests/test_directory.py +++ b/sdk/storage/azure-storage-file-share/tests/test_directory.py @@ -32,7 +32,10 @@ def _setup(self, storage_account, storage_account_key): self.share_name = self.get_resource_name('utshare') if not self.is_playback(): - self.fsc.create_share(self.share_name) + try: + self.fsc.create_share(self.share_name) + except: + pass def _teardown(self, FILE_PATH): if os.path.isfile(FILE_PATH): @@ -366,16 +369,60 @@ def test_list_subdirectories_and_files(self, resource_group, location, storage_a list_dir = list(directory.list_directories_and_files()) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'subdir2', 'is_directory': True}, - {'name': 'subdir3', 'is_directory': True}, - {'name': 'file1', 'is_directory': False, 'size': 5}, - {'name': 'file2', 'is_directory': False, 'size': 5}, - {'name': 'file3', 'is_directory': False, 'size': 5}, - ] self.assertEqual(len(list_dir), 6) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'subdir2') + self.assertEqual(list_dir[1]['is_directory'], True) + self.assertEqual(list_dir[2]['name'], 'subdir3') + self.assertEqual(list_dir[2]['is_directory'], True) + self.assertEqual(list_dir[3]['name'], 'file1') + self.assertEqual(list_dir[3]['is_directory'], False) + self.assertEqual(list_dir[4]['name'], 'file2') + self.assertEqual(list_dir[4]['is_directory'], False) + self.assertEqual(list_dir[5]['name'], 'file3') + self.assertEqual(list_dir[5]['is_directory'], False) + + @GlobalStorageAccountPreparer() + def test_list_subdirectories_and_files_include_other_data(self, resource_group, location, storage_account, storage_account_key): + self._setup(storage_account, storage_account_key) + share_client = self.fsc.get_share_client(self.share_name) + directory = share_client.create_directory('dir1') + directory.create_subdirectory("subdir1") + directory.create_subdirectory("subdir2") + directory.create_subdirectory("subdir3") + directory.upload_file("file1", "data1") + directory.upload_file("file2", "data2") + directory.upload_file("file3", "data3") + + # Act + list_dir = list(directory.list_directories_and_files(include=["timestamps", "Etag", "Attributes", "PermissionKey"])) + + self.assertEqual(len(list_dir), 6) + self.assertIsNotNone(list_dir[0].etag) + self.assertIsNotNone(list_dir[1].file_attributes) + self.assertIsNotNone(list_dir[1].last_access_time) + self.assertIsNotNone(list_dir[1].last_write_time) + self.assertIsNotNone(list_dir[2].change_time) + self.assertIsNotNone(list_dir[2].creation_time) + self.assertIsNotNone(list_dir[2].file_id) + try: + share_client.delete_share() + except: + pass + + @GlobalStorageAccountPreparer() + def test_list_subdirectories_and_files_include_extended_info(self, resource_group, location, storage_account, storage_account_key): + self._setup(storage_account, storage_account_key) + share_client = self.fsc.get_share_client(self.share_name) + directory = share_client.create_directory('dir1') + directory.create_subdirectory("subdir1") + + list_dir = list(directory.list_directories_and_files(include_extended_info=True)) + self.assertEqual(len(list_dir), 1) + self.assertIsNotNone(list_dir[0].file_id) + self.assertIsNone(list_dir[0].file_attributes) + self.assertIsNone(list_dir[0].last_access_time) @GlobalStorageAccountPreparer() def test_list_subdirectories_and_files_with_prefix(self, resource_group, location, storage_account, storage_account_key): @@ -393,13 +440,13 @@ def test_list_subdirectories_and_files_with_prefix(self, resource_group, locatio list_dir = list(directory.list_directories_and_files(name_starts_with="sub")) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'subdir2', 'is_directory': True}, - {'name': 'subdir3', 'is_directory': True}, - ] self.assertEqual(len(list_dir), 3) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'subdir2') + self.assertEqual(list_dir[1]['is_directory'], True) + self.assertEqual(list_dir[2]['name'], 'subdir3') + self.assertEqual(list_dir[2]['is_directory'], True) @GlobalStorageAccountPreparer() def test_list_subdirectories_and_files_with_snapshot(self, resource_group, location, storage_account, storage_account_key): @@ -422,13 +469,14 @@ def test_list_subdirectories_and_files_with_snapshot(self, resource_group, locat list_dir = list(snapshot_dir.list_directories_and_files()) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'subdir2', 'is_directory': True}, - {'name': 'file1', 'is_directory': False, 'size': 5}, - ] self.assertEqual(len(list_dir), 3) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'subdir2') + self.assertEqual(list_dir[1]['is_directory'], True) + self.assertEqual(list_dir[2]['name'], 'file1') + self.assertEqual(list_dir[2]['is_directory'], False) + self.assertEqual(list_dir[2]['size'], 5) @GlobalStorageAccountPreparer() def test_list_nested_subdirectories_and_files(self, resource_group, location, storage_account, storage_account_key): @@ -446,12 +494,12 @@ def test_list_nested_subdirectories_and_files(self, resource_group, location, st list_dir = list(directory.list_directories_and_files()) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'file1', 'is_directory': False, 'size': 5}, - ] self.assertEqual(len(list_dir), 2) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'file1') + self.assertEqual(list_dir[1]['is_directory'], False) + self.assertEqual(list_dir[1]['size'], 5) @GlobalStorageAccountPreparer() def test_delete_directory_with_existing_share(self, resource_group, location, storage_account, storage_account_key): diff --git a/sdk/storage/azure-storage-file-share/tests/test_directory_async.py b/sdk/storage/azure-storage-file-share/tests/test_directory_async.py index 05257579a665..5716b69112d3 100644 --- a/sdk/storage/azure-storage-file-share/tests/test_directory_async.py +++ b/sdk/storage/azure-storage-file-share/tests/test_directory_async.py @@ -426,16 +426,77 @@ async def test_list_subdirectories_and_files_async(self, resource_group, locatio list_dir.append(d) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'subdir2', 'is_directory': True}, - {'name': 'subdir3', 'is_directory': True}, - {'name': 'file1', 'is_directory': False, 'size': 5}, - {'name': 'file2', 'is_directory': False, 'size': 5}, - {'name': 'file3', 'is_directory': False, 'size': 5}, - ] self.assertEqual(len(list_dir), 6) - self.assertEqual(list_dir, expected) + self.assertEqual(len(list_dir), 6) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'subdir2') + self.assertEqual(list_dir[1]['is_directory'], True) + self.assertEqual(list_dir[2]['name'], 'subdir3') + self.assertEqual(list_dir[2]['is_directory'], True) + self.assertEqual(list_dir[3]['name'], 'file1') + self.assertEqual(list_dir[3]['is_directory'], False) + self.assertEqual(list_dir[3]['size'], 5) + self.assertEqual(list_dir[4]['name'], 'file2') + self.assertEqual(list_dir[4]['is_directory'], False) + self.assertEqual(list_dir[4]['size'], 5) + self.assertEqual(list_dir[5]['name'], 'file3') + self.assertEqual(list_dir[5]['is_directory'], False) + self.assertEqual(list_dir[5]['size'], 5) + + @GlobalStorageAccountPreparer() + @AsyncStorageTestCase.await_prepared_test + async def test_list_subdirectories_and_files_include_other_data_async(self, resource_group, location, storage_account, storage_account_key): + # Arrange + await self._setup(storage_account, storage_account_key) + share_client = self.fsc.get_share_client(self.share_name) + directory = await share_client.create_directory('dir1') + await asyncio.gather( + directory.create_subdirectory("subdir1"), + directory.create_subdirectory("subdir2"), + directory.create_subdirectory("subdir3"), + directory.upload_file("file1", "data1"), + directory.upload_file("file2", "data2"), + directory.upload_file("file3", "data3")) + + # Act + list_dir = [] + async for d in directory.list_directories_and_files(include=["timestamps", "Etag", "Attributes", "PermissionKey"]): + list_dir.append(d) + + self.assertEqual(len(list_dir), 6) + self.assertIsNotNone(list_dir[0].etag) + self.assertIsNotNone(list_dir[1].file_attributes) + self.assertIsNotNone(list_dir[1].last_access_time) + self.assertIsNotNone(list_dir[1].last_write_time) + self.assertIsNotNone(list_dir[2].change_time) + self.assertIsNotNone(list_dir[2].creation_time) + self.assertIsNotNone(list_dir[2].file_id) + + try: + await share_client.delete_share() + except: + pass + + @GlobalStorageAccountPreparer() + @AsyncStorageTestCase.await_prepared_test + async def test_list_subdirectories_and_files_include_extended_info_async(self, resource_group, location, storage_account, storage_account_key): + # Arrange + await self._setup(storage_account, storage_account_key) + share_client = self.fsc.get_share_client(self.share_name) + directory = await share_client.create_directory('dir1') + await asyncio.gather( + directory.create_subdirectory("subdir1")) + + # Act + list_dir = [] + async for d in directory.list_directories_and_files(include_extended_info=True): + list_dir.append(d) + + self.assertEqual(len(list_dir), 1) + self.assertIsNotNone(list_dir[0].file_id) + self.assertIsNone(list_dir[0].file_attributes) + self.assertIsNone(list_dir[0].last_access_time) @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test @@ -458,13 +519,13 @@ async def test_list_subdirectories_and_files_with_prefix_async(self, resource_gr list_dir.append(d) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'subdir2', 'is_directory': True}, - {'name': 'subdir3', 'is_directory': True}, - ] self.assertEqual(len(list_dir), 3) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'subdir2') + self.assertEqual(list_dir[1]['is_directory'], True) + self.assertEqual(list_dir[2]['name'], 'subdir3') + self.assertEqual(list_dir[2]['is_directory'], True) @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test @@ -493,13 +554,14 @@ async def test_list_subdirectories_and_files_with_snapshot_async(self, resource_ list_dir.append(d) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'subdir2', 'is_directory': True}, - {'name': 'file1', 'is_directory': False, 'size': 5}, - ] self.assertEqual(len(list_dir), 3) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'subdir2') + self.assertEqual(list_dir[1]['is_directory'], True) + self.assertEqual(list_dir[2]['name'], 'file1') + self.assertEqual(list_dir[2]['is_directory'], False) + self.assertEqual(list_dir[2]['size'], 5) @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test @@ -522,12 +584,12 @@ async def test_list_nested_subdirectories_and_files_async(self, resource_group, list_dir.append(d) # Assert - expected = [ - {'name': 'subdir1', 'is_directory': True}, - {'name': 'file1', 'is_directory': False, 'size': 5}, - ] self.assertEqual(len(list_dir), 2) - self.assertEqual(list_dir, expected) + self.assertEqual(list_dir[0]['name'], 'subdir1') + self.assertEqual(list_dir[0]['is_directory'], True) + self.assertEqual(list_dir[1]['name'], 'file1') + self.assertEqual(list_dir[1]['is_directory'], False) + self.assertEqual(list_dir[1]['size'], 5) @GlobalStorageAccountPreparer() @AsyncStorageTestCase.await_prepared_test From a3bcdd4886cf4aa72826375db6c7840660d0f581 Mon Sep 17 00:00:00 2001 From: xiafu Date: Fri, 4 Jun 2021 11:06:29 -0700 Subject: [PATCH 2/2] fix pylint --- .../azure/storage/fileshare/_models.py | 6 ++++-- .../azure/storage/fileshare/aio/_models.py | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py index bb324cbcd26c..0f7a2fa38538 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/_models.py @@ -574,6 +574,7 @@ def __init__(self, **kwargs): self.change_time = _parse_datetime_from_str(kwargs.get('x-ms-file-change-time')) self.creation_time = _parse_datetime_from_str(kwargs.get('x-ms-file-creation-time')) self.last_write_time = _parse_datetime_from_str(kwargs.get('x-ms-file-last-write-time')) + self.last_access_time = None self.file_attributes = kwargs.get('x-ms-file-attributes') self.permission_key = kwargs.get('x-ms-file-permission-key') self.file_id = kwargs.get('x-ms-file-id') @@ -651,8 +652,8 @@ def _extract_data_cb(self, get_next_return): self.prefix = self._response.prefix self.marker = self._response.marker self.results_per_page = self._response.max_results - self.current_page = [DirectoryProperties._from_generated(i) for i in self._response.segment.directory_items] - self.current_page.extend([FileProperties._from_generated(i) for i in self._response.segment.file_items]) + self.current_page = [DirectoryProperties._from_generated(i) for i in self._response.segment.directory_items] # pylint: disable = protected-access + self.current_page.extend([FileProperties._from_generated(i) for i in self._response.segment.file_items]) # pylint: disable = protected-access return self._response.next_marker or None, self.current_page @@ -711,6 +712,7 @@ def __init__(self, **kwargs): self.change_time = _parse_datetime_from_str(kwargs.get('x-ms-file-change-time')) self.creation_time = _parse_datetime_from_str(kwargs.get('x-ms-file-creation-time')) self.last_write_time = _parse_datetime_from_str(kwargs.get('x-ms-file-last-write-time')) + self.last_access_time = None self.file_attributes = kwargs.get('x-ms-file-attributes') self.permission_key = kwargs.get('x-ms-file-permission-key') self.file_id = kwargs.get('x-ms-file-id') diff --git a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py index c90dbd73a330..e81133c616fb 100644 --- a/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py +++ b/sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_models.py @@ -173,6 +173,6 @@ async def _extract_data_cb(self, get_next_return): self.prefix = self._response.prefix self.marker = self._response.marker self.results_per_page = self._response.max_results - self.current_page = [DirectoryProperties._from_generated(i) for i in self._response.segment.directory_items] - self.current_page.extend([FileProperties._from_generated(i) for i in self._response.segment.file_items]) + self.current_page = [DirectoryProperties._from_generated(i) for i in self._response.segment.directory_items] # pylint: disable = protected-access + self.current_page.extend([FileProperties._from_generated(i) for i in self._response.segment.file_items]) # pylint: disable = protected-access return self._response.next_marker or None, self.current_page