Fix bug in epoch field tests

This commit is contained in:
Ethan Paul 2020-03-09 00:15:10 -04:00
parent e5b4de799c
commit 98089c42d4
2 changed files with 16 additions and 6 deletions

View File

@ -1,5 +1,5 @@
"""Custom fields for handing de/serializing custom data types""" """Custom fields for handing de/serializing custom data types"""
from datetime import datetime import datetime
from enum import Enum from enum import Enum
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
@ -87,10 +87,12 @@ class PathString(msh.fields.String):
class Epoch(msh.fields.Field): class Epoch(msh.fields.Field):
"""Translate between datetime objects and an integer reperesenting epoch time""" """Translate between datetime objects and an integer reperesenting epoch time"""
def _serialize(self, value: Union[datetime, int], attr, obj, **kwargs) -> int: def _serialize(
self, value: Union[datetime.datetime, int], attr, obj, **kwargs
) -> int:
"""Serialize a datetime object to an integer""" """Serialize a datetime object to an integer"""
if isinstance(value, datetime): if isinstance(value, datetime.datetime):
return int(value.replace(tzinfo=datetime.timezone.utc).timestamp()) return int(value.replace(tzinfo=datetime.timezone.utc).timestamp())
return value return value
@ -104,7 +106,7 @@ class Epoch(msh.fields.Field):
raise msh.ValidationError( raise msh.ValidationError(
f"Invalid epoch value '{value}' of type '{type(value)}'" f"Invalid epoch value '{value}' of type '{type(value)}'"
) )
return datetime.utcfromtimestamp(int(value)) return datetime.datetime.utcfromtimestamp(int(value))
class RawMultiType(msh.fields.Raw): class RawMultiType(msh.fields.Raw):

View File

@ -183,7 +183,10 @@ def test_epoch():
for data in good_data: for data in good_data:
loaded = serializer.load(data) loaded = serializer.load(data)
assert isinstance(loaded["iamepoch"], datetime.datetime) assert isinstance(loaded["iamepoch"], datetime.datetime)
assert int(loaded["iamepoch"].timestamp()) == data["iamepoch"] assert (
int(loaded["iamepoch"].replace(tzinfo=datetime.timezone.utc).timestamp())
== data["iamepoch"]
)
assert data == serializer.dump(loaded) assert data == serializer.dump(loaded)
for data in bad_data: for data in bad_data:
@ -210,7 +213,12 @@ def test_epoch_none():
assert loaded["iamepoch"] is None assert loaded["iamepoch"] is None
else: else:
assert isinstance(loaded["iamepoch"], datetime.datetime) assert isinstance(loaded["iamepoch"], datetime.datetime)
assert int(loaded["iamepoch"].timestamp()) == item["iamepoch"] assert (
int(
loaded["iamepoch"].replace(tzinfo=datetime.timezone.utc).timestamp()
)
== item["iamepoch"]
)
assert item == serializer.dump(loaded) assert item == serializer.dump(loaded)