Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-ipykernel for
openSUSE:Factory checked in at 2025-10-27 14:37:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ipykernel (Old)
and /work/SRC/openSUSE:Factory/.python-ipykernel.new.1980 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipykernel"
Mon Oct 27 14:37:18 2025 rev:54 rq:1313518 version:6.31.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ipykernel/python-ipykernel.changes
2025-10-16 17:38:01.926608026 +0200
+++
/work/SRC/openSUSE:Factory/.python-ipykernel.new.1980/python-ipykernel.changes
2025-10-27 14:37:34.809164230 +0100
@@ -1,0 +2,9 @@
+Mon Oct 20 15:11:47 UTC 2025 - Markéta Machová <[email protected]>
+
+- Update to 6.31.0
+ * Store display outputs in history for %notebook magic
+ * update tests for 3.14
+ * Update PEP-639 license values in pyproject.toml
+ * Replace @flaky.flaky decorate with pytest fixture
+
+-------------------------------------------------------------------
Old:
----
ipykernel-6.30.1.tar.gz
New:
----
ipykernel-6.31.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ipykernel.spec ++++++
--- /var/tmp/diff_new_pack.bhgWT5/_old 2025-10-27 14:37:35.833207470 +0100
+++ /var/tmp/diff_new_pack.bhgWT5/_new 2025-10-27 14:37:35.837207638 +0100
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-ipykernel
-Version: 6.30.1
+Version: 6.31.0
Release: 0
Summary: IPython Kernel for Jupyter
License: BSD-3-Clause
++++++ ipykernel-6.30.1.tar.gz -> ipykernel-6.31.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/.github/workflows/ci.yml
new/ipykernel-6.31.0/.github/workflows/ci.yml
--- old/ipykernel-6.30.1/.github/workflows/ci.yml 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/.github/workflows/ci.yml 2020-02-02
01:00:00.000000000 +0100
@@ -22,13 +22,30 @@
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
+ qt:
+ - qt5
+ - qt6
python-version:
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- - "pypy-3.10"
+ - "3.14"
+ # 3.14t needs a jupyter-core release
+ # - "3.14t"
+ - "pypy-3.11"
+ exclude:
+ # qt6 not supported on 3.14 yet
+ - python-version: "3.14"
+ qt: qt6
+ - python-version: "3.13"
+ qt: qt5
+ - python-version: "3.12"
+ qt: qt5
+ - python-version: "3.11"
+ qt: qt5
+
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -37,6 +54,11 @@
with:
python-version: ${{ matrix.python-version }}
+ - name: set qt env
+ run: |
+ echo "QT=${{ matrix.qt }}" >> $GITHUB_ENV
+ shell: bash
+
- name: Install hatch
run: |
python --version
@@ -52,7 +74,7 @@
timeout-minutes: 15
if: ${{ startsWith( matrix.python-version, 'pypy' ) }}
run: |
- hatch run test:nowarn
+ hatch run test:nowarn --ignore=tests/test_debugger.py -k "not
closure"
- name: Run the tests on Windows
timeout-minutes: 15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/CHANGELOG.md
new/ipykernel-6.31.0/CHANGELOG.md
--- old/ipykernel-6.30.1/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100
@@ -2,6 +2,31 @@
<!-- <START NEW CHANGELOG ENTRY> -->
+## 6.31.0
+
+IPykernel 6.31.0 fixes an issue where display outputs such as Matplotlib plots
were not included when using `%notebook` magic to save sessions as `.ipynb`
files. This is enabled using the traitlet
`ZMQDisplayPublisher.store_display_history` which defaults to the previous
behaviour of `False`. This is a minor release rather than a patch release due
to the addition of the new traitlet.
+
+([Full
Changelog](https://github.com/ipython/ipykernel/compare/v6.30.1...01c1e8fe43047050f29d8728eabf4e4de14b624b))
+
+### Enhancements made
+
+- Backport PR #1435: Store display outputs in history for `%notebook` magic
[#1461](https://github.com/ipython/ipykernel/pull/1461)
([@Darshan808](https://github.com/Darshan808))
+
+### Maintenance and upkeep improvements
+
+- Backport PR #1453: update tests for 3.14
[#1460](https://github.com/ipython/ipykernel/pull/1460)
([@minrk](https://github.com/minrk))
+- Backport PR #1444: Test on PyPy 3.11 instead of 3.10
[#1459](https://github.com/ipython/ipykernel/pull/1459)
([@cclauss](https://github.com/cclauss))
+- 6.x: Update PEP-639 license values in pyproject.toml
[#1446](https://github.com/ipython/ipykernel/pull/1446)
([@bollwyvl](https://github.com/bollwyvl))
+- Backport PR #1411: Replace `@flaky.flaky` decorate with pytest fixture
[#1421](https://github.com/ipython/ipykernel/pull/1421)
([@mgorny](https://github.com/mgorny))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/ipython/ipykernel/graphs/contributors?from=2025-08-04&to=2025-10-20&type=c))
+
+[@bollwyvl](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Abollwyvl+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@cclauss](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Acclauss+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@Darshan808](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3ADarshan808+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@ianthomas23](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Aianthomas23+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@krassowski](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Akrassowski+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@lumberbot-app](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Alumberbot-app+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@meeseeksmachine](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ameeseeksmachine+updated%3A2025-08-04..2025-10-20&type=Issues)
| [@mgorny](https:
//github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Amgorny+updated%3A2025-08-04..2025-10-20&type=Issues)
|
[@minrk](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Aminrk+updated%3A2025-08-04..2025-10-20&type=Issues)
+
+<!-- <END NEW CHANGELOG ENTRY> -->
+
## 6.30.1
This is a bugfix release to fix a significant bug introduced in 6.30.0 that
allowed control messages to be handled concurrently rather than sequentially
which broke debugging in JupyterLab and VSCode.
@@ -22,8 +47,6 @@
[@ianthomas23](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Aianthomas23+updated%3A2025-07-21..2025-08-04&type=Issues)
-<!-- <END NEW CHANGELOG ENTRY> -->
-
## 6.30.0
This release fixes three bugs but is primarily a maintenance release bringing
support for Python 3.13 and updating dependencies. It does not include
subshells which will be in the upcoming 7.0.0 release. Users and downstream
libraries that wish to avoid subshells should pin to `ipykernel < 7`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/PKG-INFO
new/ipykernel-6.31.0/PKG-INFO
--- old/ipykernel-6.30.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,42 +1,13 @@
Metadata-Version: 2.4
Name: ipykernel
-Version: 6.30.1
+Version: 6.31.0
Summary: IPython Kernel for Jupyter
Project-URL: Homepage, https://ipython.org
Project-URL: Documentation, https://ipykernel.readthedocs.io
Project-URL: Source, https://github.com/ipython/ipykernel
Project-URL: Tracker, https://github.com/ipython/ipykernel/issues
Author-email: IPython Development Team <[email protected]>
-License: BSD 3-Clause License
-
- Copyright (c) 2015, IPython Development Team
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
met:
-
- 1. Redistributions of source code must retain the above copyright
notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
notice,
- this list of conditions and the following disclaimer in the
documentation
- and/or other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+License-Expression: BSD-3-Clause
License-File: LICENSE
Keywords: Interactive,Interpreter,Shell,Web
Classifier: Intended Audience :: Developers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/ipykernel/_version.py
new/ipykernel-6.31.0/ipykernel/_version.py
--- old/ipykernel-6.30.1/ipykernel/_version.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.31.0/ipykernel/_version.py 2020-02-02 01:00:00.000000000
+0100
@@ -4,7 +4,7 @@
import re
# Version string must appear intact for hatch versioning
-__version__ = "6.30.1"
+__version__ = "6.31.0"
# Build up version_info tuple for backwards compatibility
pattern = r"(?P<major>\d+).(?P<minor>\d+).(?P<patch>\d+)(?P<rest>.*)"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/ipykernel/zmqshell.py
new/ipykernel-6.31.0/ipykernel/zmqshell.py
--- old/ipykernel-6.30.1/ipykernel/zmqshell.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.31.0/ipykernel/zmqshell.py 2020-02-02 01:00:00.000000000
+0100
@@ -33,12 +33,17 @@
from IPython.utils.process import arg_split, system #
type:ignore[attr-defined]
from jupyter_client.session import Session, extract_header
from jupyter_core.paths import jupyter_runtime_dir
-from traitlets import Any, CBool, CBytes, Dict, Instance, Type, default,
observe
+from traitlets import Any, Bool, CBool, CBytes, Dict, Instance, Type, default,
observe
from ipykernel import connect_qtconsole, get_connection_file,
get_connection_info
from ipykernel.displayhook import ZMQShellDisplayHook
from ipykernel.jsonutil import encode_images, json_clean
+try:
+ from IPython.core.history import HistoryOutput
+except ImportError:
+ HistoryOutput = None # type: ignore[assignment,misc]
+
# -----------------------------------------------------------------------------
# Functions and classes
# -----------------------------------------------------------------------------
@@ -52,6 +57,11 @@
parent_header = Dict({})
topic = CBytes(b"display_data")
+ store_display_history = Bool(
+ False,
+ help="If set to True, store display outputs in the history manager.
Default is False.",
+ ).tag(config=True)
+
# thread_local:
# An attribute used to ensure the correct output message
# is processed. See ipykernel Issue 113 for a discussion.
@@ -100,6 +110,21 @@
update : bool, optional, keyword-only
If True, send an update_display_data message instead of
display_data.
"""
+ if (
+ self.store_display_history
+ and self.shell is not None
+ and hasattr(self.shell, "history_manager")
+ and HistoryOutput is not None
+ ):
+ # Reference: github.com/ipython/ipython/pull/14998
+ exec_count = self.shell.execution_count
+ if getattr(self.shell.display_pub, "_in_post_execute", False):
+ exec_count -= 1
+ outputs = getattr(self.shell.history_manager, "outputs", None)
+ if outputs is not None:
+ outputs.setdefault(exec_count, []).append(
+ HistoryOutput(output_type="display_data", bundle=data)
+ )
self._flush_streams()
if metadata is None:
metadata = {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/pyproject.toml
new/ipykernel-6.31.0/pyproject.toml
--- old/ipykernel-6.30.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -1,12 +1,12 @@
[build-system]
-requires = ["hatchling>=1.4", "jupyter_client>=6"]
+requires = ["hatchling>=1.22", "jupyter_client>=6"]
build-backend = "hatchling.build"
[project]
name = "ipykernel"
dynamic = ["version"]
authors = [{name = "IPython Development Team", email =
"[email protected]"}]
-license = {file = "LICENSE"}
+license = "BSD-3-Clause"
readme = "README.md"
description = "IPython Kernel for Jupyter"
keywords = ["Interactive", "Interpreter", "Shell", "Web"]
@@ -101,13 +101,10 @@
test = "python -m pytest -vv --cov ipykernel --cov-branch --cov-report
term-missing:skip-covered {args}"
nowarn = "test -W default {args}"
-[[tool.hatch.envs.cov.matrix]]
-qt = ["qt5", "qt6"]
-
[tool.hatch.envs.cov.overrides]
-matrix.qt.features = [
- { value = "pyqt5", if = ["qt5"] },
- { value = "pyside6", if = ["qt6"] },
+env.QT.features = [
+ { value = "pyqt5", if = ["qt5"] },
+ { value = "pyside6", if = ["qt6"] },
]
[tool.hatch.envs.typing]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ipykernel-6.30.1/tests/inprocess/test_kernelmanager.py
new/ipykernel-6.31.0/tests/inprocess/test_kernelmanager.py
--- old/ipykernel-6.30.1/tests/inprocess/test_kernelmanager.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/tests/inprocess/test_kernelmanager.py 2020-02-02
01:00:00.000000000 +0100
@@ -4,7 +4,6 @@
import unittest
import pytest
-from flaky import flaky
from ipykernel.inprocess.manager import InProcessKernelManager
@@ -21,7 +20,7 @@
if self.km.has_kernel:
self.km.shutdown_kernel()
- @flaky
+ @pytest.mark.flaky()
def test_interface(self):
"""Does the in-process kernel manager implement the basic KM
interface?"""
km = self.km
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/tests/test_embed_kernel.py
new/ipykernel-6.31.0/tests/test_embed_kernel.py
--- old/ipykernel-6.30.1/tests/test_embed_kernel.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/tests/test_embed_kernel.py 2020-02-02
01:00:00.000000000 +0100
@@ -12,7 +12,6 @@
from subprocess import PIPE, Popen
import pytest
-from flaky import flaky
from jupyter_client.blocking.client import BlockingKernelClient
from jupyter_core import paths
@@ -91,7 +90,7 @@
fid.close()
-@flaky(max_runs=3)
[email protected](max_runs=3)
def test_embed_kernel_basic():
"""IPython.embed_kernel() is basically functional"""
cmd = "\n".join(
@@ -127,7 +126,7 @@
assert "10" in text
-@flaky(max_runs=3)
[email protected](max_runs=3)
def test_embed_kernel_namespace():
"""IPython.embed_kernel() inherits calling namespace"""
cmd = "\n".join(
@@ -166,7 +165,7 @@
assert not content["found"]
-@flaky(max_runs=3)
[email protected](max_runs=3)
def test_embed_kernel_reentrant():
"""IPython.embed_kernel() can be called multiple times"""
cmd = "\n".join(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/tests/test_kernel.py
new/ipykernel-6.31.0/tests/test_kernel.py
--- old/ipykernel-6.30.1/tests/test_kernel.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.31.0/tests/test_kernel.py 2020-02-02 01:00:00.000000000
+0100
@@ -17,7 +17,6 @@
import IPython
import psutil
import pytest
-from flaky import flaky
from IPython.paths import locate_profile
from .utils import (
@@ -210,10 +209,14 @@
assert "" in sys_path
-@flaky(max_runs=3)
+# the subprocess print tests fail in pytest,
+# but manual tests in notebooks work fine...
+
+
[email protected](max_runs=3)
@pytest.mark.skipif(
- sys.platform == "win32" or (sys.platform == "darwin" and sys.version_info
>= (3, 8)),
- reason="subprocess prints fail on Windows and MacOS Python 3.8+",
+ sys.platform in {"win32", "darwin"} or sys.version_info >= (3, 14),
+ reason="test doesn't reliably reproduce subprocess output capture",
)
def test_subprocess_print():
"""printing from forked mp.Process"""
@@ -242,7 +245,7 @@
_check_master(kc, expected=True, stream="stderr")
-@flaky(max_runs=3)
[email protected](max_runs=3)
def test_subprocess_noprint():
"""mp.Process without print doesn't trigger iostream mp_mode"""
with kernel() as kc:
@@ -265,10 +268,10 @@
_check_master(kc, expected=True, stream="stderr")
-@flaky(max_runs=3)
[email protected](max_runs=3)
@pytest.mark.skipif(
- sys.platform == "win32" or (sys.platform == "darwin" and sys.version_info
>= (3, 8)),
- reason="subprocess prints fail on Windows and MacOS Python 3.8+",
+ sys.platform in {"win32", "darwin"} or sys.version_info >= (3, 14),
+ reason="test doesn't reliably reproduce subprocess output capture",
)
def test_subprocess_error():
"""error in mp.Process doesn't crash"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/tests/test_start_kernel.py
new/ipykernel-6.31.0/tests/test_start_kernel.py
--- old/ipykernel-6.30.1/tests/test_start_kernel.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/tests/test_start_kernel.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,7 +2,6 @@
from textwrap import dedent
import pytest
-from flaky import flaky
from .test_embed_kernel import setup_kernel
@@ -12,7 +11,7 @@
pytest.skip("skipping tests on windows", allow_module_level=True)
-@flaky(max_runs=3)
[email protected](max_runs=3)
def test_ipython_start_kernel_userns():
import IPython
@@ -51,7 +50,7 @@
assert EXPECTED in text
-@flaky(max_runs=3)
[email protected](max_runs=3)
def test_ipython_start_kernel_no_userns():
# Issue #4188 - user_ns should be passed to shell as None, not {}
cmd = dedent(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.30.1/tests/test_zmq_shell.py
new/ipykernel-6.31.0/tests/test_zmq_shell.py
--- old/ipykernel-6.30.1/tests/test_zmq_shell.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.31.0/tests/test_zmq_shell.py 2020-02-02
01:00:00.000000000 +0100
@@ -22,6 +22,11 @@
ZMQInteractiveShell,
)
+try:
+ from IPython.core.history import HistoryOutput
+except ImportError:
+ HistoryOutput = None # type: ignore[assignment,misc]
+
class NoReturnDisplayHook:
"""
@@ -209,6 +214,35 @@
second = self.disp_pub.unregister_hook(hook)
assert not bool(second)
+ @unittest.skipIf(HistoryOutput is None, "HistoryOutput not available")
+ def test_display_stored_in_history(self):
+ """
+ Test that published display data gets stored in shell history
+ for %notebook magic support, and not stored when disabled.
+ """
+ for enable in [False, True]:
+ # Mock shell with history manager
+ mock_shell = MagicMock()
+ mock_shell.execution_count = 1
+ mock_shell.history_manager.outputs = dict()
+ mock_shell.display_pub._in_post_execute = False
+
+ self.disp_pub.shell = mock_shell
+ self.disp_pub.store_display_history = enable
+
+ data = {"text/plain": "test output"}
+ self.disp_pub.publish(data)
+
+ if enable:
+ # Check that output was stored in history
+ stored_outputs = mock_shell.history_manager.outputs[1]
+ assert len(stored_outputs) == 1
+ assert stored_outputs[0].output_type == "display_data"
+ assert stored_outputs[0].bundle == data
+ else:
+ # Should not store anything in history
+ assert mock_shell.history_manager.outputs == {}
+
def test_magics(tmp_path):
context = zmq.Context()