@@ -11,37 +11,44 @@ def _ensure_coroutine(coro_or_func):
1111 if inspect .iscoroutinefunction (coro_or_func ):
1212 return coro_or_func
1313 else :
14+
1415 @functools .wraps (coro_or_func )
1516 async def f (* args , ** kwargs ):
1617 return coro_or_func (* args , ** kwargs )
18+
1719 return f
1820
1921
2022def _ensure_coroutines (coros_or_funcs ):
2123 return [_ensure_coroutine (f ) for f in coros_or_funcs ]
2224
2325
24- async def _call_handlers (handlers ,
25- * ,
26- target , args , kwargs , tries , elapsed ,
27- ** extra ):
26+ async def _call_handlers (handlers , * , target , args , kwargs , tries , elapsed , ** extra ):
2827 details = {
29- ' target' : target ,
30- ' args' : args ,
31- ' kwargs' : kwargs ,
32- ' tries' : tries ,
33- ' elapsed' : elapsed ,
28+ " target" : target ,
29+ " args" : args ,
30+ " kwargs" : kwargs ,
31+ " tries" : tries ,
32+ " elapsed" : elapsed ,
3433 }
3534 details .update (extra )
3635 for handler in handlers :
3736 await handler (details )
3837
3938
40- def retry_predicate (target , wait_gen , predicate ,
41- * ,
42- max_tries , max_time , jitter ,
43- on_success , on_backoff , on_giveup ,
44- wait_gen_kwargs ):
39+ def retry_predicate (
40+ target ,
41+ wait_gen ,
42+ predicate ,
43+ * ,
44+ max_tries ,
45+ max_time ,
46+ jitter ,
47+ on_success ,
48+ on_backoff ,
49+ on_giveup ,
50+ wait_gen_kwargs ,
51+ ):
4552 on_success = _ensure_coroutines (on_success )
4653 on_backoff = _ensure_coroutines (on_backoff )
4754 on_giveup = _ensure_coroutines (on_giveup )
@@ -54,7 +61,6 @@ def retry_predicate(target, wait_gen, predicate,
5461
5562 @functools .wraps (target )
5663 async def retry (* args , ** kwargs ):
57-
5864 # update variables from outer function args
5965 max_tries_value = _maybe_call (max_tries )
6066 max_time_value = _maybe_call (max_time )
@@ -75,23 +81,22 @@ async def retry(*args, **kwargs):
7581
7682 ret = await target (* args , ** kwargs )
7783 if predicate (ret ):
78- max_tries_exceeded = (tries == max_tries_value )
79- max_time_exceeded = (max_time_value is not None and
80- elapsed >= max_time_value )
84+ max_tries_exceeded = tries == max_tries_value
85+ max_time_exceeded = (
86+ max_time_value is not None and elapsed >= max_time_value
87+ )
8188
8289 if max_tries_exceeded or max_time_exceeded :
8390 await _call_handlers (on_giveup , ** details , value = ret )
8491 break
8592
8693 try :
87- seconds = _next_wait (wait , ret , jitter , elapsed ,
88- max_time_value )
94+ seconds = _next_wait (wait , ret , jitter , elapsed , max_time_value )
8995 except StopIteration :
9096 await _call_handlers (on_giveup , ** details , value = ret )
9197 break
9298
93- await _call_handlers (on_backoff , ** details , value = ret ,
94- wait = seconds )
99+ await _call_handlers (on_backoff , ** details , value = ret , wait = seconds )
95100
96101 # Note: there is no convenient way to pass explicit event
97102 # loop to decorator, so here we assume that either default
@@ -113,11 +118,21 @@ async def retry(*args, **kwargs):
113118 return retry
114119
115120
116- def retry_exception (target , wait_gen , exception ,
117- * ,
118- max_tries , max_time , jitter , giveup ,
119- on_success , on_backoff , on_giveup , raise_on_giveup ,
120- wait_gen_kwargs ):
121+ def retry_exception (
122+ target ,
123+ wait_gen ,
124+ exception ,
125+ * ,
126+ max_tries ,
127+ max_time ,
128+ jitter ,
129+ giveup ,
130+ on_success ,
131+ on_backoff ,
132+ on_giveup ,
133+ raise_on_giveup ,
134+ wait_gen_kwargs ,
135+ ):
121136 on_success = _ensure_coroutines (on_success )
122137 on_backoff = _ensure_coroutines (on_backoff )
123138 on_giveup = _ensure_coroutines (on_giveup )
@@ -129,7 +144,6 @@ def retry_exception(target, wait_gen, exception,
129144
130145 @functools .wraps (target )
131146 async def retry (* args , ** kwargs ):
132-
133147 max_tries_value = _maybe_call (max_tries )
134148 max_time_value = _maybe_call (max_time )
135149
@@ -151,9 +165,10 @@ async def retry(*args, **kwargs):
151165 ret = await target (* args , ** kwargs )
152166 except exception as e :
153167 giveup_result = await giveup (e )
154- max_tries_exceeded = (tries == max_tries_value )
155- max_time_exceeded = (max_time_value is not None and
156- elapsed >= max_time_value )
168+ max_tries_exceeded = tries == max_tries_value
169+ max_time_exceeded = (
170+ max_time_value is not None and elapsed >= max_time_value
171+ )
157172
158173 if giveup_result or max_tries_exceeded or max_time_exceeded :
159174 await _call_handlers (on_giveup , ** details , exception = e )
@@ -162,14 +177,12 @@ async def retry(*args, **kwargs):
162177 return None
163178
164179 try :
165- seconds = _next_wait (wait , e , jitter , elapsed ,
166- max_time_value )
180+ seconds = _next_wait (wait , e , jitter , elapsed , max_time_value )
167181 except StopIteration :
168182 await _call_handlers (on_giveup , ** details , exception = e )
169183 raise e
170184
171- await _call_handlers (on_backoff , ** details , wait = seconds ,
172- exception = e )
185+ await _call_handlers (on_backoff , ** details , wait = seconds , exception = e )
173186
174187 # Note: there is no convenient way to pass explicit event
175188 # loop to decorator, so here we assume that either default
@@ -185,4 +198,5 @@ async def retry(*args, **kwargs):
185198 await _call_handlers (on_success , ** details )
186199
187200 return ret
201+
188202 return retry
0 commit comments