Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
AsyncRetryingaccepts a sleep callback returning eitherNoneor an awaitable in its public type signature, but both retry loops unconditionally await its result. A synchronous callback such assleep=delays.appendtherefore raisesTypeError: object NoneType can't be used in 'await' expressionafter the first failed attempt.Call the callback once and await its result only when it is not
None. Both direct calls and async iteration use the same helper. Async functions and ordinary functions returning awaitables keep their existing behavior, including the default asyncio/Trio sleep implementation. The change also documents the synchronous callback behavior and includes a release note.The six regression/compatibility cases exercise both entry points with synchronous callbacks, async callbacks, and ordinary functions returning awaitables. They verify completion, requested delays, attempt counts, and accumulated idle time. Before the fix, the two synchronous cases fail and the four awaitable cases pass.
Validation on Linux (WSL), CPython 3.11.16:
poe all: Ruff 0.16.5 lint and formatting, strict Mypy 2.3.1 (19 source files), all 190 tests, all 35 Sphinx doctests, and the Sphinx HTML build with warnings treated as errors passed.git diff --checkpassed.AI assistance: this contribution was investigated, implemented, and locally tested with OpenAI Codex.