mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-11-09 14:01:03 +00:00
Nicer error when packing a datetime without tzinfo (#466)
This commit is contained in:
parent
cfa05d3fdc
commit
e464cb44fa
3 changed files with 22 additions and 0 deletions
|
|
@ -285,6 +285,8 @@ cdef class Packer(object):
|
||||||
o = self._default(o)
|
o = self._default(o)
|
||||||
default_used = 1
|
default_used = 1
|
||||||
continue
|
continue
|
||||||
|
elif self.datetime and PyDateTime_CheckExact(o):
|
||||||
|
PyErr_Format(ValueError, b"can not serialize '%.200s' object where tzinfo=None", Py_TYPE(o).tp_name)
|
||||||
else:
|
else:
|
||||||
PyErr_Format(TypeError, b"can not serialize '%.200s' object", Py_TYPE(o).tp_name)
|
PyErr_Format(TypeError, b"can not serialize '%.200s' object", Py_TYPE(o).tp_name)
|
||||||
return ret
|
return ret
|
||||||
|
|
|
||||||
|
|
@ -874,6 +874,10 @@ class Packer(object):
|
||||||
obj = self._default(obj)
|
obj = self._default(obj)
|
||||||
default_used = 1
|
default_used = 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if self._datetime and check(obj, _DateTime):
|
||||||
|
raise ValueError("Cannot serialize %r where tzinfo=None" % (obj,))
|
||||||
|
|
||||||
raise TypeError("Cannot serialize %r" % (obj,))
|
raise TypeError("Cannot serialize %r" % (obj,))
|
||||||
|
|
||||||
def pack(self, obj):
|
def pack(self, obj):
|
||||||
|
|
|
||||||
|
|
@ -140,3 +140,19 @@ def test_issue451():
|
||||||
|
|
||||||
unpacked = msgpack.unpackb(packed, timestamp=3)
|
unpacked = msgpack.unpackb(packed, timestamp=3)
|
||||||
assert dt == unpacked
|
assert dt == unpacked
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info[0] == 2, reason="datetime support is PY3+ only")
|
||||||
|
def test_pack_datetime_without_tzinfo():
|
||||||
|
dt = datetime.datetime(1970, 1, 1, 0, 0, 42, 14)
|
||||||
|
with pytest.raises(ValueError, match="where tzinfo=None"):
|
||||||
|
packed = msgpack.packb(dt, datetime=True)
|
||||||
|
|
||||||
|
dt = datetime.datetime(1970, 1, 1, 0, 0, 42, 14)
|
||||||
|
packed = msgpack.packb(dt, datetime=True, default=lambda x: None)
|
||||||
|
assert packed == msgpack.packb(None)
|
||||||
|
|
||||||
|
dt = datetime.datetime(1970, 1, 1, 0, 0, 42, 14, tzinfo=_utc)
|
||||||
|
packed = msgpack.packb(dt, datetime=True)
|
||||||
|
unpacked = msgpack.unpackb(packed, timestamp=3)
|
||||||
|
assert unpacked == dt
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue