Skip to content

Commit

Permalink
Google Sheets: friendlier error message in case of an API error and m…
Browse files Browse the repository at this point in the history
…ore reliable test connection (#3883)

* Google Sheets: friendlier error message in case of an APIError and more reliable test connection.

* Pleasing the pep8 gods
  • Loading branch information
arikfr authored Jun 12, 2019
1 parent f8d05dd commit 1630cbb
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion redash/query_runner/google_spreadsheets.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

try:
import gspread
from gspread.exceptions import APIError
from oauth2client.service_account import ServiceAccountCredentials

enabled = True
Expand Down Expand Up @@ -120,6 +121,17 @@ def is_url_key(key):
return key.startswith('https://')


def parse_api_error(error):
error_data = error.response.json()

if 'error' in error_data and 'message' in error_data['error']:
message = error_data['error']['message']
else:
message = error.message

return message


class TimeoutSession(Session):
def request(self, *args, **kwargs):
kwargs.setdefault('timeout', 300)
Expand Down Expand Up @@ -176,7 +188,13 @@ def _get_spreadsheet_service(self):
return spreadsheetservice

def test_connection(self):
self._get_spreadsheet_service()
service = self._get_spreadsheet_service()
test_spreadsheet_key = '1S0mld7LMbUad8LYlo13Os9f7eNjw57MqVC0YiCd1Jis'
try:
service.open_by_key(test_spreadsheet_key).worksheets()
except APIError as e:
message = parse_api_error(e)
raise Exception(message)

def run_query(self, query, user):
logger.debug("Spreadsheet is about to execute query: %s", query)
Expand All @@ -195,6 +213,8 @@ def run_query(self, query, user):
return json_dumps(data), None
except gspread.SpreadsheetNotFound:
return None, "Spreadsheet ({}) not found. Make sure you used correct id.".format(key)
except APIError as e:
return None, parse_api_error(e)


register(GoogleSpreadsheet)

0 comments on commit 1630cbb

Please sign in to comment.