Skip to content

Commit

Permalink
Merge pull request #589 from shyamgopal/master
Browse files Browse the repository at this point in the history
Fix: Google spreadsheet data source: cast values to their actual type from string
  • Loading branch information
arikfr committed Oct 6, 2015
2 parents 32311c5 + 2ac795d commit 6286024
Showing 1 changed file with 35 additions and 6 deletions.
41 changes: 35 additions & 6 deletions redash/query_runner/google_spreadsheets.py
Expand Up @@ -24,22 +24,51 @@ def _load_key(filename):
def _guess_type(value):
try:
val = int(value)
return TYPE_INTEGER, val
return TYPE_INTEGER
except ValueError:
pass
try:
val = float(value)
return TYPE_FLOAT, val
return TYPE_FLOAT
except ValueError:
pass
if str(value).lower() in ('true', 'false'):
return TYPE_BOOLEAN, bool(value)
return TYPE_BOOLEAN
try:
val = parser.parse(value)
return TYPE_DATETIME, val
return TYPE_DATETIME
except ValueError:
pass
return TYPE_STRING, value
return TYPE_STRING


def _value_eval_list(value):
value_list = []
for member in value:
try:
val = int(member)
value_list.append(val)
continue
except ValueError:
pass
try:
val = float(member)
value_list.append(val)
continue
except ValueError:
pass
if str(member).lower() in ('true', 'false'):
val = bool(member)
value_list.append(val)
continue
try:
val = parser.parse(member)
value_list.append(val)
continue
except ValueError:
pass
value_list.append(member)
return value_list


class GoogleSpreadsheet(BaseQueryRunner):
Expand Down Expand Up @@ -102,7 +131,7 @@ def run_query(self, query):
'friendly_name': column_name,
'type': _guess_type(all_data[self.HEADER_INDEX+1][j])
})
rows = [dict(zip(column_names, row)) for row in all_data[self.HEADER_INDEX+1:]]
rows = [dict(zip(column_names, _value_eval_list(row))) for row in all_data[self.HEADER_INDEX+1:]]
data = {'columns': columns, 'rows': rows}
json_data = json.dumps(data, cls=JSONEncoder)
error = None
Expand Down

0 comments on commit 6286024

Please sign in to comment.