diff --git a/requirements.txt b/requirements.txt index 76952f285..a0fd86706 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ python-dateutil==2.6.1 python-geohash==0.8.5 pyyaml==3.12 requests==2.18.4 -simplejson==3.13.2 +simplejson==3.15.0 six==1.11.0 sqlalchemy==1.2.2 sqlalchemy-utils==0.32.21 diff --git a/setup.py b/setup.py index c1f555fea..7adccb70f 100644 --- a/setup.py +++ b/setup.py @@ -85,7 +85,7 @@ setup( 'python-geohash', 'pyyaml>=3.11', 'requests', - 'simplejson', + 'simplejson>=3.15.0', 'six', 'sqlalchemy', 'sqlalchemy-utils', diff --git a/superset/utils.py b/superset/utils.py index eec253037..61d5cb63d 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -310,7 +310,6 @@ def datetime_f(dttm): def base_json_conv(obj): - if isinstance(obj, numpy.int64): return int(obj) elif isinstance(obj, numpy.bool_): @@ -323,6 +322,11 @@ def base_json_conv(obj): return str(obj) elif isinstance(obj, timedelta): return str(obj) + elif isinstance(obj, bytes): + try: + return '{}'.format(obj) + except Exception: + return '[bytes]' def json_iso_dttm_ser(obj, pessimistic=False): diff --git a/superset/views/core.py b/superset/views/core.py index 61fe7eb6c..3a0f28f80 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -2464,7 +2464,11 @@ class Superset(BaseSupersetView): rendered_query, return_results=True) payload = json.dumps( - data, default=utils.pessimistic_json_iso_dttm_ser, ignore_nan=True) + data, + default=utils.pessimistic_json_iso_dttm_ser, + ignore_nan=True, + encoding=None, + ) except Exception as e: logging.exception(e) return json_error_response('{}'.format(e))