projects
/
python_utils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Various changes.
[python_utils.git]
/
decorator_utils.py
diff --git
a/decorator_utils.py
b/decorator_utils.py
index c07023b1205950cad1d89edbbe13ad457c45f678..76faec6f7be2e8d52f3ed9c7e05e1dc6048d666b 100644
(file)
--- a/
decorator_utils.py
+++ b/
decorator_utils.py
@@
-18,8
+18,9
@@
import traceback
from typing import Callable, Optional
import warnings
from typing import Callable, Optional
import warnings
+# This module is commonly used by others in here and should avoid
+# taking any unnecessary dependencies back on them.
import exceptions
import exceptions
-import thread_utils
logger = logging.getLogger(__name__)
logger = logging.getLogger(__name__)
@@
-191,7
+192,7
@@
def retry_predicate(
tries: int,
*,
predicate: Callable[..., bool],
tries: int,
*,
predicate: Callable[..., bool],
- delay_sec: float = 3,
+ delay_sec: float = 3
.0
,
backoff: float = 2.0,
):
"""Retries a function or method up to a certain number of times
backoff: float = 2.0,
):
"""Retries a function or method up to a certain number of times
@@
-201,10
+202,10
@@
def retry_predicate(
delay_sec sets the initial delay period in seconds.
backoff is a multiplied (must be >1) used to modify the delay.
predicate is a function that will be passed the retval of the
delay_sec sets the initial delay period in seconds.
backoff is a multiplied (must be >1) used to modify the delay.
predicate is a function that will be passed the retval of the
-
decorated function and must return True to stop or False to
-
retry.
+ decorated function and must return True to stop or False to
+ retry.
"""
"""
- if backoff < 1:
+ if backoff < 1
.0
:
msg = f"backoff must be greater than or equal to 1, got {backoff}"
logger.critical(msg)
raise ValueError(msg)
msg = f"backoff must be greater than or equal to 1, got {backoff}"
logger.critical(msg)
raise ValueError(msg)
@@
-224,9
+225,11
@@
def retry_predicate(
@functools.wraps(f)
def f_retry(*args, **kwargs):
mtries, mdelay = tries, delay_sec # make mutable
@functools.wraps(f)
def f_retry(*args, **kwargs):
mtries, mdelay = tries, delay_sec # make mutable
+ logger.debug(f'deco_retry: will make up to {mtries} attempts...')
retval = f(*args, **kwargs)
while mtries > 0:
if predicate(retval) is True:
retval = f(*args, **kwargs)
while mtries > 0:
if predicate(retval) is True:
+ logger.debug('Predicate succeeded, deco_retry is done.')
return retval
logger.debug("Predicate failed, sleeping and retrying.")
mtries -= 1
return retval
logger.debug("Predicate failed, sleeping and retrying.")
mtries -= 1
@@
-337,7
+340,7
@@
def _target(queue, function, *args, **kwargs):
"""
try:
queue.put((True, function(*args, **kwargs)))
"""
try:
queue.put((True, function(*args, **kwargs)))
- except:
+ except
Exception
:
queue.put((False, sys.exc_info()[1]))
queue.put((False, sys.exc_info()[1]))
@@
-428,6
+431,7
@@
def timeout(
parameter. The function is wrapped and returned to the caller.
"""
if use_signals is None:
parameter. The function is wrapped and returned to the caller.
"""
if use_signals is None:
+ import thread_utils
use_signals = thread_utils.is_current_thread_main_thread()
def decorate(function):
use_signals = thread_utils.is_current_thread_main_thread()
def decorate(function):