3838from pip ._vendor import six
3939
4040from pip ._vendor .tenacity import _utils
41- from pip ._vendor .tenacity import compat as _compat
4241
4342# Import all built-in retry strategies for easier usage.
43+ from .retry import retry_base # noqa
4444from .retry import retry_all # noqa
4545from .retry import retry_always # noqa
4646from .retry import retry_any # noqa
@@ -116,11 +116,23 @@ def retry(*dargs, **dkw): # noqa
116116 if len (dargs ) == 1 and callable (dargs [0 ]):
117117 return retry ()(dargs [0 ])
118118 else :
119+
119120 def wrap (f ):
121+ if isinstance (f , retry_base ):
122+ warnings .warn (
123+ (
124+ "Got retry_base instance ({cls}) as callable argument, "
125+ + "this will probably hang indefinitely (did you mean "
126+ + "retry={cls}(...)?)"
127+ ).format (cls = f .__class__ .__name__ )
128+ )
120129 if iscoroutinefunction is not None and iscoroutinefunction (f ):
121130 r = AsyncRetrying (* dargs , ** dkw )
122- elif tornado and hasattr (tornado .gen , 'is_coroutine_function' ) \
123- and tornado .gen .is_coroutine_function (f ):
131+ elif (
132+ tornado
133+ and hasattr (tornado .gen , "is_coroutine_function" )
134+ and tornado .gen .is_coroutine_function (f )
135+ ):
124136 r = TornadoRetrying (* dargs , ** dkw )
125137 else :
126138 r = Retrying (* dargs , ** dkw )
@@ -158,17 +170,18 @@ class BaseAction(object):
158170 NAME = None
159171
160172 def __repr__ (self ):
161- state_str = ', ' .join ('%s=%r' % (field , getattr (self , field ))
162- for field in self .REPR_FIELDS )
163- return '%s(%s)' % (type (self ).__name__ , state_str )
173+ state_str = ", " .join (
174+ "%s=%r" % (field , getattr (self , field )) for field in self .REPR_FIELDS
175+ )
176+ return "%s(%s)" % (type (self ).__name__ , state_str )
164177
165178 def __str__ (self ):
166179 return repr (self )
167180
168181
169182class RetryAction (BaseAction ):
170- REPR_FIELDS = (' sleep' ,)
171- NAME = ' retry'
183+ REPR_FIELDS = (" sleep" ,)
184+ NAME = " retry"
172185
173186 def __init__ (self , sleep ):
174187 self .sleep = float (sleep )
@@ -177,6 +190,10 @@ def __init__(self, sleep):
177190_unset = object ()
178191
179192
193+ def _first_set (first , second ):
194+ return second if first is _unset else first
195+
196+
180197class RetryError (Exception ):
181198 """Encapsulates the last attempt instance right before giving up."""
182199
@@ -214,86 +231,74 @@ def __exit__(self, exc_type, exc_value, traceback):
214231class BaseRetrying (object ):
215232 __metaclass__ = ABCMeta
216233
217- def __init__ (self ,
218- sleep = sleep ,
219- stop = stop_never , wait = wait_none (),
220- retry = retry_if_exception_type (),
221- before = before_nothing ,
222- after = after_nothing ,
223- before_sleep = None ,
224- reraise = False ,
225- retry_error_cls = RetryError ,
226- retry_error_callback = None ):
234+ def __init__ (
235+ self ,
236+ sleep = sleep ,
237+ stop = stop_never ,
238+ wait = wait_none (),
239+ retry = retry_if_exception_type (),
240+ before = before_nothing ,
241+ after = after_nothing ,
242+ before_sleep = None ,
243+ reraise = False ,
244+ retry_error_cls = RetryError ,
245+ retry_error_callback = None ,
246+ ):
227247 self .sleep = sleep
228- self ._stop = stop
229- self ._wait = wait
230- self ._retry = retry
231- self ._before = before
232- self ._after = after
233- self ._before_sleep = before_sleep
248+ self .stop = stop
249+ self .wait = wait
250+ self .retry = retry
251+ self .before = before
252+ self .after = after
253+ self .before_sleep = before_sleep
234254 self .reraise = reraise
235255 self ._local = threading .local ()
236256 self .retry_error_cls = retry_error_cls
237- self ._retry_error_callback = retry_error_callback
257+ self .retry_error_callback = retry_error_callback
238258
239259 # This attribute was moved to RetryCallState and is deprecated on
240260 # Retrying objects but kept for backward compatibility.
241261 self .fn = None
242262
243- @_utils .cached_property
244- def stop (self ):
245- return _compat .stop_func_accept_retry_state (self ._stop )
246-
247- @_utils .cached_property
248- def wait (self ):
249- return _compat .wait_func_accept_retry_state (self ._wait )
250-
251- @_utils .cached_property
252- def retry (self ):
253- return _compat .retry_func_accept_retry_state (self ._retry )
254-
255- @_utils .cached_property
256- def before (self ):
257- return _compat .before_func_accept_retry_state (self ._before )
258-
259- @_utils .cached_property
260- def after (self ):
261- return _compat .after_func_accept_retry_state (self ._after )
262-
263- @_utils .cached_property
264- def before_sleep (self ):
265- return _compat .before_sleep_func_accept_retry_state (self ._before_sleep )
266-
267- @_utils .cached_property
268- def retry_error_callback (self ):
269- return _compat .retry_error_callback_accept_retry_state (
270- self ._retry_error_callback )
271-
272- def copy (self , sleep = _unset , stop = _unset , wait = _unset ,
273- retry = _unset , before = _unset , after = _unset , before_sleep = _unset ,
274- reraise = _unset ):
263+ def copy (
264+ self ,
265+ sleep = _unset ,
266+ stop = _unset ,
267+ wait = _unset ,
268+ retry = _unset ,
269+ before = _unset ,
270+ after = _unset ,
271+ before_sleep = _unset ,
272+ reraise = _unset ,
273+ retry_error_cls = _unset ,
274+ retry_error_callback = _unset ,
275+ ):
275276 """Copy this object with some parameters changed if needed."""
276- if before_sleep is _unset :
277- before_sleep = self .before_sleep
278277 return self .__class__ (
279- sleep = self .sleep if sleep is _unset else sleep ,
280- stop = self .stop if stop is _unset else stop ,
281- wait = self .wait if wait is _unset else wait ,
282- retry = self .retry if retry is _unset else retry ,
283- before = self .before if before is _unset else before ,
284- after = self .after if after is _unset else after ,
285- before_sleep = before_sleep ,
286- reraise = self .reraise if after is _unset else reraise ,
278+ sleep = _first_set (sleep , self .sleep ),
279+ stop = _first_set (stop , self .stop ),
280+ wait = _first_set (wait , self .wait ),
281+ retry = _first_set (retry , self .retry ),
282+ before = _first_set (before , self .before ),
283+ after = _first_set (after , self .after ),
284+ before_sleep = _first_set (before_sleep , self .before_sleep ),
285+ reraise = _first_set (reraise , self .reraise ),
286+ retry_error_cls = _first_set (retry_error_cls , self .retry_error_cls ),
287+ retry_error_callback = _first_set (
288+ retry_error_callback , self .retry_error_callback
289+ ),
287290 )
288291
289292 def __repr__ (self ):
290293 attrs = dict (
291- _utils .visible_attrs (self , attrs = {'me' : id (self )}),
294+ _utils .visible_attrs (self , attrs = {"me" : id (self )}),
292295 __class__ = self .__class__ .__name__ ,
293296 )
294- return ("<%(__class__)s object at 0x%(me)x (stop=%(stop)s, "
295- "wait=%(wait)s, sleep=%(sleep)s, retry=%(retry)s, "
296- "before=%(before)s, after=%(after)s)>" ) % (attrs )
297+ return (
298+ "<%(__class__)s object at 0x%(me)x (stop=%(stop)s, "
299+ "wait=%(wait)s, sleep=%(sleep)s, retry=%(retry)s, "
300+ "before=%(before)s, after=%(after)s)>"
301+ ) % (attrs )
297302
298303 @property
299304 def statistics (self ):
@@ -328,6 +333,7 @@ def wraps(self, f):
328333
329334 :param f: A function to wraps for retrying.
330335 """
336+
331337 @_utils .wraps (f )
332338 def wrapped_f (* args , ** kw ):
333339 return self (f , * args , ** kw )
@@ -342,9 +348,9 @@ def retry_with(*args, **kwargs):
342348
343349 def begin (self , fn ):
344350 self .statistics .clear ()
345- self .statistics [' start_time' ] = _utils .now ()
346- self .statistics [' attempt_number' ] = 1
347- self .statistics [' idle_for' ] = 0
351+ self .statistics [" start_time" ] = _utils .now ()
352+ self .statistics [" attempt_number" ] = 1
353+ self .statistics [" idle_for" ] = 0
348354 self .fn = fn
349355
350356 def iter (self , retry_state ): # noqa
@@ -354,16 +360,16 @@ def iter(self, retry_state): # noqa
354360 self .before (retry_state )
355361 return DoAttempt ()
356362
357- is_explicit_retry = retry_state .outcome .failed \
358- and isinstance (retry_state .outcome .exception (), TryAgain )
363+ is_explicit_retry = retry_state .outcome .failed and isinstance (
364+ retry_state .outcome .exception (), TryAgain
365+ )
359366 if not (is_explicit_retry or self .retry (retry_state = retry_state )):
360367 return fut .result ()
361368
362369 if self .after is not None :
363370 self .after (retry_state = retry_state )
364371
365- self .statistics ['delay_since_first_attempt' ] = \
366- retry_state .seconds_since_start
372+ self .statistics ["delay_since_first_attempt" ] = retry_state .seconds_since_start
367373 if self .stop (retry_state = retry_state ):
368374 if self .retry_error_callback :
369375 return self .retry_error_callback (retry_state = retry_state )
@@ -378,8 +384,8 @@ def iter(self, retry_state): # noqa
378384 sleep = 0.0
379385 retry_state .next_action = RetryAction (sleep )
380386 retry_state .idle_for += sleep
381- self .statistics [' idle_for' ] += sleep
382- self .statistics [' attempt_number' ] += 1
387+ self .statistics [" idle_for" ] += sleep
388+ self .statistics [" attempt_number" ] += 1
383389
384390 if self .before_sleep is not None :
385391 self .before_sleep (retry_state = retry_state )
@@ -406,8 +412,10 @@ def __call__(self, *args, **kwargs):
406412
407413 def call (self , * args , ** kwargs ):
408414 """Use ``__call__`` instead because this method is deprecated."""
409- warnings .warn ("'call()' method is deprecated. " +
410- "Use '__call__()' instead" , DeprecationWarning )
415+ warnings .warn (
416+ "'call()' method is deprecated. " + "Use '__call__()' instead" ,
417+ DeprecationWarning ,
418+ )
411419 return self .__call__ (* args , ** kwargs )
412420
413421
@@ -417,14 +425,13 @@ class Retrying(BaseRetrying):
417425 def __call__ (self , fn , * args , ** kwargs ):
418426 self .begin (fn )
419427
420- retry_state = RetryCallState (
421- retry_object = self , fn = fn , args = args , kwargs = kwargs )
428+ retry_state = RetryCallState (retry_object = self , fn = fn , args = args , kwargs = kwargs )
422429 while True :
423430 do = self .iter (retry_state = retry_state )
424431 if isinstance (do , DoAttempt ):
425432 try :
426433 result = fn (* args , ** kwargs )
427- except BaseException :
434+ except BaseException : # noqa: B902
428435 retry_state .set_exception (sys .exc_info ())
429436 else :
430437 retry_state .set_result (result )
0 commit comments