tenacity
tenacity copied to clipboard
Before outcome always None
version 8.0.1 I have example of code:
import tenacity
import httpx
def log(name):
def inner(retry_state: tenacity.RetryCallState) -> None:
print(f"{name=} - {retry_state.outcome=}")
return inner
@tenacity.retry(
retry=tenacity.retry_if_exception_type(httpx.RequestError),
stop=tenacity.stop_after_attempt(3),
after=log("after"),
before_sleep=log("before_sleep"),
before=log("before"),
)
def httpbin():
httpx.get(url="https://httpbin.org/delay/3", timeout=2)
if __name__ == '__main__':
try:
httpbin()
except Exception:
pass
Output:
name='before' - retry_state.outcome=None
name='after' - retry_state.outcome=<Future at 0x10d492590 state=finished raised ReadTimeout>
name='before_sleep' - retry_state.outcome=<Future at 0x10d492590 state=finished raised ReadTimeout>
name='before' - retry_state.outcome=None
name='after' - retry_state.outcome=<Future at 0x10d492c50 state=finished raised ReadTimeout>
name='before_sleep' - retry_state.outcome=<Future at 0x10d492c50 state=finished raised ReadTimeout>
name='before' - retry_state.outcome=None
name='after' - retry_state.outcome=<Future at 0x10d492b30 state=finished raised ReadTimeout>
Process finished with exit code 0
How can i fix this?
The before
callback happens before a retry attempt is made. There's no outcome good or bad yet.