diff --git a/superset/utils/core.py b/superset/utils/core.py index 2c9cbacf0dd..4ba09fa3d83 100644 --- a/superset/utils/core.py +++ b/superset/utils/core.py @@ -40,7 +40,7 @@ from urllib.parse import unquote_plus import bleach import markdown as md -import numpy +import numpy as np import pandas as pd import parsedatetime import sqlalchemy as sa @@ -343,10 +343,12 @@ def format_timedelta(td: timedelta) -> str: def base_json_conv(obj): if isinstance(obj, memoryview): obj = obj.tobytes() - if isinstance(obj, numpy.int64): + if isinstance(obj, np.int64): return int(obj) - elif isinstance(obj, numpy.bool_): + elif isinstance(obj, np.bool_): return bool(obj) + elif isinstance(obj, np.ndarray): + return obj.tolist() elif isinstance(obj, set): return list(obj) elif isinstance(obj, decimal.Decimal): diff --git a/tests/utils_tests.py b/tests/utils_tests.py index 8b0c45af55d..5bbfec1b328 100644 --- a/tests/utils_tests.py +++ b/tests/utils_tests.py @@ -121,6 +121,7 @@ class UtilsTestCase(SupersetTestCase): def test_base_json_conv(self): assert isinstance(base_json_conv(numpy.bool_(1)), bool) is True assert isinstance(base_json_conv(numpy.int64(1)), int) is True + assert isinstance(base_json_conv(numpy.array([1, 2, 3])), list) is True assert isinstance(base_json_conv(set([1])), list) is True assert isinstance(base_json_conv(Decimal("1.0")), float) is True assert isinstance(base_json_conv(uuid.uuid4()), str) is True