|
41 | 41 | Set,
|
42 | 42 | TraitError,
|
43 | 43 | Unicode,
|
| 44 | + default, |
44 | 45 | observe,
|
45 | 46 | )
|
46 | 47 | from traitlets.config.configurable import Configurable, LoggingConfigurable
|
@@ -420,6 +421,36 @@ def _session_changed(self, change: t.Any) -> None:
|
420 | 421 | "message.",
|
421 | 422 | )
|
422 | 423 |
|
| 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 = """Session.extract_header_dates = True is deprecated in jupyter-client 8.6 |
| 442 | +
|
| 443 | + set cfg.Session.extract_header_dates = False |
| 444 | + or JUPYTER_SESSION_EXTRACT_HEADER_DATES=0 |
| 445 | + to avoid this message. |
| 446 | + """ |
| 447 | + env_value = os.environ.get("JUPYTER_SESSION_EXTRACT_HEADER_DATES", "") != "0" |
| 448 | + if env_value: |
| 449 | + warnings.warn(msg, DeprecationWarning, stacklevel=2) |
| 450 | + return True |
| 451 | + else: |
| 452 | + return False |
| 453 | + |
423 | 454 | # if 0, no adapting to do.
|
424 | 455 | adapt_version = Integer(0)
|
425 | 456 |
|
@@ -1076,10 +1107,14 @@ def deserialize(
|
1076 | 1107 | msg = "malformed message, must have at least %i elements" % minlen
|
1077 | 1108 | raise TypeError(msg)
|
1078 | 1109 | header = self.unpack(msg_list[1])
|
1079 |
| - message["header"] = extract_dates(header) |
| 1110 | + parent_header = self.unpack(msg_list[2]) |
| 1111 | + if self.extract_header_dates: |
| 1112 | + header = extract_dates(header) |
| 1113 | + parent_header = extract_dates(parent_header) |
| 1114 | + message["header"] = header |
1080 | 1115 | message["msg_id"] = header["msg_id"]
|
1081 | 1116 | message["msg_type"] = header["msg_type"]
|
1082 |
| - message["parent_header"] = extract_dates(self.unpack(msg_list[2])) |
| 1117 | + message["parent_header"] = parent_header |
1083 | 1118 | message["metadata"] = self.unpack(msg_list[3])
|
1084 | 1119 | if content:
|
1085 | 1120 | message["content"] = self.unpack(msg_list[4])
|
|
0 commit comments