docs: the retry/aretry decorator needs parentheses (@aretry())

Signed-off-by: disqualifier <dev@disqualifier.me>
This commit is contained in:
dsql committed 2026-10-16 04:40:36 -04:00
1 parent bbfcc4818b
commit 39a28d07f2
2 files changed
+11 -2

No files matched your search

+5
View File
@@ -202,6 +202,11 @@ async def pull():
... ...
``` ```
The decorator always needs parentheses, even with no kwargs: `@retry()` / `@aretry()`. A
bare `@retry` / `@aretry` is the call form applied to the function: `@retry` runs it once
at import time and replaces it with its return value, and `@aretry` replaces it with a
coroutine that is never awaited.
Knobs: `attempts` (total tries), `backoff` / `factor` / `max_backoff` (delay is Knobs: `attempts` (total tries), `backoff` / `factor` / `max_backoff` (delay is
`min(backoff * factor**n, max_backoff)`), `jitter` (full jitter, on by default), `min(backoff * factor**n, max_backoff)`), `jitter` (full jitter, on by default),
`on=` (tuple of retryable exception types), and `give_up=lambda exc: ...` to stop early `on=` (tuple of retryable exception types), and `give_up=lambda exc: ...` to stop early
+6 -2
View File
@@ -56,7 +56,9 @@ def retry(
): ):
"""retry a sync callable with exponential backoff; call form (`retry(fn, ...)`) or decorator """retry a sync callable with exponential backoff; call form (`retry(fn, ...)`) or decorator
`attempts` is floored at 1 so the callable always runs at least once. the decorator needs parentheses - `@retry()` / `@retry(attempts=5)`. a bare `@retry`
is the call form: it runs the function once at import time and replaces it with the
result. `attempts` is floored at 1 so the callable always runs at least once.
""" """
types = _as_types(on) types = _as_types(on)
attempts = max(1, attempts) attempts = max(1, attempts)
@@ -106,7 +108,9 @@ def aretry(
): ):
"""async twin of `retry`; call form (`await aretry(coro_fn, ...)`) or decorator, same semantics """async twin of `retry`; call form (`await aretry(coro_fn, ...)`) or decorator, same semantics
`attempts` is floored at 1 so the callable always runs at least once. the decorator needs parentheses - `@aretry()` / `@aretry(attempts=5)`. a bare `@aretry`
is the call form: it replaces the function with a never-awaited coroutine. `attempts`
is floored at 1 so the callable always runs at least once.
""" """
types = _as_types(on) types = _as_types(on)
attempts = max(1, attempts) attempts = max(1, attempts)