From f6ac95e2dd14eff2ba6c86cc1512a88992e18538 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 27 Jan 2017 13:33:54 -0800 Subject: [PATCH] Convert objects to json (#2050) --- superset/models.py | 14 ++++++++++++++ superset/utils.py | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/superset/models.py b/superset/models.py index 34a0e63b33434..a9d6ff4b71ab8 100644 --- a/superset/models.py +++ b/superset/models.py @@ -9,8 +9,10 @@ import functools import json import logging +import numpy import pickle import re +import six import textwrap from copy import deepcopy, copy from datetime import timedelta, datetime, date @@ -789,6 +791,18 @@ def get_df(self, sql, schema): cur = eng.execute(sql, schema=schema) cols = [col[0] for col in cur.cursor.description] df = pd.DataFrame(cur.fetchall(), columns=cols) + + def needs_conversion(df_series): + if df_series.empty: + return False + for df_type in [list, dict]: + if isinstance(df_series[0], df_type): + return True + return False + + for k, v in df.dtypes.iteritems(): + if v.type == numpy.object_ and needs_conversion(df[k]): + df[k] = df[k].apply(utils.json_dumps_w_dates) return df def compile_sqla_query(self, qry, schema=None): diff --git a/superset/utils.py b/superset/utils.py index b9277109ae925..a60f1c0e4ee9d 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -291,6 +291,10 @@ def json_int_dttm_ser(obj): return obj +def json_dumps_w_dates(payload): + return json.dumps(payload, default=json_int_dttm_ser) + + def error_msg_from_exception(e): """Translate exception into error message