Skip to content

Commit ed4a59c

Browse files
[Storage] [Named Keywords] [File Share] _lease.pyi and aio (#41761)
1 parent c817ff5 commit ed4a59c

File tree

4 files changed

+146
-49
lines changed

4 files changed

+146
-49
lines changed

sdk/storage/azure-storage-file-share/azure/storage/fileshare/_lease.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,19 @@
66
# pylint: disable=docstring-keyword-should-match-keyword-only
77

88
import uuid
9+
from typing import Any, cast, Optional, Union, TYPE_CHECKING
910

10-
from typing import Union, Optional, Any, TYPE_CHECKING
11-
12-
from azure.core.tracing.decorator import distributed_trace
1311
from azure.core.exceptions import HttpResponseError
14-
15-
from ._shared.response_handlers import return_response_headers, process_storage_error
12+
from azure.core.tracing.decorator import distributed_trace
1613
from ._generated.operations import FileOperations, ShareOperations
14+
from ._shared.response_handlers import return_response_headers, process_storage_error
1715

1816
if TYPE_CHECKING:
1917
from datetime import datetime
2018
from azure.storage.fileshare import ShareClient, ShareFileClient
2119

2220

23-
class ShareLeaseClient(object): # pylint: disable=client-accepts-api-version-keyword
21+
class ShareLeaseClient: # pylint: disable=client-accepts-api-version-keyword
2422
"""Creates a new ShareLeaseClient.
2523
2624
This client provides lease operations on a ShareClient or ShareFileClient.
@@ -248,4 +246,4 @@ def break_lease(self, **kwargs: Any) -> int:
248246
**kwargs)
249247
except HttpResponseError as error:
250248
process_storage_error(error)
251-
return response.get('lease_time') # type: ignore
249+
return cast(int, response.get('lease_time'))
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# -------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for
4+
# license information.
5+
# --------------------------------------------------------------------------
6+
# pylint: skip-file
7+
8+
from datetime import datetime
9+
from types import TracebackType
10+
from typing import Union, Optional, Any
11+
12+
from typing_extensions import Self
13+
14+
from azure.core.tracing.decorator import distributed_trace
15+
from ._file_client import ShareFileClient
16+
from ._share_client import ShareClient
17+
18+
class ShareLeaseClient:
19+
id: str
20+
etag: Optional[str]
21+
last_modified: Optional[datetime]
22+
def __init__(self, client: Union[ShareFileClient, ShareClient], lease_id: Optional[str] = None) -> None: ...
23+
def __enter__(self) -> Self: ...
24+
def __exit__(
25+
self, typ: Optional[type[BaseException]], exc: Optional[BaseException], tb: Optional[TracebackType]
26+
) -> None: ...
27+
@distributed_trace
28+
def acquire(self, *, lease_duration: int = -1, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
29+
@distributed_trace
30+
def renew(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
31+
@distributed_trace
32+
def release(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
33+
@distributed_trace
34+
def change(self, proposed_lease_id: str, *, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
35+
@distributed_trace
36+
def break_lease(
37+
self, *, lease_break_period: Optional[int] = None, timeout: Optional[int] = None, **kwargs: Any
38+
) -> int: ...

sdk/storage/azure-storage-file-share/azure/storage/fileshare/aio/_lease_async.py

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@
66
# pylint: disable=docstring-keyword-should-match-keyword-only
77

88
import uuid
9-
10-
from typing import Union, Optional, Any, TYPE_CHECKING
9+
from typing import Any, cast, Optional, Union, TYPE_CHECKING
1110

1211
from azure.core.exceptions import HttpResponseError
1312
from azure.core.tracing.decorator_async import distributed_trace_async
14-
15-
from .._shared.response_handlers import return_response_headers, process_storage_error
1613
from .._generated.aio.operations import FileOperations, ShareOperations
14+
from .._shared.response_handlers import return_response_headers, process_storage_error
1715

1816
if TYPE_CHECKING:
1917
from azure.storage.fileshare.aio import ShareClient, ShareFileClient
18+
from datetime import datetime
2019

2120

2221
class ShareLeaseClient: # pylint: disable=client-accepts-api-version-keyword
@@ -42,17 +41,27 @@ class ShareLeaseClient: # pylint: disable=client-accepts-api-version-keyword
4241
A string representing the lease ID of an existing lease. This value does not
4342
need to be specified in order to acquire a new lease, or break one.
4443
"""
44+
45+
id: str
46+
"""The ID of the lease currently being maintained. This will be `None` if no
47+
lease has yet been acquired."""
48+
etag: Optional[str]
49+
"""The ETag of the lease currently being maintained. This will be `None` if no
50+
lease has yet been acquired or modified."""
51+
last_modified: Optional["datetime"]
52+
"""The last modified timestamp of the lease currently being maintained.
53+
This will be `None` if no lease has yet been acquired or modified."""
54+
4555
def __init__( # pylint: disable=missing-client-constructor-parameter-credential, missing-client-constructor-parameter-kwargs
46-
self, client: Union["ShareFileClient", "ShareClient"],
47-
lease_id: Optional[str] = None
56+
self, client: Union["ShareFileClient", "ShareClient"], lease_id: Optional[str] = None
4857
) -> None:
4958
self.id = lease_id or str(uuid.uuid4())
5059
self.last_modified = None
5160
self.etag = None
52-
if hasattr(client, 'file_name'):
61+
if hasattr(client, "file_name"):
5362
self._client = client._client.file # type: ignore
5463
self._snapshot = None
55-
elif hasattr(client, 'share_name'):
64+
elif hasattr(client, "share_name"):
5665
self._client = client._client.share
5766
self._snapshot = client.snapshot
5867
else:
@@ -90,20 +99,21 @@ async def acquire(self, **kwargs: Any) -> None:
9099
:rtype: None
91100
"""
92101
try:
93-
lease_duration = kwargs.pop('lease_duration', -1)
102+
lease_duration = kwargs.pop("lease_duration", -1)
94103
if self._snapshot:
95-
kwargs['sharesnapshot'] = self._snapshot
104+
kwargs["sharesnapshot"] = self._snapshot
96105
response = await self._client.acquire_lease(
97-
timeout=kwargs.pop('timeout', None),
106+
timeout=kwargs.pop("timeout", None),
98107
duration=lease_duration,
99108
proposed_lease_id=self.id,
100109
cls=return_response_headers,
101-
**kwargs)
110+
**kwargs
111+
)
102112
except HttpResponseError as error:
103113
process_storage_error(error)
104-
self.id = response.get('lease_id')
105-
self.last_modified = response.get('last_modified')
106-
self.etag = response.get('etag')
114+
self.id = response.get("lease_id")
115+
self.last_modified = response.get("last_modified")
116+
self.etag = response.get("etag")
107117

108118
@distributed_trace_async
109119
async def renew(self, **kwargs: Any) -> None:
@@ -130,15 +140,16 @@ async def renew(self, **kwargs: Any) -> None:
130140
try:
131141
response = await self._client.renew_lease(
132142
lease_id=self.id,
133-
timeout=kwargs.pop('timeout', None),
143+
timeout=kwargs.pop("timeout", None),
134144
sharesnapshot=self._snapshot,
135145
cls=return_response_headers,
136-
**kwargs)
146+
**kwargs
147+
)
137148
except HttpResponseError as error:
138149
process_storage_error(error)
139-
self.etag = response.get('etag')
140-
self.id = response.get('lease_id')
141-
self.last_modified = response.get('last_modified')
150+
self.etag = response.get("etag")
151+
self.id = response.get("lease_id")
152+
self.last_modified = response.get("last_modified")
142153

143154
@distributed_trace_async
144155
async def release(self, **kwargs: Any) -> None:
@@ -156,21 +167,19 @@ async def release(self, **kwargs: Any) -> None:
156167
"""
157168
try:
158169
if self._snapshot:
159-
kwargs['sharesnapshot'] = self._snapshot
170+
kwargs["sharesnapshot"] = self._snapshot
160171
response = await self._client.release_lease(
161-
lease_id=self.id,
162-
timeout=kwargs.pop('timeout', None),
163-
cls=return_response_headers,
164-
**kwargs)
172+
lease_id=self.id, timeout=kwargs.pop("timeout", None), cls=return_response_headers, **kwargs
173+
)
165174
except HttpResponseError as error:
166175
process_storage_error(error)
167-
self.etag = response.get('etag')
168-
self.id = response.get('lease_id')
169-
self.last_modified = response.get('last_modified')
176+
self.etag = response.get("etag")
177+
self.id = response.get("lease_id")
178+
self.last_modified = response.get("last_modified")
170179

171180
@distributed_trace_async
172181
async def change(self, proposed_lease_id: str, **kwargs: Any) -> None:
173-
""" Changes the lease ID of an active lease. A change must include the current lease ID in x-ms-lease-id and
182+
"""Changes the lease ID of an active lease. A change must include the current lease ID in x-ms-lease-id and
174183
a new lease ID in x-ms-proposed-lease-id.
175184
176185
:param str proposed_lease_id:
@@ -186,18 +195,19 @@ async def change(self, proposed_lease_id: str, **kwargs: Any) -> None:
186195
"""
187196
try:
188197
if self._snapshot:
189-
kwargs['sharesnapshot'] = self._snapshot
198+
kwargs["sharesnapshot"] = self._snapshot
190199
response = await self._client.change_lease(
191200
lease_id=self.id,
192201
proposed_lease_id=proposed_lease_id,
193-
timeout=kwargs.pop('timeout', None),
202+
timeout=kwargs.pop("timeout", None),
194203
cls=return_response_headers,
195-
**kwargs)
204+
**kwargs
205+
)
196206
except HttpResponseError as error:
197207
process_storage_error(error)
198-
self.etag = response.get('etag')
199-
self.id = response.get('lease_id')
200-
self.last_modified = response.get('last_modified')
208+
self.etag = response.get("etag")
209+
self.id = response.get("lease_id")
210+
self.last_modified = response.get("last_modified")
201211

202212
@distributed_trace_async
203213
async def break_lease(self, **kwargs: Any) -> int:
@@ -232,18 +242,17 @@ async def break_lease(self, **kwargs: Any) -> int:
232242
:rtype: int
233243
"""
234244
try:
235-
lease_break_period = kwargs.pop('lease_break_period', None)
245+
lease_break_period = kwargs.pop("lease_break_period", None)
236246
if self._snapshot:
237-
kwargs['sharesnapshot'] = self._snapshot
247+
kwargs["sharesnapshot"] = self._snapshot
238248
if isinstance(self._client, ShareOperations):
239-
kwargs['break_period'] = lease_break_period
249+
kwargs["break_period"] = lease_break_period
240250
if isinstance(self._client, FileOperations) and lease_break_period:
241251
raise TypeError("Setting a lease break period is only applicable to Share leases.")
242252

243253
response = await self._client.break_lease(
244-
timeout=kwargs.pop('timeout', None),
245-
cls=return_response_headers,
246-
**kwargs)
254+
timeout=kwargs.pop("timeout", None), cls=return_response_headers, **kwargs
255+
)
247256
except HttpResponseError as error:
248257
process_storage_error(error)
249-
return response.get('lease_time') # type: ignore
258+
return cast(int, response.get("lease_time"))
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# -------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for
4+
# license information.
5+
# --------------------------------------------------------------------------
6+
# pylint: skip-file
7+
8+
from datetime import datetime
9+
from types import TracebackType
10+
from typing import Union, Optional, Any
11+
12+
from typing_extensions import Self
13+
14+
from azure.core.tracing.decorator_async import distributed_trace_async
15+
from ._file_client_async import ShareFileClient
16+
from ._share_client_async import ShareClient
17+
18+
19+
class ShareLeaseClient:
20+
id: str
21+
etag: Optional[str]
22+
last_modified: Optional[datetime]
23+
def __init__(
24+
self, client: Union[ShareFileClient, ShareClient],
25+
lease_id: Optional[str] = None
26+
) -> None: ...
27+
async def __aenter__(self) -> Self: ...
28+
async def __aexit__(
29+
self, typ: Optional[type[BaseException]], exc: Optional[BaseException], tb: Optional[TracebackType]
30+
) -> None: ...
31+
@distributed_trace_async
32+
async def acquire(
33+
self,
34+
*,
35+
lease_duration: int = -1,
36+
timeout: Optional[int] = None,
37+
**kwargs: Any
38+
) -> None: ...
39+
@distributed_trace_async
40+
async def renew(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
41+
@distributed_trace_async
42+
async def release(self, *, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
43+
@distributed_trace_async
44+
async def change(self, proposed_lease_id: str, *, timeout: Optional[int] = None, **kwargs: Any) -> None: ...
45+
@distributed_trace_async
46+
async def break_lease(
47+
self,
48+
*,
49+
lease_break_period: Optional[int] = None,
50+
timeout: Optional[int] = None,
51+
**kwargs: Any
52+
) -> int: ...

0 commit comments

Comments
 (0)