Skip to content

Commit

Permalink
Fix date serialization (#873)
Browse files Browse the repository at this point in the history
* [panoramix] -> [dashed]

* merge from caravel/master

* Updated from airbnb

* Cleaning

* Rebase with upstream/master

* merge from caravel/master

* Updated from airbnb

* Cleaning

* Manual rebase

* Last pending change to rebase

* Convert date to datetime before serialization.
Approach choosen: transform data before serialize and keep just one way to serialize

* Unit test created

* stupid error :(

* remove uneeded code and rename test

* Avoid double type checking
Test updated
note: isinstance(<datetime>, <date>) == True, check order changed

* Increase coverage

* Fix assertRaises
  • Loading branch information
gbrian authored and mistercrunch committed Aug 11, 2016
1 parent 2bfb9cc commit 198226a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
4 changes: 3 additions & 1 deletion caravel/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from __future__ import print_function
from __future__ import unicode_literals

from datetime import datetime
from datetime import datetime, date
import decimal
import functools
import json
Expand Down Expand Up @@ -318,6 +318,8 @@ def json_int_dttm_ser(obj):
return val
if isinstance(obj, datetime):
obj = (obj - EPOCH).total_seconds() * 1000
elif isinstance(obj, date):
obj = (obj - EPOCH.date()).total_seconds() * 1000
else:
raise TypeError(
"Unserializable object {} of type {}".format(obj, type(obj))
Expand Down
19 changes: 19 additions & 0 deletions tests/utils_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from datetime import datetime, date, timedelta
from caravel import utils
import unittest


class UtilsTestCase(unittest.TestCase):
def test_json_int_dttm_ser(self):
today = date.today()
now = datetime.now()
ms = utils.json_int_dttm_ser(today)
deser = (utils.EPOCH + timedelta(milliseconds=ms)).date()
assert today == deser, "Serialization error: %s is not %s" % (str(today), str(deser))
ms = utils.json_int_dttm_ser(now)
deser = (utils.EPOCH + timedelta(milliseconds=ms))
assert now == deser, "Serialization error: %s is not %s" % (str(now), str(deser))

with self.assertRaises(TypeError):
utils.json_int_dttm_ser("this is not a date")

0 comments on commit 198226a

Please sign in to comment.