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 2023-04-04 21:27:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ipykernel (Old) and /work/SRC/openSUSE:Factory/.python-ipykernel.new.19717 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipykernel" Tue Apr 4 21:27:29 2023 rev:36 rq:1077234 version:6.22.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ipykernel/python-ipykernel.changes 2023-02-06 14:15:18.516538256 +0100 +++ /work/SRC/openSUSE:Factory/.python-ipykernel.new.19717/python-ipykernel.changes 2023-04-04 21:27:51.331725423 +0200 @@ -1,0 +2,17 @@ +Tue Apr 4 14:58:26 UTC 2023 - Ben Greiner <c...@bnavigator.de> + +- Update to 6.22.0 + * Deprecate Comm class + Fix incompatibility with ipywidgets + #1097 (@martinRenou) + +------------------------------------------------------------------- +Sun Mar 19 16:23:32 UTC 2023 - Ben Greiner <c...@bnavigator.de> + +- Update to 6.21.3 + * Fix interrupt reply #1101 (@garlandz-db) +- Release 6.21.2 + * Un-expose __file__ and expose __session__ instead. #1095 + (@Carreau) + * Remove test_enter_eventloop #1084 (@davidbrochart) + +------------------------------------------------------------------- Old: ---- ipykernel-6.21.1.tar.gz New: ---- ipykernel-6.22.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ipykernel.spec ++++++ --- /var/tmp/diff_new_pack.yI38HW/_old 2023-04-04 21:27:52.171730191 +0200 +++ /var/tmp/diff_new_pack.yI38HW/_new 2023-04-04 21:27:52.179730236 +0200 @@ -17,7 +17,7 @@ Name: python-ipykernel -Version: 6.21.1 +Version: 6.22.0 Release: 0 Summary: IPython Kernel for Jupyter License: BSD-3-Clause @@ -51,7 +51,7 @@ BuildRequires: %{python_module nest-asyncio} BuildRequires: %{python_module packaging} BuildRequires: %{python_module psutil} -BuildRequires: %{python_module pyzmq >= 17} +BuildRequires: %{python_module pyzmq >= 20} BuildRequires: %{python_module tornado >= 6.1} BuildRequires: %{python_module traitlets >= 5.1.0} BuildRequires: %{python_module jupyter-core >= 5.1 or (%python-jupyter-core >= 4.12 with %python-jupyter-core < 5.0)} @@ -63,7 +63,7 @@ Requires: python-nest-asyncio Requires: python-packaging Requires: python-psutil -Requires: python-pyzmq >= 17 +Requires: python-pyzmq >= 20 Requires: python-tornado >= 6.1 Requires: python-traitlets >= 5.4.0 Requires: (python-jupyter-core >= 5.1 or (python-jupyter-core >= 4.12 with python-jupyter-core < 5.0)) @@ -123,7 +123,7 @@ %files %{python_files} %doc README.md -%license COPYING.md +%license LICENSE %{python_sitelib}/ipykernel %{python_sitelib}/ipykernel_launcher.py %{python_sitelib}/ipykernel-%{version}*-info ++++++ ipykernel-6.21.1.tar.gz -> ipykernel-6.22.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/.github/workflows/downstream.yml new/ipykernel-6.22.0/.github/workflows/downstream.yml --- old/ipykernel-6.21.1/.github/workflows/downstream.yml 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/.github/workflows/downstream.yml 2020-02-02 01:00:00.000000000 +0100 @@ -38,6 +38,7 @@ uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 with: package_name: ipywidgets + test_command: pytest -vv -raXxs -k \"not deprecation_fa_icons and not tooltip_deprecation and not on_submit_deprecation\" -W default --durations 10 --color=yes jupyter_client: runs-on: ubuntu-latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/.pre-commit-config.yaml new/ipykernel-6.22.0/.pre-commit-config.yaml --- old/ipykernel-6.21.1/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 @@ -21,7 +21,7 @@ - id: trailing-whitespace - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.19.2 + rev: 0.21.0 hooks: - id: check-github-workflows @@ -31,12 +31,12 @@ - id: mdformat - repo: https://github.com/psf/black - rev: 22.12.0 + rev: 23.1.0 hooks: - id: black - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: v0.0.236 + rev: v0.0.254 hooks: - id: ruff args: ["--fix"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/CHANGELOG.md new/ipykernel-6.22.0/CHANGELOG.md --- old/ipykernel-6.21.1/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100 @@ -2,6 +2,65 @@ <!-- <START NEW CHANGELOG ENTRY> --> +## 6.22.0 + +([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.21.3...e2972d763b5357d4e1cb9b5355593583ca6d5657)) + +### Bugs fixed + +- Deprecate Comm class + Fix incompatibility with ipywidgets [#1097](https://github.com/ipython/ipykernel/pull/1097) ([@martinRenou](https://github.com/martinRenou)) + +### Maintenance and upkeep improvements + +### Contributors to this release + +([GitHub contributors page for this release](https://github.com/ipython/ipykernel/graphs/contributors?from=2023-03-06&to=2023-03-20&type=c)) + +[@martinRenou](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3AmartinRenou+updated%3A2023-03-06..2023-03-20&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Apre-commit-ci+updated%3A2023-03-06..2023-03-20&type=Issues) + +<!-- <END NEW CHANGELOG ENTRY> --> + +## 6.21.3 + +([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.21.2...e46f75b93c388886f4b6ba32182e29c3cc486984)) + +### Bugs fixed + +- Fix interrupt reply [#1101](https://github.com/ipython/ipykernel/pull/1101) ([@garlandz-db](https://github.com/garlandz-db)) + +### Maintenance and upkeep improvements + +- Update docs link [#1103](https://github.com/ipython/ipykernel/pull/1103) ([@blink1073](https://github.com/blink1073)) +- Add license [#1098](https://github.com/ipython/ipykernel/pull/1098) ([@dcsaba89](https://github.com/dcsaba89)) + +### Documentation improvements + +- Update changelog for markdown typo [#1096](https://github.com/ipython/ipykernel/pull/1096) ([@mlucool](https://github.com/mlucool)) + +### Contributors to this release + +([GitHub contributors page for this release](https://github.com/ipython/ipykernel/graphs/contributors?from=2023-02-13&to=2023-03-06&type=c)) + +[@blink1073](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ablink1073+updated%3A2023-02-13..2023-03-06&type=Issues) | [@ccordoba12](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Accordoba12+updated%3A2023-02-13..2023-03-06&type=Issues) | [@dcsaba89](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Adcsaba89+updated%3A2023-02-13..2023-03-06&type=Issues) | [@garlandz-db](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Agarlandz-db+updated%3A2023-02-13..2023-03-06&type=Issues) | [@mlucool](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Amlucool+updated%3A2023-02-13..2023-03-06&type=Issues) + +## 6.21.2 + +([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.21.1...1a486e06155a4d8e58e716fd40468cb5738ed6bb)) + +### Bugs fixed + +- Un-expose `__file__` and expose `__session__` instead. [#1095](https://github.com/ipython/ipykernel/pull/1095) ([@Carreau](https://github.com/Carreau)) + +### Maintenance and upkeep improvements + +- Remove test_enter_eventloop [#1084](https://github.com/ipython/ipykernel/pull/1084) ([@davidbrochart](https://github.com/davidbrochart)) + +### Contributors to this release + +([GitHub contributors page for this release](https://github.com/ipython/ipykernel/graphs/contributors?from=2023-02-02&to=2023-02-13&type=c)) + +[@blink1073](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ablink1073+updated%3A2023-02-02..2023-02-13&type=Issues) | [@Carreau](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3ACarreau+updated%3A2023-02-02..2023-02-13&type=Issues) | [@davidbrochart](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Adavidbrochart+updated%3A2023-02-02..2023-02-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Apre-commit-ci+updated%3A2023-02-02..2023-02-13&type=Issues) + ## 6.21.1 ([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.21.0...ac7776dfd68861ae005e1f142ec87cd6703847ea)) @@ -16,15 +75,13 @@ [@blink1073](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ablink1073+updated%3A2023-01-30..2023-02-02&type=Issues) -<!-- <END NEW CHANGELOG ENTRY> --> - ## 6.21.0 ([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.20.2...dde698850d865dec89bba2305d1f3dc3134f8413)) ### Enhancements made -- Expose session start file in __file__. [#1078](https://github.com/ipython/ipykernel/pull/1078) ([@Carreau](https://github.com/Carreau)) +- Expose session start file in `__file__`. [#1078](https://github.com/ipython/ipykernel/pull/1078) ([@Carreau](https://github.com/Carreau)) - Add copy_to_globals debug request handling [#1055](https://github.com/ipython/ipykernel/pull/1055) ([@brichet](https://github.com/brichet)) ### Maintenance and upkeep improvements diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/COPYING.md new/ipykernel-6.22.0/COPYING.md --- old/ipykernel-6.21.1/COPYING.md 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/COPYING.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,61 +0,0 @@ -# Licensing terms - -This project is licensed under the terms of the Modified BSD License -(also known as New or Revised or 3-Clause BSD), as follows: - -- 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: - -Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -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. - -Neither the name of the IPython Development Team 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 OWNER 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. - -## About the IPython Development Team - -The IPython Development Team is the set of all contributors to the IPython project. -This includes all of the IPython subprojects. - -The core team that coordinates development on GitHub can be found here: -https://github.com/ipython/. - -## Our Copyright Policy - -IPython uses a shared copyright model. Each contributor maintains copyright -over their contributions to IPython. But, it is important to note that these -contributions are typically only changes to the repositories. Thus, the IPython -source code, in its entirety is not the copyright of any single person or -institution. Instead, it is the collective copyright of the entire IPython -Development Team. If individual contributors want to maintain a record of what -changes/contributions they have specific copyright on, they should indicate -their copyright in the commit message of the change, when they commit the -change to one of the IPython repositories. - -With this in mind, the following banner should be used in any source code file -to indicate the copyright and license terms: - -``` -# Copyright (c) IPython Development Team. -# Distributed under the terms of the Modified BSD License. -``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/LICENSE new/ipykernel-6.22.0/LICENSE --- old/ipykernel-6.21.1/LICENSE 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/LICENSE 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1,30 @@ +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. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/PKG-INFO new/ipykernel-6.22.0/PKG-INFO --- old/ipykernel-6.21.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 @@ -1,71 +1,40 @@ Metadata-Version: 2.1 Name: ipykernel -Version: 6.21.1 +Version: 6.22.0 Summary: IPython Kernel for Jupyter Project-URL: Homepage, https://ipython.org Author-email: IPython Development Team <ipython-...@scipy.org> -License: # Licensing terms +License: BSD 3-Clause License - This project is licensed under the terms of the Modified BSD License - (also known as New or Revised or 3-Clause BSD), as follows: - - - Copyright (c) 2015, IPython Development Team + 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: - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 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. - - Neither the name of the IPython Development Team 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 OWNER OR CONTRIBUTORS BE LIABLE + 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. - - ## About the IPython Development Team - - The IPython Development Team is the set of all contributors to the IPython project. - This includes all of the IPython subprojects. - - The core team that coordinates development on GitHub can be found here: - https://github.com/ipython/. - - ## Our Copyright Policy - - IPython uses a shared copyright model. Each contributor maintains copyright - over their contributions to IPython. But, it is important to note that these - contributions are typically only changes to the repositories. Thus, the IPython - source code, in its entirety is not the copyright of any single person or - institution. Instead, it is the collective copyright of the entire IPython - Development Team. If individual contributors want to maintain a record of what - changes/contributions they have specific copyright on, they should indicate - their copyright in the commit message of the change, when they commit the - change to one of the IPython repositories. - - With this in mind, the following banner should be used in any source code file - to indicate the copyright and license terms: - - ``` - # Copyright (c) IPython Development Team. - # Distributed under the terms of the Modified BSD License. - ``` -License-File: COPYING.md +License-File: LICENSE Keywords: Interactive,Interpreter,Shell,Web Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Science/Research @@ -88,7 +57,7 @@ Requires-Dist: nest-asyncio Requires-Dist: packaging Requires-Dist: psutil -Requires-Dist: pyzmq>=17 +Requires-Dist: pyzmq>=20 Requires-Dist: tornado>=6.1 Requires-Dist: traitlets>=5.4.0 Provides-Extra: cov @@ -123,7 +92,7 @@ [](https://github.com/ipython/ipykernel/actions/workflows/ci.yml/badge.svg?query=branch%3Amain++) [](https://codecov.io/gh/ipython/ipykernel) -[](http://ipython.readthedocs.io/en/latest/?badge=latest) +[](http://ipykernel.readthedocs.io/en/latest/?badge=latest) This package provides the IPython kernel for Jupyter. @@ -154,3 +123,31 @@ ```bash pytest ipykernel -vv -s --cov ipykernel --cov-branch --cov-report term-missing:skip-covered --durations 10 ``` + +## About the IPython Development Team + +The IPython Development Team is the set of all contributors to the IPython project. +This includes all of the IPython subprojects. + +The core team that coordinates development on GitHub can be found here: +https://github.com/ipython/. + +## Our Copyright Policy + +IPython uses a shared copyright model. Each contributor maintains copyright +over their contributions to IPython. But, it is important to note that these +contributions are typically only changes to the repositories. Thus, the IPython +source code, in its entirety is not the copyright of any single person or +institution. Instead, it is the collective copyright of the entire IPython +Development Team. If individual contributors want to maintain a record of what +changes/contributions they have specific copyright on, they should indicate +their copyright in the commit message of the change, when they commit the +change to one of the IPython repositories. + +With this in mind, the following banner should be used in any source code file +to indicate the copyright and license terms: + +``` +# Copyright (c) IPython Development Team. +# Distributed under the terms of the Modified BSD License. +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/README.md new/ipykernel-6.22.0/README.md --- old/ipykernel-6.21.1/README.md 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/README.md 2020-02-02 01:00:00.000000000 +0100 @@ -2,7 +2,7 @@ [](https://github.com/ipython/ipykernel/actions/workflows/ci.yml/badge.svg?query=branch%3Amain++) [](https://codecov.io/gh/ipython/ipykernel) -[](http://ipython.readthedocs.io/en/latest/?badge=latest) +[](http://ipykernel.readthedocs.io/en/latest/?badge=latest) This package provides the IPython kernel for Jupyter. @@ -33,3 +33,31 @@ ```bash pytest ipykernel -vv -s --cov ipykernel --cov-branch --cov-report term-missing:skip-covered --durations 10 ``` + +## About the IPython Development Team + +The IPython Development Team is the set of all contributors to the IPython project. +This includes all of the IPython subprojects. + +The core team that coordinates development on GitHub can be found here: +https://github.com/ipython/. + +## Our Copyright Policy + +IPython uses a shared copyright model. Each contributor maintains copyright +over their contributions to IPython. But, it is important to note that these +contributions are typically only changes to the repositories. Thus, the IPython +source code, in its entirety is not the copyright of any single person or +institution. Instead, it is the collective copyright of the entire IPython +Development Team. If individual contributors want to maintain a record of what +changes/contributions they have specific copyright on, they should indicate +their copyright in the commit message of the change, when they commit the +change to one of the IPython repositories. + +With this in mind, the following banner should be used in any source code file +to indicate the copyright and license terms: + +``` +# Copyright (c) IPython Development Team. +# Distributed under the terms of the Modified BSD License. +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/_version.py new/ipykernel-6.22.0/ipykernel/_version.py --- old/ipykernel-6.21.1/ipykernel/_version.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/_version.py 2020-02-02 01:00:00.000000000 +0100 @@ -5,7 +5,7 @@ from typing import List # Version string must appear intact for hatch versioning -__version__ = "6.21.1" +__version__ = "6.22.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.21.1/ipykernel/comm/comm.py new/ipykernel-6.22.0/ipykernel/comm/comm.py --- old/ipykernel-6.21.1/ipykernel/comm/comm.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/comm/comm.py 2020-02-02 01:00:00.000000000 +0100 @@ -5,6 +5,7 @@ import uuid from typing import Optional +from warnings import warn import comm.base_comm import traitlets.config @@ -70,8 +71,17 @@ def _default_comm_id(self): return uuid.uuid4().hex - def __init__(self, target_name='', data=None, metadata=None, buffers=None, **kwargs): + def __init__( + self, target_name='', data=None, metadata=None, buffers=None, show_warning=True, **kwargs + ): """Initialize a comm.""" + if show_warning: + warn( + "The `ipykernel.comm.Comm` class has been deprecated. Please use the `comm` module instead." + "For creating comms, use the function `from comm import create_comm`.", + DeprecationWarning, + ) + # Handle differing arguments between base classes. had_kernel = 'kernel' in kwargs kernel = kwargs.pop('kernel', None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/comm/manager.py new/ipykernel-6.22.0/ipykernel/comm/manager.py --- old/ipykernel-6.21.1/ipykernel/comm/manager.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/comm/manager.py 2020-02-02 01:00:00.000000000 +0100 @@ -3,11 +3,16 @@ # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. +import logging import comm.base_comm import traitlets import traitlets.config +from .comm import Comm + +logger = logging.getLogger("ipykernel.comm") + class CommManager(comm.base_comm.CommManager, traitlets.config.LoggingConfigurable): """A comm manager.""" @@ -21,3 +26,37 @@ # CommManager doesn't take arguments, so we explicitly forward arguments comm.base_comm.CommManager.__init__(self) traitlets.config.LoggingConfigurable.__init__(self, **kwargs) + + def comm_open(self, stream, ident, msg): + """Handler for comm_open messages""" + # This is for backward compatibility, the comm_open creates a a new ipykernel.comm.Comm + # but we should let the base class create the comm with comm.create_comm in a major release + content = msg["content"] + comm_id = content["comm_id"] + target_name = content["target_name"] + f = self.targets.get(target_name, None) + comm = Comm( + comm_id=comm_id, + primary=False, + target_name=target_name, + show_warning=False, + ) + self.register_comm(comm) + if f is None: + logger.error("No such comm target registered: %s", target_name) + else: + try: + f(comm, msg) + return + except Exception: + logger.error("Exception opening comm with target: %s", target_name, exc_info=True) + + # Failure. + try: + comm.close() + except Exception: + logger.error( + """Could not close comm during `comm_open` failure + clean-up. The comm may not have been opened yet.""", + exc_info=True, + ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/compiler.py new/ipykernel-6.22.0/ipykernel/compiler.py --- old/ipykernel-6.21.1/ipykernel/compiler.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/compiler.py 2020-02-02 01:00:00.000000000 +0100 @@ -29,7 +29,7 @@ val = length & 0x03 k = 0 - if val == 3: # noqa + if val == 3: k = (ord(data[rounded_end + 2]) & 0xFF) << 16 if val in [2, 3]: k |= (ord(data[rounded_end + 1]) & 0xFF) << 8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/gui/__init__.py new/ipykernel-6.22.0/ipykernel/gui/__init__.py --- old/ipykernel-6.21.1/ipykernel/gui/__init__.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/gui/__init__.py 2020-02-02 01:00:00.000000000 +0100 @@ -10,6 +10,6 @@ # # Distributed under the terms of the BSD License. # -# The full license is in the file COPYING.txt, distributed as part of this +# The full license is in the file LICENSE, distributed as part of this # software. # ----------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/gui/gtk3embed.py new/ipykernel-6.22.0/ipykernel/gui/gtk3embed.py --- old/ipykernel-6.21.1/ipykernel/gui/gtk3embed.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/gui/gtk3embed.py 2020-02-02 01:00:00.000000000 +0100 @@ -4,7 +4,7 @@ # Copyright (C) 2010-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in -# the file COPYING.txt, distributed as part of this software. +# the file LICENSE, distributed as part of this software. # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/gui/gtkembed.py new/ipykernel-6.22.0/ipykernel/gui/gtkembed.py --- old/ipykernel-6.21.1/ipykernel/gui/gtkembed.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/gui/gtkembed.py 2020-02-02 01:00:00.000000000 +0100 @@ -4,7 +4,7 @@ # Copyright (C) 2010-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in -# the file COPYING.txt, distributed as part of this software. +# the file LICENSE, distributed as part of this software. # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/heartbeat.py new/ipykernel-6.22.0/ipykernel/heartbeat.py --- old/ipykernel-6.21.1/ipykernel/heartbeat.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/heartbeat.py 2020-02-02 01:00:00.000000000 +0100 @@ -5,7 +5,7 @@ # Copyright (C) 2008-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in -# the file COPYING, distributed as part of this software. +# the file LICENSE, distributed as part of this software. # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/inprocess/blocking.py new/ipykernel-6.22.0/ipykernel/inprocess/blocking.py --- old/ipykernel-6.21.1/ipykernel/inprocess/blocking.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/inprocess/blocking.py 2020-02-02 01:00:00.000000000 +0100 @@ -8,7 +8,7 @@ # Copyright (C) 2012 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in -# the file COPYING.txt, distributed as part of this software. +# the file LICENSE, distributed as part of this software. # ----------------------------------------------------------------------------- from queue import Empty, Queue diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/inprocess/client.py new/ipykernel-6.22.0/ipykernel/inprocess/client.py --- old/ipykernel-6.21.1/ipykernel/inprocess/client.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/inprocess/client.py 2020-02-02 01:00:00.000000000 +0100 @@ -4,7 +4,7 @@ # Copyright (C) 2012 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in -# the file COPYING, distributed as part of this software. +# the file LICENSE, distributed as part of this software. # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/inprocess/tests/test_kernel.py new/ipykernel-6.22.0/ipykernel/inprocess/tests/test_kernel.py --- old/ipykernel-6.21.1/ipykernel/inprocess/tests/test_kernel.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/inprocess/tests/test_kernel.py 2020-02-02 01:00:00.000000000 +0100 @@ -48,7 +48,6 @@ def test_with_cell_id(kc): - with patch_cell_id(): kc.execute("1+1") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/iostream.py new/ipykernel-6.22.0/ipykernel/iostream.py --- old/ipykernel-6.21.1/ipykernel/iostream.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/iostream.py 2020-02-02 01:00:00.000000000 +0100 @@ -557,7 +557,6 @@ msg = "I/O operation on closed file" raise ValueError(msg) else: - is_child = not self._is_master_process() # only touch the buffer in the IO thread to avoid races with self._buffer_lock: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/ipkernel.py new/ipykernel-6.22.0/ipykernel/ipkernel.py --- old/ipykernel-6.21.1/ipykernel/ipkernel.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/ipkernel.py 2020-02-02 01:00:00.000000000 +0100 @@ -29,7 +29,7 @@ try: from IPython.core.interactiveshell import _asyncio_runner # type:ignore[attr-defined] except ImportError: - _asyncio_runner = None + _asyncio_runner = None # type:ignore try: from IPython.core.completer import provisionalcompleter as _provisionalcompleter @@ -55,7 +55,7 @@ def _get_comm_manager(*args, **kwargs): """Create a new CommManager.""" - global _comm_manager + global _comm_manager # noqa if _comm_manager is None: with _comm_lock: if _comm_manager is None: @@ -130,7 +130,7 @@ jupyter_session_name = os.environ.get('JPY_SESSION_NAME') if jupyter_session_name: - self.shell.user_ns['__file__'] = jupyter_session_name + self.shell.user_ns['__session__'] = jupyter_session_name self.shell.displayhook.pub_socket = self.iopub_socket self.shell.displayhook.topic = self._topic("execute_result") @@ -366,7 +366,6 @@ with_cell_id = _accepts_cell_id(shell.run_cell) try: - # default case: runner is asyncio and asyncio is already running # TODO: this should check every case for "are we inside the runner", # not just asyncio @@ -626,7 +625,7 @@ try: from ipyparallel.serialize import serialize_object, unpack_apply_message except ImportError: - from .serialize import serialize_object, unpack_apply_message # type:ignore + from .serialize import serialize_object, unpack_apply_message shell = self.shell try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/jsonutil.py new/ipykernel-6.22.0/ipykernel/jsonutil.py --- old/ipykernel-6.21.1/ipykernel/jsonutil.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/jsonutil.py 2020-02-02 01:00:00.000000000 +0100 @@ -98,7 +98,7 @@ it simply sanitizes it so that there will be no encoding errors later. """ - if int(JUPYTER_CLIENT_MAJOR_VERSION) >= 7: # noqa + if int(JUPYTER_CLIENT_MAJOR_VERSION) >= 7: return obj # types that are 'atomic' and ok in json as-is. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/kernelapp.py new/ipykernel-6.22.0/ipykernel/kernelapp.py --- old/ipykernel-6.21.1/ipykernel/kernelapp.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/kernelapp.py 2020-02-02 01:00:00.000000000 +0100 @@ -449,9 +449,9 @@ if self.no_stdout or self.no_stderr: blackhole = open(os.devnull, "w") # noqa if self.no_stdout: - sys.stdout = sys.__stdout__ = blackhole + sys.stdout = sys.__stdout__ = blackhole # type:ignore if self.no_stderr: - sys.stderr = sys.__stderr__ = blackhole + sys.stderr = sys.__stderr__ = blackhole # type:ignore def init_io(self): """Redirect input streams and set a display hook.""" @@ -471,11 +471,8 @@ sys.stderr.flush() sys.stderr = outstream_factory(self.session, self.iopub_thread, "stderr", echo=e_stderr) if hasattr(sys.stderr, "_original_stdstream_copy"): - for handler in self.log.handlers: - if isinstance(handler, StreamHandler) and ( - handler.stream.buffer.fileno() == 2 # noqa - ): + if isinstance(handler, StreamHandler) and (handler.stream.buffer.fileno() == 2): self.log.debug("Seeing logger to stderr, rerouting to raw filedescriptor.") handler.stream = TextIOWrapper( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/kernelbase.py new/ipykernel-6.22.0/ipykernel/kernelbase.py --- old/ipykernel-6.21.1/ipykernel/kernelbase.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/kernelbase.py 2020-02-02 01:00:00.000000000 +0100 @@ -883,7 +883,7 @@ msg = self.session.send(stream, "comm_info_reply", reply_content, parent, ident) self.log.debug("%s", msg) - def _send_interupt_children(self): + def _send_interrupt_children(self): if os.name == "nt": self.log.error("Interrupt message not supported on Windows") else: @@ -894,18 +894,27 @@ if pgid and pgid == pid and hasattr(os, "killpg"): try: os.killpg(pgid, SIGINT) - return except OSError: - pass - try: + os.kill(pid, SIGINT) + raise + else: os.kill(pid, SIGINT) - except OSError: - pass async def interrupt_request(self, stream, ident, parent): """Handle an interrupt request.""" - self._send_interupt_children() - content = parent["content"] + content: t.Dict[str, t.Any] = {"status": "ok"} + try: + self._send_interrupt_children() + except OSError as err: + import traceback + + content = { + "status": "error", + "traceback": traceback.format_stack(), + "ename": str(type(err).__name__), + "evalue": str(err), + } + self.session.send(stream, "interrupt_reply", content, parent, ident=ident) return @@ -999,7 +1008,7 @@ cpu_percent = psutil.cpu_percent() # https://psutil.readthedocs.io/en/latest/index.html?highlight=cpu#psutil.cpu_percent # The first time cpu_percent is called it will return a meaningless 0.0 value which you are supposed to ignore. - if cpu_percent is not None and cpu_percent != 0.0: # noqa + if cpu_percent is not None and cpu_percent != 0.0: reply_content["host_cpu_percent"] = cpu_percent reply_content["cpu_count"] = psutil.cpu_count(logical=True) reply_content["host_virtual_memory"] = dict(psutil.virtual_memory()._asdict()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/pickleutil.py new/ipykernel-6.22.0/ipykernel/pickleutil.py --- old/ipykernel-6.21.1/ipykernel/pickleutil.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/pickleutil.py 2020-02-02 01:00:00.000000000 +0100 @@ -77,7 +77,7 @@ # dill doesn't work with cPickle, # tell the two relevant modules to use plain pickle - global pickle + global pickle # noqa pickle = dill try: @@ -98,7 +98,7 @@ """ import cloudpickle - global pickle + global pickle # noqa pickle = cloudpickle try: @@ -278,9 +278,9 @@ self.shape = obj.shape self.dtype = obj.dtype.descr if obj.dtype.fields else obj.dtype.str self.pickled = False - if sum(obj.shape) == 0: + if sum(obj.shape) == 0: # noqa self.pickled = True - elif obj.dtype == "O": + elif obj.dtype == "O": # noqa # can't handle object dtype with buffer approach self.pickled = True elif obj.dtype.fields and any(dt == "O" for dt, sz in obj.dtype.fields.values()): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/serialize.py new/ipykernel-6.22.0/ipykernel/serialize.py --- old/ipykernel-6.21.1/ipykernel/serialize.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/serialize.py 2020-02-02 01:00:00.000000000 +0100 @@ -181,7 +181,7 @@ """unpack f,args,kwargs from buffers packed by pack_apply_message() Returns: original f,args,kwargs""" bufs = list(bufs) # allow us to pop - assert len(bufs) >= 2, "not enough buffers!" # noqa + assert len(bufs) >= 2, "not enough buffers!" pf = bufs.pop(0) f = uncan(pickle.loads(pf), g) pinfo = bufs.pop(0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/tests/conftest.py new/ipykernel-6.22.0/ipykernel/tests/conftest.py --- old/ipykernel-6.21.1/ipykernel/tests/conftest.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/tests/conftest.py 2020-02-02 01:00:00.000000000 +0100 @@ -99,7 +99,7 @@ _, msg = self.session.feed_identities(self._reply) return self.session.deserialize(msg) - def _send_interupt_children(self): + def _send_interrupt_children(self): # override to prevent deadlock pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/tests/test_comm.py new/ipykernel-6.22.0/ipykernel/tests/test_comm.py --- old/ipykernel-6.21.1/ipykernel/tests/test_comm.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/tests/test_comm.py 2020-02-02 01:00:00.000000000 +0100 @@ -1,5 +1,7 @@ import unittest.mock +import pytest + from ipykernel.comm import Comm, CommManager from ipykernel.ipkernel import IPythonKernel from ipykernel.kernelbase import Kernel @@ -9,7 +11,8 @@ manager = CommManager(kernel=kernel) kernel.comm_manager = manager # type:ignore - c = Comm(kernel=kernel, target_name="bar") + with pytest.deprecated_call(): + c = Comm(kernel=kernel, target_name="bar") msgs = [] assert kernel is c.kernel # type:ignore @@ -53,7 +56,8 @@ kernel.comm_manager = manager # type:ignore with unittest.mock.patch.object(Comm, "publish_msg") as publish_msg: - comm = Comm() + with pytest.deprecated_call(): + comm = Comm() comm.on_msg(on_msg) comm.on_close(on_close) manager.register_comm(comm) @@ -96,5 +100,7 @@ def test_comm_in_manager(ipkernel: IPythonKernel) -> None: - comm = Comm() + with pytest.deprecated_call(): + comm = Comm() + assert comm.comm_id in ipkernel.comm_manager.comms diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/tests/test_ipkernel_direct.py new/ipykernel-6.22.0/ipykernel/tests/test_ipkernel_direct.py --- old/ipykernel-6.21.1/ipykernel/tests/test_ipkernel_direct.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/tests/test_ipkernel_direct.py 2020-02-02 01:00:00.000000000 +0100 @@ -90,8 +90,21 @@ async def test_direct_interrupt_request(ipkernel): - reply = await ipkernel.test_shell_message("interrupt_request", {}) + reply = await ipkernel.test_control_message("interrupt_request", {}) assert reply["header"]["msg_type"] == "interrupt_reply" + assert reply["content"] == {"status": "ok"} + + # test failure on interrupt request + def raiseOSError(): + raise OSError("evalue") + + ipkernel._send_interrupt_children = raiseOSError + reply = await ipkernel.test_control_message("interrupt_request", {}) + assert reply["header"]["msg_type"] == "interrupt_reply" + assert reply["content"]["status"] == "error" + assert reply["content"]["ename"] == "OSError" + assert reply["content"]["evalue"] == "evalue" + assert len(reply["content"]["traceback"]) > 0 # TODO: this causes deadlock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/tests/test_kernel.py new/ipykernel-6.22.0/ipykernel/tests/test_kernel.py --- old/ipykernel-6.21.1/ipykernel/tests/test_kernel.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/tests/test_kernel.py 2020-02-02 01:00:00.000000000 +0100 @@ -117,7 +117,6 @@ def test_subprocess_print(): """printing from forked mp.Process""" with new_kernel() as kc: - _check_master(kc, expected=True) flush_channels(kc) np = 5 @@ -146,7 +145,6 @@ def test_subprocess_noprint(): """mp.Process without print doesn't trigger iostream mp_mode""" with kernel() as kc: - np = 5 code = "\n".join( [ @@ -174,7 +172,6 @@ def test_subprocess_error(): """error in mp.Process doesn't crash""" with new_kernel() as kc: - code = "\n".join( [ "import multiprocessing as mp", @@ -459,7 +456,6 @@ def test_control_thread_priority(): - N = 5 with new_kernel() as kc: msg_id = kc.execute("pass") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/tests/test_kernel_direct.py new/ipykernel-6.22.0/ipykernel/tests/test_kernel_direct.py --- old/ipykernel-6.21.1/ipykernel/tests/test_kernel_direct.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/tests/test_kernel_direct.py 2020-02-02 01:00:00.000000000 +0100 @@ -69,8 +69,21 @@ async def test_direct_interrupt_request(kernel): - reply = await kernel.test_shell_message("interrupt_request", {}) + reply = await kernel.test_control_message("interrupt_request", {}) assert reply["header"]["msg_type"] == "interrupt_reply" + assert reply["content"] == {"status": "ok"} + + # test failure on interrupt request + def raiseOSError(): + raise OSError("evalue") + + kernel._send_interrupt_children = raiseOSError + reply = await kernel.test_control_message("interrupt_request", {}) + assert reply["header"]["msg_type"] == "interrupt_reply" + assert reply["content"]["status"] == "error" + assert reply["content"]["ename"] == "OSError" + assert reply["content"]["evalue"] == "evalue" + assert len(reply["content"]["traceback"]) > 0 async def test_direct_shutdown_request(kernel): @@ -132,27 +145,6 @@ await kernel.dispatch_shell(msg) -async def test_enter_eventloop(kernel): - kernel.eventloop = None - kernel.enter_eventloop() - kernel.eventloop = asyncio.get_running_loop() - kernel.enter_eventloop() - called = 0 - - def check_status(): - nonlocal called - if called == 0: - msg = kernel.session.msg("debug_request", {}) - kernel.msg_queue.put(msg) - called += 1 - kernel.io_loop.call_later(0.001, check_status) - - kernel.io_loop.call_later(0.001, check_status) - kernel.start() - while called < 2: - await asyncio.sleep(0.1) - - async def test_do_one_iteration(kernel): kernel.msg_queue = asyncio.Queue() await kernel.do_one_iteration() @@ -166,8 +158,8 @@ await kernel.connect_request(kernel.shell_stream, "foo", {}) -async def test_send_interupt_children(kernel): - kernel._send_interupt_children() +async def test_send_interrupt_children(kernel): + kernel._send_interrupt_children() # TODO: this causes deadlock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/ipykernel/tests/test_kernelspec.py new/ipykernel-6.22.0/ipykernel/tests/test_kernelspec.py --- old/ipykernel-6.21.1/ipykernel/tests/test_kernelspec.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/ipykernel/tests/test_kernelspec.py 2020-02-02 01:00:00.000000000 +0100 @@ -76,7 +76,6 @@ def test_install_kernelspec(): - path = tempfile.mkdtemp() try: InstallIPythonKernelSpecApp.launch_instance(argv=["--prefix", path]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.21.1/pyproject.toml new/ipykernel-6.22.0/pyproject.toml --- old/ipykernel-6.21.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.22.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 @@ -6,7 +6,7 @@ name = "ipykernel" dynamic = ["version"] authors = [{name = "IPython Development Team", email = "ipython-...@scipy.org"}] -license = {file = "COPYING.md"} +license = {file = "LICENSE"} readme = "README.md" description = "IPython Kernel for Jupyter" keywords = ["Interactive", "Interpreter", "Shell", "Web"] @@ -36,7 +36,7 @@ "tornado>=6.1", "matplotlib-inline>=0.1", 'appnope;platform_system=="Darwin"', - "pyzmq>=17", + "pyzmq>=20", "psutil", "packaging", ] @@ -116,7 +116,7 @@ test = "mypy --install-types --non-interactive {args:.}" [tool.hatch.envs.lint] -dependencies = ["black==22.12.0", "mdformat>0.7", "ruff==0.0.236"] +dependencies = ["black==23.1.0", "mdformat>0.7", "ruff==0.0.254"] detached = true [tool.hatch.envs.lint.scripts] style = [ @@ -227,7 +227,6 @@ "N", "PLC", "PLE", - "PLR", "PLW", "Q", "RUF", @@ -274,6 +273,8 @@ "N801", # SIM105 Use `contextlib.suppress(ValueError)` instead of try-except-pass "SIM105", + # S110 `try`-`except`-`pass` detected + "S110", ] unfixable = [ # Don't touch print statements @@ -293,7 +294,9 @@ # F841 Local variable `t` is assigned to but never used # EM101 Exception must not use a string literal, assign to variable first # PLR2004 Magic value used in comparison -"ipykernel/tests/*" = ["B011", "F841", "C408", "E402", "T201", "B007", "N802", "F841", "EM101", "EM102", "EM103", "PLR2004"] +# PLW0603 Using the global statement to update ... +# PLW2901 `for` loop variable ... +"ipykernel/tests/*" = ["B011", "F841", "C408", "E402", "T201", "B007", "N802", "F841", "EM101", "EM102", "EM103", "PLR2004", "PLW0603", "PLW2901"] [tool.interrogate] ignore-init-module=true