Skip to content

Commit

Permalink
Merge pull request #85 from lexdene/feature_promise_list_traceback
Browse files Browse the repository at this point in the history
keep traceback when reject promise list
  • Loading branch information
syrusakbary committed Jan 8, 2020
2 parents ad8ebe6 + 18da5e2 commit 9ba6fbd
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions promise/promise_list.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from functools import partial
from types import TracebackType
try:
from collections.abc import Iterable
except ImportError:
Expand Down Expand Up @@ -90,14 +91,14 @@ def _iterate(self, values):
if maybe_promise.is_pending:
maybe_promise._add_callbacks(
partial(self._promise_fulfilled, i=i),
self._promise_rejected,
partial(self._promise_rejected, promise=maybe_promise),
None,
)
self._values[i] = maybe_promise
elif maybe_promise.is_fulfilled:
is_resolved = self._promise_fulfilled(maybe_promise._value(), i)
elif maybe_promise.is_rejected:
is_resolved = self._promise_rejected(maybe_promise._reason())
is_resolved = self._promise_rejected(maybe_promise._reason(), promise=maybe_promise)

else:
is_resolved = self._promise_fulfilled(val, i)
Expand All @@ -122,14 +123,14 @@ def _promise_fulfilled(self, value, i):
return True
return False

def _promise_rejected(self, reason):
# type: (Exception) -> bool
def _promise_rejected(self, reason, promise):
# type: (Exception, Promise) -> bool
if self.is_resolved:
return False
# assert not self.is_resolved
# assert isinstance(self._values, Iterable)
self._total_resolved += 1
self._reject(reason)
self._reject(reason, traceback=promise._traceback)
return True

@property
Expand All @@ -144,8 +145,8 @@ def _resolve(self, value):
self._values = None
self.promise._fulfill(value)

def _reject(self, reason):
# type: (Exception) -> None
def _reject(self, reason, traceback=None):
# type: (Exception, Optional[TracebackType]) -> None
assert not self.is_resolved
self._values = None
self.promise._reject_callback(reason, False)
self.promise._reject_callback(reason, False, traceback=traceback)

0 comments on commit 9ba6fbd

Please sign in to comment.