diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2023-01-31 20:04:20 +0100 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2024-02-18 11:32:53 +0100 |
commit | bfa38ba5ee0a7a4387eddc30feb1e3ad2e1aab78 (patch) | |
tree | eb4edb64a0180d34afd48afb4f51b4c3ed3e3fd2 /slack/task.py | |
parent | fb7bc866464427f402d4855e200d84a32eba59e9 (diff) | |
download | wee-slack-bfa38ba5ee0a7a4387eddc30feb1e3ad2e1aab78.tar.gz |
Don't set future result in __await__
Diffstat (limited to 'slack/task.py')
-rw-r--r-- | slack/task.py | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/slack/task.py b/slack/task.py index 74c5fc1..9dfc817 100644 --- a/slack/task.py +++ b/slack/task.py @@ -48,7 +48,7 @@ class Future(Awaitable[T]): else: self.id = future_id self._state: Literal["PENDING", "CANCELLED", "FINISHED"] = "PENDING" - self._result: Optional[T] = None + self._result: T self._exception: Optional[BaseException] = None self._cancel_message = None self._callbacks: List[Callable[[Self], object]] = [] @@ -56,15 +56,12 @@ class Future(Awaitable[T]): def __repr__(self) -> str: return f"{self.__class__.__name__}('{self.id}')" - def __await__(self) -> Generator[Future[T], T, T]: - if self.cancelled(): - raise self._make_cancelled_error() - result = yield self - if isinstance(result, BaseException): - self.set_exception(result) - raise result - self.set_result(result) - return result + def __await__(self) -> Generator[Future[T], None, T]: + if not self.done(): + yield self # This tells Task to wait for completion. + if not self.done(): + raise RuntimeError("await wasn't used with future") + return self.result() # May raise too. def _make_cancelled_error(self): if self._cancel_message is None: |