-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
python3-ipython_ipykernel: patch for python 3.13
- Loading branch information
1 parent
6d7244d
commit 993adda
Showing
4 changed files
with
299 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
Taken from https://github.com/ipython/ipykernel/pull/1248 | ||
|
||
From 3e7fb7c787511212ccb642004b4331a59594a329 Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <[email protected]> | ||
Date: Mon, 10 Jun 2024 16:11:33 +0200 | ||
Subject: [PATCH] Avoid a DeprecationWarning on Python 3.13+ | ||
|
||
... | ||
/usr/lib/python3.13/site-packages/ipykernel/jsonutil.py:29: in <module> | ||
datetime.strptime("1", "%d") | ||
/usr/lib64/python3.13/_strptime.py:573: in _strptime_datetime | ||
tt, fraction, gmtoff_fraction = _strptime(data_string, format) | ||
/usr/lib64/python3.13/_strptime.py:336: in _strptime | ||
format_regex = _TimeRE_cache.compile(format) | ||
/usr/lib64/python3.13/_strptime.py:282: in compile | ||
return re_compile(self.pattern(format), IGNORECASE) | ||
/usr/lib64/python3.13/_strptime.py:270: in pattern | ||
warnings.warn("""\ | ||
E DeprecationWarning: Parsing dates involving a day of month without a year specified is ambiguious | ||
E and fails to parse leap day. The default behavior will change in Python 3.15 | ||
E to either always raise an exception or to use a different default year (TBD). | ||
E To avoid trouble, add a specific year to the input & format. | ||
E See https://github.com/python/cpython/issues/70647. | ||
|
||
See also https://github.com/jupyter/jupyter_client/issues/1020 | ||
--- | ||
ipykernel/jsonutil.py | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
diff --git a/ipykernel/jsonutil.py b/ipykernel/jsonutil.py | ||
index 6a463cf1..e45f06e5 100644 | ||
--- a/ipykernel/jsonutil.py | ||
+++ b/ipykernel/jsonutil.py | ||
@@ -26,7 +26,7 @@ | ||
|
||
# holy crap, strptime is not threadsafe. | ||
# Calling it once at import seems to help. | ||
-datetime.strptime("1", "%d") | ||
+datetime.strptime("2000-01-01", "%Y-%m-%d") | ||
|
||
# ----------------------------------------------------------------------------- | ||
# Classes and functions |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,238 @@ | ||
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] |
15 changes: 15 additions & 0 deletions
15
srcpkgs/python3-ipython_ipykernel/patches/disable-debugpy.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
Upstream acks that ipykernel works without debugpy, but wants to keep | ||
it as a mandatory dependency, see: | ||
|
||
https://github.com/ipython/ipykernel/pull/767#issuecomment-916913893 | ||
|
||
--- a/pyproject.toml 2020-02-01 21:00:00.000000000 -0300 | ||
+++ b/pyproject.toml 2024-12-23 10:53:39.607541653 -0300 | ||
@@ -20,7 +20,6 @@ | ||
] | ||
requires-python = ">=3.8" | ||
dependencies = [ | ||
- "debugpy>=1.6.5", | ||
"ipython>=7.23.1", | ||
"comm>=0.1.1", | ||
"traitlets>=5.4.0", |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters