-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommon.py
31 lines (26 loc) · 1.15 KB
/
common.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from functools import wraps
import time
import gspread
import pytz
# декоратор для обработки ошибок апи гугла
def api_decorator(func: callable) -> callable:
@wraps(func)
def wrapper(*args, **kwargs):
tries = 0
while True:
try:
result = func(*args, **kwargs)
return result
# при ошибке - подождать, затем исполнить функцию заново
except gspread.exceptions.APIError as e:
print(f'Ошибка {func}:', e)
tries += 1
wait = 2 ** tries # если ошибка повторилась - каждый новый раз ожидать экспоненциально больше
print(f'{tries} раз подряд, новая попытка через {wait} сек')
time.sleep(wait)
return wrapper
# данные для подключения к таблице
service_file = 'token.json'
gc = gspread.service_account(filename=service_file)
# текст обновления в gmt+3
tz = pytz.timezone("Etc/GMT-3")