239 lines
8.6 KiB
Diff
239 lines
8.6 KiB
Diff
Backported to 6.29.5 from https://github.com/ipython/ipykernel/pull/1277
|
|
See https://github.com/ipython/ipykernel/issues/1302
|
|
|
|
diff --git a/docs/conf.py b/docs/conf.py
|
|
index 4bb59932..38a724b5 100644
|
|
--- a/docs/conf.py
|
|
+++ b/docs/conf.py
|
|
@@ -13,7 +13,7 @@
|
|
import os
|
|
import shutil
|
|
from pathlib import Path
|
|
-from typing import Any, Dict, List
|
|
+from typing import Any
|
|
|
|
# If extensions (or modules to document with autodoc) are in another directory,
|
|
# add these directories to sys.path here. If the directory is relative to the
|
|
@@ -70,7 +70,7 @@
|
|
# built documents.
|
|
#
|
|
|
|
-version_ns: Dict[str, Any] = {}
|
|
+version_ns: dict[str, Any] = {}
|
|
here = Path(__file__).parent.resolve()
|
|
version_py = Path(here) / os.pardir / "ipykernel" / "_version.py"
|
|
with open(version_py) as f:
|
|
@@ -159,7 +159,7 @@
|
|
# Add any paths that contain custom static files (such as style sheets) here,
|
|
# relative to this directory. They are copied after the builtin static files,
|
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
-html_static_path: List[str] = []
|
|
+html_static_path: list[str] = []
|
|
|
|
# Add any extra paths that contain custom files (such as robots.txt or
|
|
# .htaccess) here, relative to this directory. These files are copied
|
|
@@ -226,7 +226,7 @@
|
|
|
|
# -- Options for LaTeX output ---------------------------------------------
|
|
|
|
-latex_elements: Dict[str, object] = {}
|
|
+latex_elements: dict[str, object] = {}
|
|
|
|
# Grouping the document tree into LaTeX files. List of tuples
|
|
# (source start file, target name, title,
|
|
diff --git a/ipykernel/_version.py b/ipykernel/_version.py
|
|
index d9a9f534..5907d150 100644
|
|
--- a/ipykernel/_version.py
|
|
+++ b/ipykernel/_version.py
|
|
@@ -2,7 +2,6 @@
|
|
store the current version info of the server.
|
|
"""
|
|
import re
|
|
-from typing import List
|
|
|
|
# Version string must appear intact for hatch versioning
|
|
__version__ = "7.0.0a0"
|
|
@@ -11,7 +10,7 @@
|
|
pattern = r"(?P<major>\d+).(?P<minor>\d+).(?P<patch>\d+)(?P<rest>.*)"
|
|
match = re.match(pattern, __version__)
|
|
assert match is not None
|
|
-parts: List[object] = [int(match[part]) for part in ["major", "minor", "patch"]]
|
|
+parts: list[object] = [int(match[part]) for part in ["major", "minor", "patch"]]
|
|
if match["rest"]:
|
|
parts.append(match["rest"])
|
|
version_info = tuple(parts)
|
|
diff --git a/ipykernel/debugger.py b/ipykernel/debugger.py
|
|
index 8680793f..780d1801 100644
|
|
--- a/ipykernel/debugger.py
|
|
+++ b/ipykernel/debugger.py
|
|
@@ -130,7 +130,7 @@ def _reset_tcp_pos(self):
|
|
|
|
def _put_message(self, raw_msg):
|
|
self.log.debug("QUEUE - _put_message:")
|
|
- msg = t.cast(t.Dict[str, t.Any], jsonapi.loads(raw_msg))
|
|
+ msg = t.cast(dict[str, t.Any], jsonapi.loads(raw_msg))
|
|
if msg["type"] == "event":
|
|
self.log.debug("QUEUE - received event:")
|
|
self.log.debug(msg)
|
|
diff --git a/ipykernel/inprocess/channels.py b/ipykernel/inprocess/channels.py
|
|
index 378416dc..4c01c5bc 100644
|
|
--- a/ipykernel/inprocess/channels.py
|
|
+++ b/ipykernel/inprocess/channels.py
|
|
@@ -3,8 +3,6 @@
|
|
# Copyright (c) IPython Development Team.
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
-from typing import List
|
|
-
|
|
from jupyter_client.channelsabc import HBChannelABC
|
|
|
|
# -----------------------------------------------------------------------------
|
|
@@ -15,7 +13,7 @@
|
|
class InProcessChannel:
|
|
"""Base class for in-process channels."""
|
|
|
|
- proxy_methods: List[object] = []
|
|
+ proxy_methods: list[object] = []
|
|
|
|
def __init__(self, client=None):
|
|
"""Initialize the channel."""
|
|
diff --git a/ipykernel/iostream.py b/ipykernel/iostream.py
|
|
index beca44b1..81170b97 100644
|
|
--- a/ipykernel/iostream.py
|
|
+++ b/ipykernel/iostream.py
|
|
@@ -15,7 +15,7 @@
|
|
from collections import defaultdict, deque
|
|
from io import StringIO, TextIOBase
|
|
from threading import local
|
|
-from typing import Any, Callable, Deque, Dict, Optional
|
|
+from typing import Any, Callable, Optional
|
|
|
|
import zmq
|
|
from jupyter_client.session import extract_header
|
|
@@ -94,8 +94,8 @@ def __init__(self, socket, pipe=False):
|
|
if pipe:
|
|
self._setup_pipe_in()
|
|
self._local = threading.local()
|
|
- self._events: Deque[Callable[..., Any]] = deque()
|
|
- self._event_pipes: Dict[threading.Thread, Any] = {}
|
|
+ self._events: deque[Callable[..., Any]] = deque()
|
|
+ self._event_pipes: dict[threading.Thread, Any] = {}
|
|
self._event_pipe_gc_lock: threading.Lock = threading.Lock()
|
|
self._event_pipe_gc_seconds: float = 10
|
|
self._setup_event_pipe()
|
|
@@ -470,7 +470,7 @@ def __init__(
|
|
self.pub_thread = pub_thread
|
|
self.name = name
|
|
self.topic = b"stream." + name.encode()
|
|
- self._parent_header: contextvars.ContextVar[Dict[str, Any]] = contextvars.ContextVar(
|
|
+ self._parent_header: contextvars.ContextVar[dict[str, Any]] = contextvars.ContextVar(
|
|
"parent_header"
|
|
)
|
|
self._parent_header.set({})
|
|
diff --git a/ipykernel/ipkernel.py b/ipykernel/ipkernel.py
|
|
index db83d986..48efa6cd 100644
|
|
--- a/ipykernel/ipkernel.py
|
|
+++ b/ipykernel/ipkernel.py
|
|
@@ -1,5 +1,7 @@
|
|
"""The IPython kernel implementation"""
|
|
|
|
+from __future__ import annotations
|
|
+
|
|
import asyncio
|
|
import builtins
|
|
import gc
|
|
@@ -16,7 +18,7 @@
|
|
from IPython.core import release
|
|
from IPython.utils.tokenutil import line_at_cursor, token_at_cursor
|
|
from jupyter_client.session import extract_header
|
|
-from traitlets import Any, Bool, HasTraits, Instance, List, Type, observe, observe_compat
|
|
+from traitlets import Any, Bool, HasTraits, Instance, List, Type, default, observe, observe_compat
|
|
from zmq.eventloop.zmqstream import ZMQStream
|
|
|
|
from .comm.comm import BaseComm
|
|
@@ -46,7 +48,7 @@ def _create_comm(*args, **kwargs):
|
|
|
|
# there can only be one comm manager in a ipykernel process
|
|
_comm_lock = threading.Lock()
|
|
-_comm_manager: t.Optional[CommManager] = None
|
|
+_comm_manager: CommManager | None = None
|
|
|
|
|
|
def _get_comm_manager(*args, **kwargs):
|
|
@@ -84,7 +86,11 @@ def _user_module_changed(self, change):
|
|
if self.shell is not None:
|
|
self.shell.user_module = change["new"]
|
|
|
|
- user_ns = Instance(dict, args=None, allow_none=True)
|
|
+ user_ns = Instance("collections.abc.Mapping", allow_none=True)
|
|
+
|
|
+ @default("user_ns")
|
|
+ def _default_user_ns(self):
|
|
+ return dict()
|
|
|
|
@observe("user_ns")
|
|
@observe_compat
|
|
@@ -353,7 +359,7 @@ async def do_execute(
|
|
|
|
self._forward_input(allow_stdin)
|
|
|
|
- reply_content: t.Dict[str, t.Any] = {}
|
|
+ reply_content: dict[str, t.Any] = {}
|
|
if hasattr(shell, "run_cell_async") and hasattr(shell, "should_run_async"):
|
|
run_cell = shell.run_cell_async
|
|
should_run_async = shell.should_run_async
|
|
@@ -559,7 +565,7 @@ def do_inspect(self, code, cursor_pos, detail_level=0, omit_sections=()):
|
|
"""Handle code inspection."""
|
|
name = token_at_cursor(code, cursor_pos)
|
|
|
|
- reply_content: t.Dict[str, t.Any] = {"status": "ok"}
|
|
+ reply_content: dict[str, t.Any] = {"status": "ok"}
|
|
reply_content["data"] = {}
|
|
reply_content["metadata"] = {}
|
|
assert self.shell is not None
|
|
@@ -755,7 +761,7 @@ def init_closure(self: threading.Thread, *args, **kwargs):
|
|
threading.Thread.run = run_closure # type:ignore[method-assign]
|
|
|
|
def _clean_thread_parent_frames(
|
|
- self, phase: t.Literal["start", "stop"], info: t.Dict[str, t.Any]
|
|
+ self, phase: t.Literal["start", "stop"], info: dict[str, t.Any]
|
|
):
|
|
"""Clean parent frames of threads which are no longer running.
|
|
This is meant to be invoked by garbage collector callback hook.
|
|
diff --git a/ipykernel/pickleutil.py b/ipykernel/pickleutil.py
|
|
index 6f156594..4ffa5262 100644
|
|
--- a/ipykernel/pickleutil.py
|
|
+++ b/ipykernel/pickleutil.py
|
|
@@ -209,7 +209,7 @@ def __init__(self, f):
|
|
"""Initialize the can"""
|
|
self._check_type(f)
|
|
self.code = f.__code__
|
|
- self.defaults: typing.Optional[typing.List[typing.Any]]
|
|
+ self.defaults: typing.Optional[list[typing.Any]]
|
|
if f.__defaults__:
|
|
self.defaults = [can(fd) for fd in f.__defaults__]
|
|
else:
|
|
@@ -475,7 +475,7 @@ def uncan_sequence(obj, g=None):
|
|
if buffer is not memoryview:
|
|
can_map[buffer] = CannedBuffer
|
|
|
|
-uncan_map: typing.Dict[type, typing.Any] = {
|
|
+uncan_map: dict[type, typing.Any] = {
|
|
CannedObject: lambda obj, g: obj.get_object(g),
|
|
dict: uncan_dict,
|
|
}
|
|
diff --git a/pyproject.toml b/pyproject.toml
|
|
index 1e9e543c..e1d7b1d5 100644
|
|
--- a/pyproject.toml
|
|
+++ b/pyproject.toml
|
|
@@ -187,6 +187,9 @@ filterwarnings= [
|
|
|
|
# Ignore datetime warning.
|
|
"ignore:datetime.datetime.utc:DeprecationWarning",
|
|
+
|
|
+ # ignore unclosed sqlite in traits
|
|
+ "ignore:unclosed database in <sqlite3.Connection:ResourceWarning",
|
|
]
|
|
|
|
[tool.coverage.report]
|