| 78 | |
| 79 | |
| 80 | class CallbackPromise: |
| 81 | def __init__(self): |
| 82 | self.done = 0 |
| 83 | self.__successes = [] |
| 84 | self.__errors = [] |
| 85 | |
| 86 | def then(self, success=None, error=None): |
| 87 | if success and not callable(success): |
| 88 | raise TypeError("success callback must be callable") |
| 89 | if error and not callable(error): |
| 90 | raise TypeError("error callback must be callable") |
| 91 | |
| 92 | if not self.done: |
| 93 | if success: |
| 94 | self.__successes.append(success) |
| 95 | if error: |
| 96 | self.__errors.append(error) |
| 97 | return |
| 98 | |
| 99 | cb = success if self.done == 1 else error |
| 100 | if cb: |
| 101 | return _call_resolve(cb, self.__result) |
| 102 | else: |
| 103 | return self |
| 104 | |
| 105 | def __await__(self): |
| 106 | yield self |
| 107 | |
| 108 | def resolve(self, value): |
| 109 | if self.done: |
| 110 | return |
| 111 | self.__result = value |
| 112 | self.done = 1 |
| 113 | for f in self.__successes: |
| 114 | f(value) |
| 115 | del self.__successes, self.__errors |
| 116 | |
| 117 | def reject(self, err): |
| 118 | if self.done: |
| 119 | return |
| 120 | self.__result = err |
| 121 | self.done = -1 |
| 122 | for f in self.__errors: |
| 123 | f(err) |
| 124 | del self.__successes, self.__errors |
| 125 | |
| 126 | |
| 127 | def _coro_promise(coro): |
no outgoing calls
no test coverage detected