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..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
@@ -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`
@@ -572,19 +574,26 @@ 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')
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 +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 = [_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] # 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
@@ -703,18 +712,27 @@ 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')
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/_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..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
@@ -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] # 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
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