Skip to content

Commit cfafd30

Browse files
committed
Types in poller
1 parent 46a38e7 commit cfafd30

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

sdk/core/azure-core/azure/core/polling/_async_poller.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ async def run(self): # pylint:disable=invalid-overridden-method
7171
"""
7272

7373

74-
async def async_poller(client, initial_response, deserialization_callback, polling_method):
74+
async def async_poller(client: Any, initial_response: Any, deserialization_callback: Callable[[Any], PollingReturnType], polling_method: AsyncPollingMethod[PollingReturnType]):
7575
"""Async Poller for long running operations.
7676
7777
.. deprecated:: 1.5.0
@@ -109,7 +109,7 @@ def __init__(
109109
self,
110110
client: Any,
111111
initial_response: Any,
112-
deserialization_callback: Callable,
112+
deserialization_callback: Callable[[Any], PollingReturnType],
113113
polling_method: AsyncPollingMethod[PollingReturnType],
114114
):
115115
self._polling_method = polling_method

sdk/core/azure-core/azure/core/polling/_poller.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,16 @@ def from_continuation_token(cls, continuation_token: str, **kwargs) -> Tuple[Any
6464
raise TypeError("Polling method '{}' doesn't support from_continuation_token".format(cls.__name__))
6565

6666

67-
class NoPolling(PollingMethod):
67+
class NoPolling(PollingMethod, Generic[PollingReturnType]):
6868
"""An empty poller that returns the deserialized initial response."""
6969

70+
_deserialization_callback: Callable[[Any], PollingReturnType]
71+
"""Deserialization callback passed during initialization"""
72+
7073
def __init__(self):
7174
self._initial_response = None
72-
self._deserialization_callback = None
7375

74-
def initialize(self, _: Any, initial_response: Any, deserialization_callback: Callable) -> None:
76+
def initialize(self, _: Any, initial_response: Any, deserialization_callback: Callable[[Any], PollingReturnType]) -> None:
7577
self._initial_response = initial_response
7678
self._deserialization_callback = deserialization_callback
7779

@@ -92,7 +94,7 @@ def finished(self) -> bool:
9294
"""
9395
return True
9496

95-
def resource(self) -> Any:
97+
def resource(self) -> PollingReturnType:
9698
return self._deserialization_callback(self._initial_response)
9799

98100
def get_continuation_token(self) -> str:
@@ -130,7 +132,7 @@ def __init__(
130132
self,
131133
client: Any,
132134
initial_response: Any,
133-
deserialization_callback: Callable,
135+
deserialization_callback: Callable[[Any], PollingReturnType],
134136
polling_method: PollingMethod[PollingReturnType],
135137
) -> None:
136138
self._callbacks: List[Callable] = []
@@ -147,10 +149,11 @@ def __init__(
147149

148150
# Prepare thread execution
149151
self._thread = None
150-
self._done = None
152+
self._done = threading.Event()
151153
self._exception = None
152-
if not self._polling_method.finished():
153-
self._done = threading.Event()
154+
if self._polling_method.finished():
155+
self._done.set()
156+
else:
154157
self._thread = threading.Thread(
155158
target=with_current_context(self._start),
156159
name="LROPoller({})".format(uuid.uuid4()),
@@ -266,7 +269,7 @@ def add_done_callback(self, func: Callable) -> None:
266269
argument, a completed LongRunningOperation.
267270
"""
268271
# Still use "_done" and not "done", since CBs are executed inside the thread.
269-
if self._done is None or self._done.is_set():
272+
if self._done.is_set():
270273
func(self._polling_method)
271274
# Let's add them still, for consistency (if you wish to access to it for some reasons)
272275
self._callbacks.append(func)

0 commit comments

Comments
 (0)