-
Notifications
You must be signed in to change notification settings - Fork 979
Description
Describe the bug
gs.oauth() authorized_user.json token expires every week, I have to manualy delete authorized_user.json to regain authentication
To Reproduce
Steps to reproduce the behavior:
- Authorize in browser after calling gs.oauth()
- Wait 1 week
- Token expired, client is unable to continue:
RefreshError: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'})
Expected behavior
Gs should be able to refresh the token, have the option to request token for a longer than a week, or at least run browser authentication again
Environment info:
- Arch Linux
- Python version: 3.9.7-1
- Gspread version: 3.7.0
Exception
`RefreshError: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'}) --------------------------------------------------------------------------- RefreshError Traceback (most recent call last) /tmp/ipykernel_25388/854339441.py in ----> 1 scans_sheet.batch_get(['C:C', 'L:L', 'V:V'], major_dimension='COLUMNS')~/.local/lib/python3.9/site-packages/gspread/utils.py in wrapper(*args, **kwargs)
590 kwargs.setdefault(k, v)
591
--> 592 return f(*args, **kwargs)
593
594 return wrapper
~/.local/lib/python3.9/site-packages/gspread/models.py in batch_get(self, ranges, **kwargs)
1025 )
1026
-> 1027 response = self.spreadsheet.values_batch_get(
1028 ranges=ranges, params=params
1029 )
~/.local/lib/python3.9/site-packages/gspread/models.py in values_batch_get(self, ranges, params)
207
208 url = SPREADSHEET_VALUES_BATCH_URL % (self.id)
--> 209 r = self.client.request("get", url, params=params)
210 return r.json()
211
~/.local/lib/python3.9/site-packages/gspread/client.py in request(self, method, endpoint, params, data, json, files, headers)
62 headers=None,
63 ):
---> 64 response = getattr(self.session, method)(
65 endpoint,
66 json=json,
/usr/lib/python3.9/site-packages/requests/sessions.py in get(self, url, **kwargs)
553
554 kwargs.setdefault('allow_redirects', True)
--> 555 return self.request('GET', url, **kwargs)
556
557 def options(self, url, **kwargs):
~/.local/lib/python3.9/site-packages/google/auth/transport/requests.py in request(self, method, url, data, headers, max_allowed_time, timeout, **kwargs)
472
473 with TimeoutGuard(remaining_time) as guard:
--> 474 self.credentials.before_request(auth_request, method, url, request_headers)
475 remaining_time = guard.remaining_timeout
476
~/.local/lib/python3.9/site-packages/google/auth/credentials.py in before_request(self, request, method, url, headers)
131 # the http request.)
132 if not self.valid:
--> 133 self.refresh(request)
134 self.apply(headers)
135
~/.local/lib/python3.9/site-packages/google/oauth2/credentials.py in refresh(self, request)
226 grant_response,
227 rapt_token,
--> 228 ) = reauth.refresh_grant(
229 request,
230 self._token_uri,
~/.local/lib/python3.9/site-packages/google/oauth2/reauth.py in refresh_grant(request, token_uri, refresh_token, client_id, client_secret, scopes, rapt_token)
336
337 if not response_status_ok:
--> 338 _client._handle_error_response(response_data)
339 return _client._handle_refresh_grant_response(response_data, refresh_token) + (
340 rapt_token,
~/.local/lib/python3.9/site-packages/google/oauth2/_client.py in _handle_error_response(response_data)
58 error_details = json.dumps(response_data)
59
---> 60 raise exceptions.RefreshError(error_details, response_data)
61
62
RefreshError: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'})`