Skip to content

Commit 0229711

Browse files
committed
deprecate extracting dates in message headers
adds Session.extract_header_dates config and JUPYTER_SESSION_EXTRACT_HEADER_DATES env default unchanged, but deprecated
1 parent a66bd11 commit 0229711

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed

jupyter_client/session.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
Set,
4242
TraitError,
4343
Unicode,
44+
default,
4445
observe,
4546
)
4647
from traitlets.config.configurable import Configurable, LoggingConfigurable
@@ -420,6 +421,38 @@ def _session_changed(self, change: t.Any) -> None:
420421
"message.",
421422
)
422423

424+
extract_header_dates = Bool(
425+
True,
426+
config=True,
427+
help="""
428+
Parse timestamps in message headers to datetime objects.
429+
430+
If True, `date` and other timestamp fields
431+
will be `datetime.datetime` objects.
432+
If False, they will be ISO8601 strings.
433+
434+
Parsing has a performance cost and is deprecated,
435+
but kept as default for backward compatibility.
436+
""",
437+
)
438+
439+
@default("extract_header_dates")
440+
def _extract_header_dates_default(self):
441+
msg = """
442+
Session.extract_header_dates = True is deprecated in jupyter-client 8.6
443+
444+
set cfg.Session.extract_header_dates = False
445+
or JUPYTER_SESSION_EXTRACT_HEADER_DATES=0
446+
to avoid this message.
447+
448+
"""
449+
env_value = os.environ.get("JUPYTER_SESSION_EXTRACT_HEADER_DATES", "") != "0"
450+
if env_value:
451+
warnings.warn(msg, DeprecationWarning, stacklevel=2)
452+
return True
453+
else:
454+
return False
455+
423456
# if 0, no adapting to do.
424457
adapt_version = Integer(0)
425458

@@ -1076,10 +1109,14 @@ def deserialize(
10761109
msg = "malformed message, must have at least %i elements" % minlen
10771110
raise TypeError(msg)
10781111
header = self.unpack(msg_list[1])
1079-
message["header"] = extract_dates(header)
1112+
parent_header = self.unpack(msg_list[2])
1113+
if self.extract_header_dates:
1114+
header = extract_dates(header)
1115+
parent_header = extract_dates(parent_header)
1116+
message["header"] = header
10801117
message["msg_id"] = header["msg_id"]
10811118
message["msg_type"] = header["msg_type"]
1082-
message["parent_header"] = extract_dates(self.unpack(msg_list[2]))
1119+
message["parent_header"] = parent_header
10831120
message["metadata"] = self.unpack(msg_list[3])
10841121
if content:
10851122
message["content"] = self.unpack(msg_list[4])

0 commit comments

Comments
 (0)