From 5263840582bd529cdf480fb1675b161b50809d5a Mon Sep 17 00:00:00 2001 From: wasrusgen Date: Sun, 10 May 2026 21:06:02 +0300 Subject: [PATCH] fix(backend): retry sheet open if cached _book is None (after PermissionError) --- backend-py/app/sheets.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/backend-py/app/sheets.py b/backend-py/app/sheets.py index b9f0cc9..04697c2 100644 --- a/backend-py/app/sheets.py +++ b/backend-py/app/sheets.py @@ -17,11 +17,19 @@ _book: gspread.Spreadsheet | None = None def _client_book() -> tuple[gspread.Client, gspread.Spreadsheet]: global _client, _book with _lock: - if _client is None: - cfg = get_config() - creds = Credentials.from_service_account_file(cfg.google_credentials_path, scopes=_SCOPES) - _client = gspread.authorize(creds) - _book = _client.open_by_key(cfg.sheet_id) + # Если предыдущая попытка частично инициализировалась (auth прошёл, open_by_key упал) — + # _client есть, _book нет. Нужно повторить open_by_key. + if _client is None or _book is None: + try: + cfg = get_config() + if _client is None: + creds = Credentials.from_service_account_file(cfg.google_credentials_path, scopes=_SCOPES) + _client = gspread.authorize(creds) + _book = _client.open_by_key(cfg.sheet_id) + except Exception: + _client = None + _book = None + raise return _client, _book # type: ignore