mirror of
https://github.com/apache/superset.git
synced 2026-05-06 16:34:32 +00:00
utils: teach our json serializer to handle more types (#1907)
Namely datetime.time and numpy.bool_ Refs: #1900 Refs: #1903
This commit is contained in:
committed by
Maxime Beauchemin
parent
c2d29fb54b
commit
e3b296c558
@@ -1,24 +1,47 @@
|
||||
from datetime import datetime, date, timedelta
|
||||
from superset import utils
|
||||
import unittest
|
||||
|
||||
from mock import Mock, patch
|
||||
|
||||
class UtilsTestCase(unittest.TestCase):
|
||||
def test_json_int_dttm_ser(self):
|
||||
dttm = datetime(2020, 1, 1)
|
||||
ts = 1577836800000.0
|
||||
json_int_dttm_ser = utils.json_int_dttm_ser
|
||||
assert json_int_dttm_ser(dttm) == ts
|
||||
assert json_int_dttm_ser(date(2020, 1, 1)) == ts
|
||||
assert json_int_dttm_ser(datetime(1970, 1, 1)) == 0
|
||||
assert json_int_dttm_ser(date(1970, 1, 1)) == 0
|
||||
assert json_int_dttm_ser(dttm + timedelta(milliseconds=1)) == (ts + 1)
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
utils.json_int_dttm_ser("this is not a date")
|
||||
|
||||
@patch('superset.utils.datetime')
|
||||
def test_parse_human_timedelta(self, mock_now):
|
||||
mock_now.return_value = datetime(2016, 12, 1)
|
||||
self.assertEquals(utils.parse_human_timedelta('now'), timedelta(0))
|
||||
from datetime import datetime, date, timedelta, time
|
||||
from decimal import Decimal
|
||||
from superset.utils import (
|
||||
json_int_dttm_ser, json_iso_dttm_ser, base_json_conv, parse_human_timedelta
|
||||
)
|
||||
import unittest
|
||||
import uuid
|
||||
|
||||
from mock import Mock, patch
|
||||
import numpy
|
||||
|
||||
|
||||
class UtilsTestCase(unittest.TestCase):
|
||||
def test_json_int_dttm_ser(self):
|
||||
dttm = datetime(2020, 1, 1)
|
||||
ts = 1577836800000.0
|
||||
assert json_int_dttm_ser(dttm) == ts
|
||||
assert json_int_dttm_ser(date(2020, 1, 1)) == ts
|
||||
assert json_int_dttm_ser(datetime(1970, 1, 1)) == 0
|
||||
assert json_int_dttm_ser(date(1970, 1, 1)) == 0
|
||||
assert json_int_dttm_ser(dttm + timedelta(milliseconds=1)) == (ts + 1)
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
json_int_dttm_ser("this is not a date")
|
||||
|
||||
def test_json_iso_dttm_ser(self):
|
||||
dttm = datetime(2020, 1, 1)
|
||||
dt = date(2020, 1, 1)
|
||||
t = time()
|
||||
assert json_iso_dttm_ser(dttm) == dttm.isoformat()
|
||||
assert json_iso_dttm_ser(dt) == dt.isoformat()
|
||||
assert json_iso_dttm_ser(t) == t.isoformat()
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
json_iso_dttm_ser("this is not a date")
|
||||
|
||||
def test_base_json_conv(self):
|
||||
assert isinstance(base_json_conv(numpy.bool_(1)), bool) == True
|
||||
assert isinstance(base_json_conv(numpy.int64(1)), int) == True
|
||||
assert isinstance(base_json_conv(set([1])), list) == True
|
||||
assert isinstance(base_json_conv(Decimal('1.0')), float) == True
|
||||
assert isinstance(base_json_conv(uuid.uuid4()), str) == True
|
||||
|
||||
@patch('superset.utils.datetime')
|
||||
def test_parse_human_timedelta(self, mock_now):
|
||||
mock_now.return_value = datetime(2016, 12, 1)
|
||||
self.assertEquals(parse_human_timedelta('now'), timedelta(0))
|
||||
|
||||
Reference in New Issue
Block a user