88 Coroutine ,
99 Generator ,
1010 Literal ,
11+ ParamSpec ,
1112 TypeAlias ,
1213 overload ,
1314)
2122 from tenacity .stop import StopBaseT
2223 from tenacity .wait import WaitBaseT
2324
24- Waiter : TypeAlias = Callable [[], None ]
25- AsyncWaiter : TypeAlias = Callable [[], Coroutine [None , None , None ]]
25+ WaitForArgs = ParamSpec ('WaitForArgs' )
26+
27+ Waiter : TypeAlias = Callable [WaitForArgs , None ]
28+ AsyncWaiter : TypeAlias = Callable [WaitForArgs , Coroutine [None , None , None ]]
2629
2730
2831class WaitFor :
@@ -38,33 +41,33 @@ def __call__(
3841 * ,
3942 stop : StopBaseT | None = None ,
4043 wait : WaitBaseT | None = None ,
41- ) -> Callable [[Callable [[] , None ]], Waiter ]: ...
44+ ) -> Callable [[Callable [WaitForArgs , None ]], Waiter [ WaitForArgs ] ]: ...
4245
4346 @overload
4447 def __call__ (
4548 self : WaitFor ,
46- check : Callable [[] , None ],
49+ check : Callable [WaitForArgs , None ],
4750 * ,
4851 stop : StopBaseT | None = None ,
4952 wait : WaitBaseT | None = None ,
50- ) -> Waiter : ...
53+ ) -> Waiter [ WaitForArgs ] : ...
5154
5255 @overload
5356 def __call__ (
5457 self : WaitFor ,
5558 * ,
5659 timeout : float | None = None ,
5760 wait : WaitBaseT | None = None ,
58- ) -> Callable [[Callable [[] , None ]], Waiter ]: ...
61+ ) -> Callable [[Callable [WaitForArgs , None ]], Waiter [ WaitForArgs ] ]: ...
5962
6063 @overload
6164 def __call__ (
6265 self : WaitFor ,
63- check : Callable [[] , None ],
66+ check : Callable [WaitForArgs , None ],
6467 * ,
6568 timeout : float | None = None ,
6669 wait : WaitBaseT | None = None ,
67- ) -> Waiter : ...
70+ ) -> Waiter [ WaitForArgs ] : ...
6871
6972 @overload
7073 def __call__ (
@@ -73,17 +76,17 @@ def __call__(
7376 stop : StopBaseT | None = None ,
7477 wait : WaitBaseT | None = None ,
7578 run_async : Literal [True ],
76- ) -> Callable [[Callable [[] , None ]], AsyncWaiter ]: ...
79+ ) -> Callable [[Callable [WaitForArgs , None ]], AsyncWaiter [ WaitForArgs ] ]: ...
7780
7881 @overload
7982 def __call__ (
8083 self : WaitFor ,
81- check : Callable [[] , None ],
84+ check : Callable [WaitForArgs , None ],
8285 * ,
8386 stop : StopBaseT | None = None ,
8487 wait : WaitBaseT | None = None ,
8588 run_async : Literal [True ],
86- ) -> AsyncWaiter : ...
89+ ) -> AsyncWaiter [ WaitForArgs ] : ...
8790
8891 @overload
8992 def __call__ (
@@ -92,57 +95,62 @@ def __call__(
9295 timeout : float | None = None ,
9396 wait : WaitBaseT | None = None ,
9497 run_async : Literal [True ],
95- ) -> Callable [[Callable [[] , None ]], AsyncWaiter ]: ...
98+ ) -> Callable [[Callable [WaitForArgs , None ]], AsyncWaiter [ WaitForArgs ] ]: ...
9699
97100 @overload
98101 def __call__ (
99102 self : WaitFor ,
100- check : Callable [[] , None ],
103+ check : Callable [WaitForArgs , None ],
101104 * ,
102105 timeout : float | None = None ,
103106 wait : WaitBaseT | None = None ,
104107 run_async : Literal [True ],
105- ) -> AsyncWaiter : ...
108+ ) -> AsyncWaiter [ WaitForArgs ] : ...
106109
107- def __call__ ( # noqa: PLR0913
110+ def __call__ (
108111 self : WaitFor ,
109- check : Callable [[] , None ] | None = None ,
112+ check : Callable [WaitForArgs , None ] | None = None ,
110113 * ,
111114 timeout : float | None = None ,
112115 stop : StopBaseT | None = None ,
113116 wait : WaitBaseT | None = None ,
114117 run_async : bool = False ,
115118 ) -> (
116- Callable [[Callable [[] , None ]], Waiter ]
117- | Waiter
118- | Callable [[Callable [[] , None ]], AsyncWaiter ]
119- | AsyncWaiter
119+ Callable [[Callable [WaitForArgs , None ]], Waiter [ WaitForArgs ] ]
120+ | Waiter [ WaitForArgs ]
121+ | Callable [[Callable [WaitForArgs , None ]], AsyncWaiter [ WaitForArgs ] ]
122+ | AsyncWaiter [ WaitForArgs ]
120123 ):
121124 """Create a waiter for a condition to be met."""
122- args = {}
125+ parameters = {}
123126 if timeout is not None :
124- args ['stop' ] = stop_after_delay (timeout )
127+ parameters ['stop' ] = stop_after_delay (timeout )
125128 elif stop :
126- args ['stop' ] = stop
129+ parameters ['stop' ] = stop
127130
128- args ['wait' ] = wait or wait_exponential (multiplier = 0.5 )
131+ parameters ['wait' ] = wait or wait_exponential (multiplier = 0.5 )
129132
130133 if run_async :
131134
132- def async_decorator (check : Callable [[], None ]) -> AsyncWaiter :
133- async def async_wrapper () -> None :
134- async for attempt in AsyncRetrying (** args ):
135+ def async_decorator (
136+ check : Callable [WaitForArgs , None ],
137+ ) -> AsyncWaiter [WaitForArgs ]:
138+ async def async_wrapper (
139+ * args : WaitForArgs .args ,
140+ ** kwargs : WaitForArgs .kwargs ,
141+ ) -> None :
142+ async for attempt in AsyncRetrying (** parameters ):
135143 with attempt :
136- check ()
144+ check (* args , ** kwargs )
137145
138146 return async_wrapper
139147
140148 return async_decorator (check ) if check else async_decorator
141149
142- def decorator (check : Callable [[] , None ]) -> Waiter :
143- @retry (** args )
144- def wrapper () -> None :
145- check ()
150+ def decorator (check : Callable [WaitForArgs , None ]) -> Waiter [ WaitForArgs ] :
151+ @retry (** parameters )
152+ def wrapper (* args : WaitForArgs . args , ** kwargs : WaitForArgs . kwargs ) -> None :
153+ check (* args , ** kwargs )
146154
147155 return wrapper
148156
0 commit comments