31def Retry(attempts_amount=3, exception_to_check=Exception, sleep_time=1) -> Callable:
32 """
33 Декоратор для повторения попыток выполнения функции
34
35 Args:
36 attempts_amount (int, optional): кол-во попыток. Defaults to 3.
37 exception_to_check (_type_, optional): улавливаемое исключение. Defaults to Exception.
38 sleep_time (int, optional): время ожидания между попытками. Defaults to 1.
39
40 Returns:
41 Callable: декорируемая функция
42 """
43
44 def Decorate(func: Callable) -> Callable:
45 @wraps(func)
46 def Wrapper(*args, **kwargs):
47 for attempt in range(1, attempts_amount+1):
48 try:
49 return func(*args, **kwargs)
50
51 except exception_to_check as exception:
52 logger.warning(f"{exception} | Attempt: {
53 attempt}".ljust(77))
54 if attempt < attempts_amount:
55 time.sleep(sleep_time)
56
57 logger.error("All attempts failed".ljust(77))
58 return None
59 return Wrapper
60 return Decorate