diff --git a/sbws/util/state.py b/sbws/util/state.py index 50e6a66ef43402e970822c6ebbc2de5649635b99..b6614a7082de6cf37bfc2b8529705dec58d50267 100644 --- a/sbws/util/state.py +++ b/sbws/util/state.py @@ -2,6 +2,8 @@ from sbws.util.filelock import FileLock import os import json +from .json import CustomDecoder, CustomEncoder + class State: """ @@ -48,12 +50,12 @@ class State: return {} with FileLock(self._fname): with open(self._fname, 'rt') as fd: - return json.load(fd) + return json.load(fd, cls=CustomDecoder) def _write(self): with FileLock(self._fname): with open(self._fname, 'wt') as fd: - return json.dump(self._state, fd, indent=4) + return json.dump(self._state, fd, indent=4, cls=CustomEncoder) def __len__(self): self._state = self._read() diff --git a/tests/unit/util/test_state.py b/tests/unit/util/test_state.py index a57768dc68d62c61916b0c9882194309c3a9b154..d08a4a960468217382c5d2e86ccb9d95d2aaf428 100644 --- a/tests/unit/util/test_state.py +++ b/tests/unit/util/test_state.py @@ -83,3 +83,11 @@ def test_two_instances(tmpdir): s1["x"] = "foo" s2["y"] = "bar" assert s2["x"] == "foo" + + +def test_datetime_values(tmpdir): + import datetime + state = State(os.path.join(str(tmpdir), 'state.dat')) + now = datetime.datetime.utcnow().replace(microsecond=0) + state["datetimes"] = now + assert now == state["datetimes"]