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