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 @@
 
 [![Build 
Status](https://github.com/ipython/ipykernel/actions/workflows/ci.yml/badge.svg?query=branch%3Amain++)](https://github.com/ipython/ipykernel/actions/workflows/ci.yml/badge.svg?query=branch%3Amain++)
 
[![codecov](https://codecov.io/gh/ipython/ipykernel/branch/main/graph/badge.svg?token=SyksDOcIJa)](https://codecov.io/gh/ipython/ipykernel)
-[![Documentation 
Status](https://readthedocs.org/projects/ipython/badge/?version=latest)](http://ipython.readthedocs.io/en/latest/?badge=latest)
+[![Documentation 
Status](https://readthedocs.org/projects/ipykernel/badge/?version=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 @@
 
 [![Build 
Status](https://github.com/ipython/ipykernel/actions/workflows/ci.yml/badge.svg?query=branch%3Amain++)](https://github.com/ipython/ipykernel/actions/workflows/ci.yml/badge.svg?query=branch%3Amain++)
 
[![codecov](https://codecov.io/gh/ipython/ipykernel/branch/main/graph/badge.svg?token=SyksDOcIJa)](https://codecov.io/gh/ipython/ipykernel)
-[![Documentation 
Status](https://readthedocs.org/projects/ipython/badge/?version=latest)](http://ipython.readthedocs.io/en/latest/?badge=latest)
+[![Documentation 
Status](https://readthedocs.org/projects/ipykernel/badge/?version=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

Reply via email to