tenacity icon indicating copy to clipboard operation
tenacity copied to clipboard

Before outcome always None

Open stepalxser opened this issue 2 years ago • 1 comments

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?

stepalxser avatar Oct 13 '22 15:10 stepalxser

The before callback happens before a retry attempt is made. There's no outcome good or bad yet.

isaacm avatar Oct 26 '22 12:10 isaacm