Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
512d5a4
[File][RestParity]Rest Parity Sync
xiafu-msft Aug 29, 2019
8bed721
[File][RestParity]Rest Parity Async
xiafu-msft Aug 29, 2019
22b801a
[File][RestParity]Add Rest Parity Async Recording Files
xiafu-msft Aug 29, 2019
bfd3fbd
[File][RestParity]Fix CI
xiafu-msft Sep 6, 2019
7707acf
[File][RestParity]Recording again to fix CI
xiafu-msft Sep 6, 2019
e945a70
Add Generated Code
xiafu-msft Sep 6, 2019
8c821a6
Stylistic Things and Record
xiafu-msft Sep 6, 2019
8c5c22c
[Swagger][BugFix]workaround to fix swagger generated code
xiafu-msft Sep 9, 2019
d46e3dc
[File][RestParity]Add Create_Permission API and Test
xiafu-msft Sep 9, 2019
fcf0ec6
Fix Test
xiafu-msft Sep 9, 2019
3c6b3e0
Fix Pylint
xiafu-msft Sep 9, 2019
62dc377
Revert the workaround
xiafu-msft Sep 9, 2019
3d00c52
[File][RestParity]Tweak Documentation and Tests
xiafu-msft Sep 9, 2019
9afed1d
delete .dat file
xiafu-msft Sep 9, 2019
bd9f32e
[File][RestParity]Rest Parity Async
xiafu-msft Aug 29, 2019
99a07ad
[Blob][IdentitySAS]Add Identity SAS
xiafu-msft Aug 30, 2019
e7811c1
[Blob][IdentitySAS]Stylistic Things
xiafu-msft Sep 9, 2019
a565b90
[Blob][IdentitySAS]Stylistic Things
xiafu-msft Sep 9, 2019
aed02d4
[Blob][IdentitySAS]Add account_name parameter
xiafu-msft Sep 9, 2019
17540b4
Fix Pylint
xiafu-msft Sep 9, 2019
9c327cc
Merge branch 'feature/storage-preview3' into identity-sas
xiafu-msft Sep 9, 2019
450a66e
Merge branch 'feature/storage-preview3' into identity-sas
xiafu-msft Sep 9, 2019
969816b
Fix Pylint
xiafu-msft Sep 10, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[File][RestParity]Add Create_Permission API and Test
  • Loading branch information
xiafu-msft committed Sep 9, 2019
commit d46e3dca048854e2e7082f75e9140898ebfcb613
14 changes: 12 additions & 2 deletions sdk/storage/azure-storage-file/azure/storage/file/_deserialize.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,19 @@ def deserialize_file_stream(response, obj, headers):
return response.location_mode, obj


def _deserialize_permission(response):
def deserialize_permission(response, obj, headers):
'''
Extracts out file permission
'''

return response.body
return obj.permission


def deserialize_permission_key(response, obj, headers):
'''
Extracts out file permission key
'''

if response is None or headers is None:
return None
return headers.get('x-ms-file-permission-key', None)
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
StorageErrorException,
SignedIdentifier,
DeleteSnapshotsOptionType)
from .._deserialize import deserialize_share_properties
from .._deserialize import deserialize_share_properties, deserialize_permission
from ..share_client import ShareClient as ShareClientBase
from .directory_client_async import DirectoryClient
from .file_client_async import FileClient
Expand Down Expand Up @@ -457,12 +457,38 @@ def list_directories_and_files( # type: ignore
return directory.list_directories_and_files(
name_starts_with=name_starts_with, marker=marker, timeout=timeout, **kwargs)

@distributed_trace_async
async def create_permission_for_share(self, file_permission, # type: str
timeout=None, # type: Optional[int]
**kwargs # type: Any
):
# type: (...) -> str
"""
Create a permission(a security descriptor) at the share level.
This 'permission' can be used for the files/directories in the share.
If a 'permission' already exists, it shall return the key of it, else
creates a new permission at the share level and return its key.

:param str file_permission:
File permission, a Portable SDDL
:param int timeout:
The timeout parameter is expressed in seconds.
:returns a file permission key
:rtype str
"""
options = self._create_permission_for_share_options(file_permission, timeout=timeout, **kwargs)
try:
return await self._client.share.create_permission(**options)
except StorageErrorException as error:
process_storage_error(error)

@distributed_trace_async
async def get_permission_for_share( # type: ignore
self, file_permission_key, # type: str
timeout=None, # type: Optional[int]
**kwargs # type: Any
):
# type: (...) -> str
"""
Get a permission(a security descriptor) for a given key.
This 'permission' can be used for the files/directories in the share.
Expand All @@ -477,6 +503,7 @@ async def get_permission_for_share( # type: ignore
try:
return await self._client.share.get_permission( # type: ignore
file_permission_key=file_permission_key,
cls=deserialize_permission,
timeout=timeout,
**kwargs)
except StorageErrorException as error:
Expand Down
43 changes: 41 additions & 2 deletions sdk/storage/azure-storage-file/azure/storage/file/share_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@
from ._generated.models import (
StorageErrorException,
SignedIdentifier,
DeleteSnapshotsOptionType)
from ._deserialize import deserialize_share_properties
DeleteSnapshotsOptionType,
SharePermission)
from ._deserialize import deserialize_share_properties, deserialize_permission_key, deserialize_permission
from .directory_client import DirectoryClient
from .file_client import FileClient
from ._shared_access_signature import FileSharedAccessSignature
Expand Down Expand Up @@ -623,12 +624,49 @@ def list_directories_and_files( # type: ignore
return directory.list_directories_and_files(
name_starts_with=name_starts_with, marker=marker, timeout=timeout, **kwargs)

@staticmethod
def _create_permission_for_share_options(file_permission, # type: str
**kwargs):
options = {
'share_permission': SharePermission(permission=file_permission),
'cls': deserialize_permission_key,
'timeout': kwargs.pop('timeout', None),
}
options.update(kwargs)
return options

@distributed_trace
def create_permission_for_share(self, file_permission, # type: str
timeout=None, # type: Optional[int]
**kwargs # type: Any
):
# type: (...) -> str
"""
Create a permission(a security descriptor) at the share level.
This 'permission' can be used for the files/directories in the share.
If a 'permission' already exists, it shall return the key of it, else
creates a new permission at the share level and return its key.

:param str file_permission:
File permission, a Portable SDDL
:param int timeout:
The timeout parameter is expressed in seconds.
:returns a file permission key
:rtype str
"""
options = self._create_permission_for_share_options(file_permission, timeout=timeout, **kwargs)
try:
return self._client.share.create_permission(**options)
except StorageErrorException as error:
process_storage_error(error)

@distributed_trace
def get_permission_for_share( # type: ignore
self, file_permission_key, # type: str
timeout=None, # type: Optional[int]
**kwargs # type: Any
):
# type: (...) -> str
"""
Get a permission(a security descriptor) for a given key.
This 'permission' can be used for the files/directories in the share.
Expand All @@ -643,6 +681,7 @@ def get_permission_for_share( # type: ignore
try:
return self._client.share.get_permission( # type: ignore
file_permission_key=file_permission_key,
cls=deserialize_permission,
timeout=timeout,
**kwargs)
except StorageErrorException as error:
Expand Down
Loading