Result that we know has already been executed.
| 984 | |
| 985 | @Thenable.register |
| 986 | class EagerResult(AsyncResult): |
| 987 | """Result that we know has already been executed.""" |
| 988 | |
| 989 | def __init__(self, id, ret_value, state, traceback=None, name=None): |
| 990 | # pylint: disable=super-init-not-called |
| 991 | # XXX should really not be inheriting from AsyncResult |
| 992 | self.id = id |
| 993 | self._result = ret_value |
| 994 | self._state = state |
| 995 | self._traceback = traceback |
| 996 | self._name = name |
| 997 | self.on_ready = promise() |
| 998 | self.on_ready(self) |
| 999 | |
| 1000 | def then(self, callback, on_error=None, weak=False): |
| 1001 | return self.on_ready.then(callback, on_error) |
| 1002 | |
| 1003 | def _get_task_meta(self): |
| 1004 | return self._cache |
| 1005 | |
| 1006 | def __reduce__(self): |
| 1007 | return self.__class__, self.__reduce_args__() |
| 1008 | |
| 1009 | def __reduce_args__(self): |
| 1010 | return (self.id, self._result, self._state, self._traceback) |
| 1011 | |
| 1012 | def __copy__(self): |
| 1013 | cls, args = self.__reduce__() |
| 1014 | return cls(*args) |
| 1015 | |
| 1016 | def ready(self): |
| 1017 | return True |
| 1018 | |
| 1019 | def get(self, timeout=None, propagate=True, |
| 1020 | disable_sync_subtasks=True, **kwargs): |
| 1021 | if disable_sync_subtasks: |
| 1022 | assert_will_not_block() |
| 1023 | |
| 1024 | if self.successful(): |
| 1025 | return self.result |
| 1026 | elif self.state in states.PROPAGATE_STATES: |
| 1027 | if propagate: |
| 1028 | raise self.result if isinstance( |
| 1029 | self.result, Exception) else Exception(self.result) |
| 1030 | return self.result |
| 1031 | wait = get # XXX Compat (remove 5.0) |
| 1032 | |
| 1033 | def forget(self): |
| 1034 | pass |
| 1035 | |
| 1036 | def revoke(self, *args, **kwargs): |
| 1037 | self._state = states.REVOKED |
| 1038 | |
| 1039 | def __repr__(self): |
| 1040 | return f'<EagerResult: {self.id}>' |
| 1041 | |
| 1042 | @property |
| 1043 | def _cache(self): |
no outgoing calls