def make_retry_state(previous_attempt_number, delay_since_first_attempt, last_result=None): """Construct RetryCallState for given attempt number & delay. Only used in testing and thus is extra careful about timestamp arithmetics. """ required_parameter_unset = (previous_attempt_number is _unset or delay_since_first_attempt is _unset) if required_parameter_unset: missing = [] if previous_attempt_number is _unset: missing.append('previous_attempt_number') if delay_since_first_attempt is _unset: missing.append('delay_since_first_attempt') missing_str = ', '.join(repr(s) for s in missing) raise TypeError('wait func missing parameters: ' + missing_str) from tenacity import RetryCallState retry_state = RetryCallState(None, None, (), {}) retry_state.attempt_number = previous_attempt_number if last_result is not None: retry_state.outcome = last_result else: retry_state.set_result(None) # Ensure outcome_timestamp - start_time is *exactly* equal to the delay to # avoid complexity in test code. retry_state.start_time = Fraction(retry_state.start_time) retry_state.outcome_timestamp = (retry_state.start_time + Fraction(delay_since_first_attempt)) assert retry_state.seconds_since_start == delay_since_first_attempt return retry_state
def new_fn(self, attempt=_unset, retry_state=None): if retry_state is None: from tenacity import RetryCallState if attempt is _unset: raise _make_unset_exception('retry', attempt=attempt) retry_state_passed_as_non_kwarg = ( attempt is not _unset and isinstance(attempt, RetryCallState)) if retry_state_passed_as_non_kwarg: retry_state = attempt else: warn_about_dunder_non_retry_state_deprecation(fn, stacklevel=2) retry_state = RetryCallState(None, None, (), {}) retry_state.outcome = attempt return fn(self, retry_state=retry_state)
def _make_wait_call_state(previous_attempt_number, delay_since_first_attempt, last_result=None): required_parameter_unset = (previous_attempt_number is _unset or delay_since_first_attempt is _unset) if required_parameter_unset: missing = [] if previous_attempt_number is _unset: missing.append('previous_attempt_number') if delay_since_first_attempt is _unset: missing.append('delay_since_first_attempt') missing_str = ', '.join(repr(s) for s in missing) raise TypeError('wait func missing parameters: ' + missing_str) from tenacity import RetryCallState call_state = RetryCallState(None, (), {}) call_state.attempt_number = previous_attempt_number call_state.outcome_timestamp = (call_state.start_time + delay_since_first_attempt) call_state.outcome = last_result return call_state
def make_retry_state(previous_attempt_number, delay_since_first_attempt, last_result=None): """Construct RetryCallState for given attempt number & delay. Only used in testing and thus is extra careful about timestamp arithmetics. """ required_parameter_unset = (previous_attempt_number is _unset or delay_since_first_attempt is _unset) if required_parameter_unset: raise _make_unset_exception( 'wait/stop', previous_attempt_number=previous_attempt_number, delay_since_first_attempt=delay_since_first_attempt) from tenacity import RetryCallState retry_state = RetryCallState(None, None, (), {}) retry_state.attempt_number = previous_attempt_number if last_result is not None: retry_state.outcome = last_result else: retry_state.set_result(None) _set_delay_since_start(retry_state, delay_since_first_attempt) return retry_state
def retry_state(self): retry_state = RetryCallState(object(), lambda x: x, (), {}) retry_state.outcome = Future(attempt_number=1) return retry_state