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-02-06 14:15:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ipykernel (Old)
and /work/SRC/openSUSE:Factory/.python-ipykernel.new.4462 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipykernel"
Mon Feb 6 14:15:17 2023 rev:35 rq:1063284 version:6.21.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ipykernel/python-ipykernel.changes
2023-01-24 20:31:54.004237819 +0100
+++
/work/SRC/openSUSE:Factory/.python-ipykernel.new.4462/python-ipykernel.changes
2023-02-06 14:15:18.516538256 +0100
@@ -1,0 +2,9 @@
+Sun Feb 5 15:09:43 UTC 2023 - Ben Greiner <[email protected]>
+
+- Update to 6.21.1
+ * Restore nest-asyncio for tk loop #1086 (@blink1073)
+- Release 6.21.0
+ * Expose session start file in file. #1078 (@Carreau)
+ * Add copy_to_globals debug request handling #1055 (@brichet)
+
+-------------------------------------------------------------------
Old:
----
ipykernel-6.20.2.tar.gz
New:
----
ipykernel-6.21.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ipykernel.spec ++++++
--- /var/tmp/diff_new_pack.LNbhv7/_old 2023-02-06 14:15:19.052540928 +0100
+++ /var/tmp/diff_new_pack.LNbhv7/_new 2023-02-06 14:15:19.064540987 +0100
@@ -17,7 +17,7 @@
Name: python-ipykernel
-Version: 6.20.2
+Version: 6.21.1
Release: 0
Summary: IPython Kernel for Jupyter
License: BSD-3-Clause
@@ -44,7 +44,7 @@
# /SECTION
# SECTION dependencies
BuildRequires: %{python_module comm >= 0.1.1}
-BuildRequires: %{python_module debugpy >= 1.0}
+BuildRequires: %{python_module debugpy >= 1.6.5}
BuildRequires: %{python_module ipython >= 7.23.1}
BuildRequires: %{python_module jupyter-client >= 6.1.12}
BuildRequires: %{python_module matplotlib-inline >= 0.1}
@@ -54,8 +54,9 @@
BuildRequires: %{python_module pyzmq >= 17}
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)}
Requires: python-comm >= 0.1.1
-Requires: python-debugpy >= 1.0
+Requires: python-debugpy >= 1.6.5
Requires: python-ipython >= 7.23.1
Requires: python-jupyter-client >= 6.1.12
Requires: python-matplotlib-inline >= 0.1
@@ -65,6 +66,7 @@
Requires: python-pyzmq >= 17
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))
# /SECTION
# SECTION test requirements
BuildRequires: %{python_module flaky}
++++++ ipykernel-6.20.2.tar.gz -> ipykernel-6.21.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/.github/workflows/ci.yml
new/ipykernel-6.21.1/.github/workflows/ci.yml
--- old/ipykernel-6.20.2/.github/workflows/ci.yml 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/.github/workflows/ci.yml 2020-02-02
01:00:00.000000000 +0100
@@ -4,6 +4,8 @@
push:
branches: ["main"]
pull_request:
+ schedule:
+ - cron: "0 0 * * *"
concurrency:
group: ci-${{ github.ref }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/.github/workflows/downstream.yml
new/ipykernel-6.21.1/.github/workflows/downstream.yml
--- old/ipykernel-6.20.2/.github/workflows/downstream.yml 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/.github/workflows/downstream.yml 2020-02-02
01:00:00.000000000 +0100
@@ -90,13 +90,11 @@
steps:
- name: Checkout
uses: actions/checkout@v3
-
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
architecture: "x64"
-
- name: Install System Packages
run: |
sudo apt-get update
@@ -109,16 +107,46 @@
cd qtconsole
${pythonLocation}/bin/python -m pip install -e ".[test]"
${pythonLocation}/bin/python -m pip install pyqt5
- - name: Install Jupyter-Client changes
+ - name: Install Ipykernel changes
shell: bash -l {0}
run: ${pythonLocation}/bin/python -m pip install -e .
-
- name: Test qtconsole
shell: bash -l {0}
run: |
cd ${GITHUB_WORKSPACE}/../qtconsole
xvfb-run --auto-servernum ${pythonLocation}/bin/python -m pytest -x
-vv -s --full-trace --color=yes qtconsole
+ spyder_kernels:
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ - name: Setup Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.9"
+ architecture: "x64"
+ - name: Install System Packages
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y --no-install-recommends libegl1-mesa
+ - name: Install spyder-kernels dependencies
+ shell: bash -l {0}
+ run: |
+ cd ${GITHUB_WORKSPACE}/..
+ git clone https://github.com/spyder-ide/spyder-kernels.git
+ cd spyder-kernels
+ ${pythonLocation}/bin/python -m pip install -e ".[test]"
+ - name: Install IPykernel changes
+ shell: bash -l {0}
+ run: ${pythonLocation}/bin/python -m pip install -e .
+ - name: Test spyder-kernels
+ shell: bash -l {0}
+ run: |
+ cd ${GITHUB_WORKSPACE}/../spyder-kernels
+ xvfb-run --auto-servernum ${pythonLocation}/bin/python -m pytest -x
-vv -s --full-trace --color=yes spyder_kernels
+
downstream_check: # This job does nothing and is only used for the branch
protection
if: always()
needs:
@@ -127,6 +155,7 @@
- jupyter_client
- ipyparallel
- jupyter_kernel_test
+ - spyder_kernels
- qtconsole
runs-on: ubuntu-latest
steps:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/.pre-commit-config.yaml
new/ipykernel-6.21.1/.pre-commit-config.yaml
--- old/ipykernel-6.20.2/.pre-commit-config.yaml 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/.pre-commit-config.yaml 2020-02-02
01:00:00.000000000 +0100
@@ -36,7 +36,7 @@
- id: black
- repo: https://github.com/charliermarsh/ruff-pre-commit
- rev: v0.0.215
+ rev: v0.0.236
hooks:
- id: ruff
args: ["--fix"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/CHANGELOG.md
new/ipykernel-6.21.1/CHANGELOG.md
--- old/ipykernel-6.20.2/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100
@@ -2,6 +2,43 @@
<!-- <START NEW CHANGELOG ENTRY> -->
+## 6.21.1
+
+([Full
Changelog](https://github.com/ipython/ipykernel/compare/v6.21.0...ac7776dfd68861ae005e1f142ec87cd6703847ea))
+
+### Maintenance and upkeep improvements
+
+- Restore nest-asyncio for tk loop
[#1086](https://github.com/ipython/ipykernel/pull/1086)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/ipython/ipykernel/graphs/contributors?from=2023-01-30&to=2023-02-02&type=c))
+
+[@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))
+- Add copy_to_globals debug request handling
[#1055](https://github.com/ipython/ipykernel/pull/1055)
([@brichet](https://github.com/brichet))
+
+### Maintenance and upkeep improvements
+
+- Adopt more lint rules
[#1082](https://github.com/ipython/ipykernel/pull/1082)
([@blink1073](https://github.com/blink1073))
+- Maintenance updates [#1081](https://github.com/ipython/ipykernel/pull/1081)
([@blink1073](https://github.com/blink1073))
+- Test spyder kernels [#1080](https://github.com/ipython/ipykernel/pull/1080)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/ipython/ipykernel/graphs/contributors?from=2023-01-16&to=2023-01-30&type=c))
+
+[@agronholm](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Aagronholm+updated%3A2023-01-16..2023-01-30&type=Issues)
|
[@blink1073](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ablink1073+updated%3A2023-01-16..2023-01-30&type=Issues)
|
[@brichet](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Abrichet+updated%3A2023-01-16..2023-01-30&type=Issues)
|
[@Carreau](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3ACarreau+updated%3A2023-01-16..2023-01-30&type=Issues)
|
[@ccordoba12](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Accordoba12+updated%3A2023-01-16..2023-01-30&type=Issues)
|
[@minrk](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Aminrk+updated%3A2023-01-16..2023-01-30&type=Issues)
+
## 6.20.2
([Full
Changelog](https://github.com/ipython/ipykernel/compare/v6.20.1...203ee2bce0b506257bd561d082e983330d1ebd14))
@@ -16,8 +53,6 @@
[@ilyasher](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ailyasher+updated%3A2023-01-09..2023-01-16&type=Issues)
-<!-- <END NEW CHANGELOG ENTRY> -->
-
## 6.20.1
([Full
Changelog](https://github.com/ipython/ipykernel/compare/v6.20.0...5f07abc22a1c75672f7bee129505f19c954a7c36))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/PKG-INFO
new/ipykernel-6.21.1/PKG-INFO
--- old/ipykernel-6.20.2/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: ipykernel
-Version: 6.20.2
+Version: 6.21.1
Summary: IPython Kernel for Jupyter
Project-URL: Homepage, https://ipython.org
Author-email: IPython Development Team <[email protected]>
@@ -80,9 +80,10 @@
Requires-Python: >=3.8
Requires-Dist: appnope; platform_system == 'Darwin'
Requires-Dist: comm>=0.1.1
-Requires-Dist: debugpy>=1.0
+Requires-Dist: debugpy>=1.6.5
Requires-Dist: ipython>=7.23.1
Requires-Dist: jupyter-client>=6.1.12
+Requires-Dist: jupyter-core!=5.0.*,>=4.12
Requires-Dist: matplotlib-inline>=0.1
Requires-Dist: nest-asyncio
Requires-Dist: packaging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/_version.py
new/ipykernel-6.21.1/ipykernel/_version.py
--- old/ipykernel-6.20.2/ipykernel/_version.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/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.20.2"
+__version__ = "6.21.1"
# 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.20.2/ipykernel/compiler.py
new/ipykernel-6.21.1/ipykernel/compiler.py
--- old/ipykernel-6.20.2/ipykernel/compiler.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/compiler.py 2020-02-02 01:00:00.000000000
+0100
@@ -29,7 +29,7 @@
val = length & 0x03
k = 0
- if val == 3:
+ if val == 3: # noqa
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.20.2/ipykernel/connect.py
new/ipykernel-6.21.1/ipykernel/connect.py
--- old/ipykernel-6.20.2/ipykernel/connect.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/connect.py 2020-02-02 01:00:00.000000000
+0100
@@ -117,7 +117,7 @@
kwargs["start_new_session"] = True
return Popen(
- [sys.executable, "-c", cmd, "--existing", cf] + argv,
+ [sys.executable, "-c", cmd, "--existing", cf, *argv],
stdout=PIPE,
stderr=PIPE,
close_fds=(sys.platform != "win32"),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/debugger.py
new/ipykernel-6.21.1/ipykernel/debugger.py
--- old/ipykernel-6.20.2/ipykernel/debugger.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/debugger.py 2020-02-02 01:00:00.000000000
+0100
@@ -316,7 +316,13 @@
]
# Requests that can be handled even if the debugger is not running
- static_debug_msg_types = ["debugInfo", "inspectVariables",
"richInspectVariables", "modules"]
+ static_debug_msg_types = [
+ "debugInfo",
+ "inspectVariables",
+ "richInspectVariables",
+ "modules",
+ "copyToGlobals",
+ ]
def __init__(
self, log, debugpy_stream, event_callback, shell_socket, session,
just_my_code=True
@@ -662,6 +668,26 @@
reply["success"] = True
return reply
+ async def copyToGlobals(self, message):
+ dst_var_name = message["arguments"]["dstVariableName"]
+ src_var_name = message["arguments"]["srcVariableName"]
+ src_frame_id = message["arguments"]["srcFrameId"]
+
+ expression = f"globals()['{dst_var_name}']"
+ seq = message["seq"]
+ return await self._forward_message(
+ {
+ "type": "request",
+ "command": "setExpression",
+ "seq": seq + 1,
+ "arguments": {
+ "expression": expression,
+ "value": src_var_name,
+ "frameId": src_frame_id,
+ },
+ }
+ )
+
async def modules(self, message):
"""Handle a modules message."""
modules = list(sys.modules.values())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/eventloops.py
new/ipykernel-6.21.1/ipykernel/eventloops.py
--- old/ipykernel-6.20.2/ipykernel/eventloops.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/eventloops.py 2020-02-02
01:00:00.000000000 +0100
@@ -471,10 +471,9 @@
QT_API_PYSIDE6: 'qt6',
QT_API_PYQT6: 'qt6',
}
- if loaded is not None and gui != 'qt':
- if qt_env2gui[loaded] != gui:
- print(f'Cannot switch Qt versions for this session; you must use
{qt_env2gui[loaded]}.')
- return
+ if loaded is not None and gui != 'qt' and qt_env2gui[loaded] != gui:
+ print(f'Cannot switch Qt versions for this session; you must use
{qt_env2gui[loaded]}.')
+ return
if qt_api is not None and gui != 'qt':
if qt_env2gui[qt_api] != gui:
@@ -510,7 +509,7 @@
os.environ["QT_API"] = "pyqt6"
elif gui == 'qt':
# Don't set QT_API; let IPython logic choose the version.
- if 'QT_API' in os.environ.keys():
+ if 'QT_API' in os.environ:
del os.environ['QT_API']
else:
print(f'Unrecognized Qt version: {gui}. Should be "qt5", "qt6", or
"qt".')
@@ -521,7 +520,7 @@
from IPython.external.qt_for_kernel import QtCore, QtGui # noqa
except Exception as e:
# Clear the environment variable for the next attempt.
- if 'QT_API' in os.environ.keys():
+ if 'QT_API' in os.environ:
del os.environ["QT_API"]
print(f"QT_API couldn't be set due to error {e}")
return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/inprocess/client.py
new/ipykernel-6.21.1/ipykernel/inprocess/client.py
--- old/ipykernel-6.20.2/ipykernel/inprocess/client.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/inprocess/client.py 2020-02-02
01:00:00.000000000 +0100
@@ -15,11 +15,7 @@
from jupyter_client.client import KernelClient
from jupyter_client.clientabc import KernelClientABC
-
-try:
- from jupyter_client.utils import run_sync # requires 7.0+
-except ImportError:
- run_sync = None # type:ignore
+from jupyter_core.utils import run_sync
# IPython imports
from traitlets import Instance, Type, default
@@ -165,10 +161,7 @@
def comm_info(self, target_name=None):
"""Request a dictionary of valid comms and their targets."""
- if target_name is None:
- content = {}
- else:
- content = dict(target_name=target_name)
+ content = {} if target_name is None else dict(target_name=target_name)
msg = self.session.msg("comm_info_request", content)
self._dispatch_to_kernel(msg)
return msg["header"]["msg_id"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/iostream.py
new/ipykernel-6.21.1/ipykernel/iostream.py
--- old/ipykernel-6.20.2/ipykernel/iostream.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/iostream.py 2020-02-02 01:00:00.000000000
+0100
@@ -234,7 +234,7 @@
# new context/socket for every pipe-out
# since forks don't teardown politely, use ctx.term to ensure send
has completed
ctx, pipe_out = self._setup_pipe_out()
- pipe_out.send_multipart([self._pipe_uuid] + msg, *args, **kwargs)
+ pipe_out.send_multipart([self._pipe_uuid, *msg], *args, **kwargs)
pipe_out.close()
ctx.term()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/ipkernel.py
new/ipykernel-6.21.1/ipykernel/ipkernel.py
--- old/ipykernel-6.20.2/ipykernel/ipkernel.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/ipkernel.py 2020-02-02 01:00:00.000000000
+0100
@@ -3,6 +3,7 @@
import asyncio
import builtins
import getpass
+import os
import signal
import sys
import threading
@@ -126,6 +127,11 @@
compiler_class=XCachingCompiler,
)
self.shell.displayhook.session = self.session
+
+ jupyter_session_name = os.environ.get('JPY_SESSION_NAME')
+ if jupyter_session_name:
+ self.shell.user_ns['__file__'] = jupyter_session_name
+
self.shell.displayhook.pub_socket = self.iopub_socket
self.shell.displayhook.topic = self._topic("execute_result")
self.shell.display_pub.session = self.session
@@ -425,10 +431,7 @@
finally:
self._restore_input()
- if res.error_before_exec is not None:
- err = res.error_before_exec
- else:
- err = res.error_in_exec
+ err = res.error_before_exec if res.error_before_exec is not None else
res.error_in_exec
if res.success:
reply_content["status"] = "ok"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/jsonutil.py
new/ipykernel-6.21.1/ipykernel/jsonutil.py
--- old/ipykernel-6.20.2/ipykernel/jsonutil.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/jsonutil.py 2020-02-02 01:00:00.000000000
+0100
@@ -26,7 +26,7 @@
# holy crap, strptime is not threadsafe.
# Calling it once at import seems to help.
-datetime.strptime("1", "%d")
+datetime.strptime("1", "%d") # noqa
# -----------------------------------------------------------------------------
# Classes and functions
@@ -98,7 +98,7 @@
it simply sanitizes it so that there will be no encoding errors later.
"""
- if int(JUPYTER_CLIENT_MAJOR_VERSION) >= 7:
+ if int(JUPYTER_CLIENT_MAJOR_VERSION) >= 7: # noqa
return obj
# types that are 'atomic' and ok in json as-is.
@@ -156,7 +156,7 @@
for k, v in obj.items():
out[str(k)] = json_clean(v)
return out
- if isinstance(obj, datetime) or isinstance(obj, date):
+ if isinstance(obj, (datetime, date)):
return obj.strftime(ISO8601)
# we don't understand it, it's probably an unserializable object
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/kernelapp.py
new/ipykernel-6.21.1/ipykernel/kernelapp.py
--- old/ipykernel-6.20.2/ipykernel/kernelapp.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/ipykernel/kernelapp.py 2020-02-02 01:00:00.000000000
+0100
@@ -13,6 +13,7 @@
from functools import partial
from io import FileIO, TextIOWrapper
from logging import StreamHandler
+from typing import Optional
import zmq
from IPython.core.application import ( # type:ignore[attr-defined]
@@ -131,7 +132,7 @@
poller = Any() # don't restrict this even though current pollers are all
Threads
heartbeat = Instance(Heartbeat, allow_none=True)
- context = Any()
+ context: Optional[zmq.Context] = Any() # type:ignore[assignment]
shell_socket = Any()
control_socket = Any()
debugpy_socket = Any()
@@ -403,7 +404,8 @@
if socket and not socket.closed:
socket.close()
self.log.debug("Terminating zmq context")
- self.context.term()
+ if self.context:
+ self.context.term()
self.log.debug("Terminated zmq context")
def log_connection_info(self):
@@ -445,7 +447,7 @@
def init_blackhole(self):
"""redirects stdout/stderr to devnull if necessary"""
if self.no_stdout or self.no_stderr:
- blackhole = open(os.devnull, "w")
+ blackhole = open(os.devnull, "w") # noqa
if self.no_stdout:
sys.stdout = sys.__stdout__ = blackhole
if self.no_stderr:
@@ -471,7 +473,9 @@
if hasattr(sys.stderr, "_original_stdstream_copy"):
for handler in self.log.handlers:
- if isinstance(handler, StreamHandler) and
(handler.stream.buffer.fileno() == 2):
+ if isinstance(handler, StreamHandler) and (
+ handler.stream.buffer.fileno() == 2 # noqa
+ ):
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.20.2/ipykernel/kernelbase.py
new/ipykernel-6.21.1/ipykernel/kernelbase.py
--- old/ipykernel-6.20.2/ipykernel/kernelbase.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/kernelbase.py 2020-02-02
01:00:00.000000000 +0100
@@ -252,7 +252,8 @@
"apply_request",
]
# add deprecated ipyparallel control messages
- control_msg_types = msg_types + [
+ control_msg_types = [
+ *msg_types,
"clear_request",
"abort_request",
"debug_request",
@@ -544,10 +545,7 @@
self.control_stream.on_recv(self.dispatch_control, copy=False)
- if self.control_thread:
- control_loop = self.control_thread.io_loop
- else:
- control_loop = self.io_loop
+ control_loop = self.control_thread.io_loop if self.control_thread else
self.io_loop
asyncio.run_coroutine_threadsafe(self.poll_control_queue(),
control_loop.asyncio_loop)
@@ -844,10 +842,7 @@
async def connect_request(self, stream, ident, parent):
"""Handle a connect request."""
- if self._recorded_ports is not None:
- content = self._recorded_ports.copy()
- else:
- content = {}
+ content = self._recorded_ports.copy() if self._recorded_ports is not
None else {}
content["status"] = "ok"
msg = self.session.send(stream, "connect_reply", content, parent,
ident)
self.log.debug("%s", msg)
@@ -982,7 +977,7 @@
"""Handle a usage request."""
reply_content = {"hostname": socket.gethostname(), "pid": os.getpid()}
current_process = psutil.Process()
- all_processes = [current_process] +
current_process.children(recursive=True)
+ all_processes = [current_process,
*current_process.children(recursive=True)]
# Ensure 1) self.processes is updated to only current subprocesses
# and 2) we reuse processes when possible (needed for accurate CPU)
self.processes = {
@@ -1004,7 +999,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:
+ if cpu_percent is not None and cpu_percent != 0.0: # noqa
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.20.2/ipykernel/pickleutil.py
new/ipykernel-6.21.1/ipykernel/pickleutil.py
--- old/ipykernel-6.20.2/ipykernel/pickleutil.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/pickleutil.py 2020-02-02
01:00:00.000000000 +0100
@@ -236,14 +236,8 @@
if g is None:
g = {}
- if self.defaults:
- defaults = tuple(uncan(cfd, g) for cfd in self.defaults)
- else:
- defaults = None
- if self.closure:
- closure = tuple(uncan(cell, g) for cell in self.closure)
- else:
- closure = None
+ defaults = tuple(uncan(cfd, g) for cfd in self.defaults) if
self.defaults else None
+ closure = tuple(uncan(cell, g) for cell in self.closure) if
self.closure else None
newFunc = FunctionType(self.code, g, self.__name__, defaults, closure)
return newFunc
@@ -260,10 +254,7 @@
for k, v in cls.__dict__.items():
if k not in ("__weakref__", "__dict__"):
self._canned_dict[k] = can(v)
- if self.old_style:
- mro = []
- else:
- mro = cls.mro()
+ mro = [] if self.old_style else cls.mro()
self.parents = [can(c) for c in mro[1:]]
self.buffers = []
@@ -376,10 +367,7 @@
This won't catch subclasses.
"""
if isinstance(check, tuple):
- for cls in check:
- if type(obj) is cls:
- return True
- return False
+ return any(type(obj) is cls for cls in check)
else:
return type(obj) is check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/serialize.py
new/ipykernel-6.21.1/ipykernel/serialize.py
--- old/ipykernel-6.20.2/ipykernel/serialize.py 2020-02-02 01:00:00.000000000
+0100
+++ new/ipykernel-6.21.1/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!"
+ assert len(bufs) >= 2, "not enough buffers!" # noqa
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.20.2/ipykernel/tests/test_debugger.py
new/ipykernel-6.21.1/ipykernel/tests/test_debugger.py
--- old/ipykernel-6.20.2/ipykernel/tests/test_debugger.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/tests/test_debugger.py 2020-02-02
01:00:00.000000000 +0100
@@ -282,3 +282,100 @@
from ipykernel.compiler import _convert_to_long_pathname
_convert_to_long_pathname(__file__)
+
+
+def test_copy_to_globals(kernel_with_debug):
+ local_var_name = "var"
+ global_var_name = "var_copy"
+ code = f"""from IPython.core.display import HTML
+def my_test():
+ {local_var_name} = HTML('<p>test content</p>')
+ pass
+a = 2
+my_test()"""
+
+ # Init debugger and set breakpoint
+ r = wait_for_debug_request(kernel_with_debug, "dumpCell", {"code": code})
+ source = r["body"]["sourcePath"]
+
+ wait_for_debug_request(
+ kernel_with_debug,
+ "setBreakpoints",
+ {
+ "breakpoints": [{"line": 4}],
+ "source": {"path": source},
+ "sourceModified": False,
+ },
+ )
+
+ wait_for_debug_request(kernel_with_debug, "debugInfo")
+
+ wait_for_debug_request(kernel_with_debug, "configurationDone")
+
+ # Execute code
+ kernel_with_debug.execute(code)
+
+ # Wait for stop on breakpoint
+ msg: dict = {"msg_type": "", "content": {}}
+ while msg.get("msg_type") != "debug_event" or msg["content"].get("event")
!= "stopped":
+ msg = kernel_with_debug.get_iopub_msg(timeout=TIMEOUT)
+
+ stacks = wait_for_debug_request(kernel_with_debug, "stackTrace",
{"threadId": 1})["body"][
+ "stackFrames"
+ ]
+
+ # Get local frame id
+ frame_id = stacks[0]["id"]
+
+ # Copy the variable
+ wait_for_debug_request(
+ kernel_with_debug,
+ "copyToGlobals",
+ {
+ "srcVariableName": local_var_name,
+ "dstVariableName": global_var_name,
+ "srcFrameId": frame_id,
+ },
+ )
+
+ # Get the scopes
+ scopes = wait_for_debug_request(kernel_with_debug, "scopes", {"frameId":
frame_id})["body"][
+ "scopes"
+ ]
+
+ # Get the local variable
+ locals_ = wait_for_debug_request(
+ kernel_with_debug,
+ "variables",
+ {
+ "variablesReference": next(filter(lambda s: s["name"] == "Locals",
scopes))[
+ "variablesReference"
+ ]
+ },
+ )["body"]["variables"]
+
+ local_var = None
+ for variable in locals_:
+ if local_var_name in variable["evaluateName"]:
+ local_var = variable
+ assert local_var is not None
+
+ # Get the global variable (copy of the local variable)
+ globals_ = wait_for_debug_request(
+ kernel_with_debug,
+ "variables",
+ {
+ "variablesReference": next(filter(lambda s: s["name"] ==
"Globals", scopes))[
+ "variablesReference"
+ ]
+ },
+ )["body"]["variables"]
+
+ global_var = None
+ for variable in globals_:
+ if global_var_name in variable["evaluateName"]:
+ global_var = variable
+ assert global_var is not None
+
+ # Compare local and global variable
+ assert global_var["value"] == local_var["value"] and global_var["type"] ==
local_var["type"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/tests/test_eventloop.py
new/ipykernel-6.21.1/ipykernel/tests/test_eventloop.py
--- old/ipykernel-6.20.2/ipykernel/tests/test_eventloop.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/tests/test_eventloop.py 2020-02-02
01:00:00.000000000 +0100
@@ -33,7 +33,7 @@
try:
__import__(gui_to_module[gui])
qt_guis_avail.append(gui)
- if 'QT_API' in os.environ.keys():
+ if 'QT_API' in os.environ:
del os.environ['QT_API']
except ImportError:
pass # that version of Qt isn't available.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/ipykernel/tests/test_jsonutil.py
new/ipykernel-6.21.1/ipykernel/tests/test_jsonutil.py
--- old/ipykernel-6.20.2/ipykernel/tests/test_jsonutil.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/tests/test_jsonutil.py 2020-02-02
01:00:00.000000000 +0100
@@ -53,7 +53,7 @@
# More exotic objects
((x for x in range(3)), [0, 1, 2]),
(iter([1, 2]), [1, 2]),
- (datetime(1991, 7, 3, 12, 00), "1991-07-03T12:00:00.000000"),
+ (datetime(1991, 7, 3, 12, 00), "1991-07-03T12:00:00.000000"), # noqa
(date(1991, 7, 3), "1991-07-03T00:00:00.000000"),
(MyFloat(), 3.14),
(MyInt(), 389),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ipykernel-6.20.2/ipykernel/tests/test_parentpoller.py
new/ipykernel-6.21.1/ipykernel/tests/test_parentpoller.py
--- old/ipykernel-6.20.2/ipykernel/tests/test_parentpoller.py 2020-02-02
01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/ipykernel/tests/test_parentpoller.py 2020-02-02
01:00:00.000000000 +0100
@@ -33,7 +33,7 @@
def mock_wait(*args, **kwargs):
return -1
- with mock.patch("ctypes.windll.kernel32.WaitForMultipleObjects",
mock_wait):
+ with mock.patch("ctypes.windll.kernel32.WaitForMultipleObjects",
mock_wait): # noqa
with warnings.catch_warnings():
warnings.simplefilter("ignore")
poller.run()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-6.20.2/pyproject.toml
new/ipykernel-6.21.1/pyproject.toml
--- old/ipykernel-6.20.2/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/ipykernel-6.21.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -25,17 +25,19 @@
urls = {Homepage = "https://ipython.org"}
requires-python = ">=3.8"
dependencies = [
- "debugpy>=1.0",
+ "debugpy>=1.6.5",
"ipython>=7.23.1",
"comm>=0.1.1",
"traitlets>=5.4.0",
"jupyter_client>=6.1.12",
+ "jupyter_core>=4.12,!=5.0.*",
+ # For tk event loop support only.
+ "nest_asyncio",
"tornado>=6.1",
"matplotlib-inline>=0.1",
'appnope;platform_system=="Darwin"',
"pyzmq>=17",
"psutil",
- "nest_asyncio",
"packaging",
]
@@ -114,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.215"]
+dependencies = ["black==22.12.0", "mdformat>0.7", "ruff==0.0.236"]
detached = true
[tool.hatch.envs.lint.scripts]
style = [
@@ -211,8 +213,31 @@
target-version = "py37"
line-length = 100
select = [
- "A", "B", "C", "E", "EM", "F", "FBT", "I", "N", "Q", "RUF", "S", "T",
- "UP", "W", "YTT",
+ "A",
+ "B",
+ "C",
+ "DTZ",
+ "E",
+ "EM",
+ "F",
+ "FBT",
+ "I",
+ "ICN",
+ "ISC",
+ "N",
+ "PLC",
+ "PLE",
+ "PLR",
+ "PLW",
+ "Q",
+ "RUF",
+ "S",
+ "SIM",
+ "T",
+ "TID",
+ "UP",
+ "W",
+ "YTT",
]
ignore = [
# Allow non-abstract empty methods in abstract base classes
@@ -247,6 +272,8 @@
"C408",
# N801 Class name `directional_link` should use CapWords convention
"N801",
+ # SIM105 Use `contextlib.suppress(ValueError)` instead of try-except-pass
+ "SIM105",
]
unfixable = [
# Don't touch print statements
@@ -265,7 +292,8 @@
# N802 Function name `assertIn` should be lowercase
# F841 Local variable `t` is assigned to but never used
# EM101 Exception must not use a string literal, assign to variable first
-"ipykernel/tests/*" = ["B011", "F841", "C408", "E402", "T201", "B007", "N802",
"F841", "EM101", "EM102"]
+# PLR2004 Magic value used in comparison
+"ipykernel/tests/*" = ["B011", "F841", "C408", "E402", "T201", "B007", "N802",
"F841", "EM101", "EM102", "EM103", "PLR2004"]
[tool.interrogate]
ignore-init-module=true