50 ) -> Callable:
51 """
52 Повторяет попытки выполнения функции в случае возникновения исключения.
53
54 Если `attempts_amount == 1`, просто оборачивает декорируемую функцию в
55 `try-except`.
56
57 Args:
58 attempts_amount (int, optional): количество попыток.
59 Defaults to [берется из конфигурации].
60 exception_to_check (type[Exception], optional): тип исключения для
61 перехвата. Defaults to Exception.
62 sleep_time (int, optional): время ожидания между попытками (в секундах).
63 Defaults to [берется из конфигурации].
64
65 Returns:
66 Callable: декорируемая функция.
67 """
68
69 def Decorate(func: Callable) -> Callable:
70 """Декорирует функцию."""
71
72 @wraps(func)
73 def Wrapper(*args, **kwargs):
74
75 for attempt in range(1, attempts_amount + 1):
76 try:
77
78 return func(*args, **kwargs)
79
80
81 except exception_to_check as exception:
82
83 v_logger.LogException(exception)
84
85
86 if attempt < attempts_amount:
87 v_logger.warning(f"Attempt: {attempt}. Retrying.")
88
89 time.sleep(sleep_time)
90
91
92 if attempts_amount != 1:
93 v_logger.error("All attempts failed!")
94
95
96
97 return None
98
99
100 return Wrapper
101
102 return Decorate