Skip to content

Commit 1f36fbf

Browse files
authored
Support date serialization in messages (#1060)
1 parent 6ea834d commit 1f36fbf

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

jupyter_client/jsonutil.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import warnings
99
from binascii import b2a_base64
1010
from collections.abc import Iterable
11-
from datetime import datetime
11+
from datetime import date, datetime
1212
from typing import Any, Optional, Union
1313

1414
from dateutil.parser import isoparse as _dateutil_parse
@@ -110,6 +110,9 @@ def json_default(obj: Any) -> Any:
110110
obj = _ensure_tzinfo(obj)
111111
return obj.isoformat().replace("+00:00", "Z")
112112

113+
if isinstance(obj, date):
114+
return obj.isoformat()
115+
113116
if isinstance(obj, bytes):
114117
return b2a_base64(obj, newline=False).decode("ascii")
115118

@@ -185,7 +188,7 @@ def json_clean(obj: Any) -> Any:
185188
out[str(k)] = json_clean(v)
186189
return out
187190

188-
if isinstance(obj, datetime):
191+
if isinstance(obj, (datetime, date)):
189192
return obj.strftime(ISO8601)
190193

191194
# we don't understand it, it's probably an unserializable object

tests/test_jsonutil.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def test_parse_ms_precision():
139139
assert isinstance(parsed, str)
140140

141141

142-
def test_json_default_date():
142+
def test_json_default_datetime():
143143
naive = datetime.datetime.now() # noqa
144144
local = tzoffset("Local", -8 * 3600)
145145
other = tzoffset("Other", 2 * 3600)
@@ -178,6 +178,7 @@ def test_json_default():
178178
(iter([1, 2]), [1, 2]),
179179
(MyFloat(), 3.14),
180180
(MyInt(), 389),
181+
(datetime.date(2025, 4, 8), "2025-04-08"),
181182
]
182183

183184
for val, jval in pairs:

0 commit comments

Comments
 (0)