aboutsummaryrefslogtreecommitdiffstats
path: root/slack/task.py
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2023-01-31 20:04:20 +0100
committerTrygve Aaberge <trygveaa@gmail.com>2024-02-18 11:32:53 +0100
commitbfa38ba5ee0a7a4387eddc30feb1e3ad2e1aab78 (patch)
treeeb4edb64a0180d34afd48afb4f51b4c3ed3e3fd2 /slack/task.py
parentfb7bc866464427f402d4855e200d84a32eba59e9 (diff)
downloadwee-slack-bfa38ba5ee0a7a4387eddc30feb1e3ad2e1aab78.tar.gz
Don't set future result in __await__
Diffstat (limited to 'slack/task.py')
-rw-r--r--slack/task.py17
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: