Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-jupyter-client for
openSUSE:Factory checked in at 2022-12-31 11:22:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter-client (Old)
and /work/SRC/openSUSE:Factory/.python-jupyter-client.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jupyter-client"
Sat Dec 31 11:22:49 2022 rev:13 rq:1045755 version:7.4.8
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-jupyter-client/python-jupyter-client.changes
2022-12-12 18:59:15.396002251 +0100
+++
/work/SRC/openSUSE:Factory/.python-jupyter-client.new.1563/python-jupyter-client.changes
2022-12-31 11:22:51.448433913 +0100
@@ -1,0 +2,26 @@
+Wed Dec 14 21:10:50 UTC 2022 - Ben Greiner <[email protected]>
+
+- Update to 7.4.8
+ * Make sure loop is marked with nest_asyncio #893 (@impact27)
+- Release 7.4.7
+ * Fix connection reconciliation to handle restarts #882
+ (@kevin-bates)
+- Release 7.4.6
+ * Reconcile connection information #879 (@kevin-bates)
+- Release 7.4.5
+ * [7.x] Handle Jupyter Core Warning #875 (@blink1073)
+- Release 7.4.4
+ * Workaround for launch bug #861 (@blink1073)
+- Release 7.4.3
+ * Defer creation of ready future #858 (@blink1073)
+- Release 7.4.2
+ * Fix ready promise and session send #852 (@blink1073)
+ * Fix pending kernels backported and reverted: #848 #851
+- Release 7.3.5
+ * add AsyncKernelClient to doc/api/client.rst #819 (@helioz11)
+ * Use tornado 6.2's PeriodicCallback in restarter #822 (@vidartf)
+ * Make _stdin_hook_default async #814 (@davidbrochart)
+- Replace py3109-compat.patch by py310-ignore-deprecation.patch
+ gh#jupyter/jupyter_client#713
+
+-------------------------------------------------------------------
Old:
----
jupyter_client-7.3.4.tar.gz
py3109-compat.patch
New:
----
jupyter_client-7.4.8.tar.gz
py310-ignore-deprecation.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jupyter-client.spec ++++++
--- /var/tmp/diff_new_pack.eFrnKk/_old 2022-12-31 11:22:52.100437817 +0100
+++ /var/tmp/diff_new_pack.eFrnKk/_new 2022-12-31 11:22:52.104437841 +0100
@@ -24,18 +24,18 @@
%define psuffix %{nil}
%bcond_with test
%endif
-%{?!python_module:%define python_module() python3-%{**}}
-%define skip_python2 1
+
Name: python-jupyter-client%{psuffix}
-Version: 7.3.4
+Version: 7.4.8
Release: 0
Summary: Jupyter protocol implementation and client libraries
License: BSD-3-Clause
Group: Development/Languages/Python
URL: https://github.com/jupyter/jupyter_client
Source:
https://files.pythonhosted.org/packages/source/j/jupyter_client/jupyter_client-%{version}.tar.gz
-# PATCH-FIX-OPENSUSE py3109-compat.patch
-Patch0: py3109-compat.patch
+# PATCH-FIX-UPSTREAM py310-ignore-deprecation.patch
gh#jupyter/jupyter_client#713
+Patch0: py310-ignore-deprecation.patch
+BuildRequires: %{python_module base >= 3.7}
BuildRequires: %{python_module hatchling}
BuildRequires: %{python_module pip}
BuildRequires: fdupes
@@ -46,7 +46,7 @@
Requires: python-nest-asyncio >= 1.5.4
Requires: python-python-dateutil >= 2.8.2
Requires: python-pyzmq >= 23.0
-Requires: python-tornado >= 6.0
+Requires: python-tornado >= 6.2
Requires: python-traitlets
Provides: python-jupyter_client = %{version}
Obsoletes: python-jupyter_client < %{version}
++++++ jupyter_client-7.3.4.tar.gz -> jupyter_client-7.4.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_client-7.3.4/.github/workflows/check-release.yml
new/jupyter_client-7.4.8/.github/workflows/check-release.yml
--- old/jupyter_client-7.3.4/.github/workflows/check-release.yml
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/.github/workflows/check-release.yml
2020-02-02 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
name: Check Release
on:
push:
- branches: ["main"]
+ branches: ["7.x"]
pull_request:
concurrency:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_client-7.3.4/.github/workflows/downstream.yml
new/jupyter_client-7.4.8/.github/workflows/downstream.yml
--- old/jupyter_client-7.3.4/.github/workflows/downstream.yml 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/.github/workflows/downstream.yml 2020-02-02
01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
on:
push:
- branches: ["main"]
+ branches: ["7.x"]
pull_request:
concurrency:
@@ -76,7 +76,6 @@
git clone https://github.com/jupyter/jupyter_kernel_test.git
cd jupyter_kernel_test
conda env update --name jupyter_kernel_test --file environment.yml
- conda install -c conda-forge xeus-cling
pip install -e ".[test]"
python -m unittest -v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/.github/workflows/main.yml
new/jupyter_client-7.4.8/.github/workflows/main.yml
--- old/jupyter_client-7.3.4/.github/workflows/main.yml 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/.github/workflows/main.yml 2020-02-02
01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
on:
push:
- branches: ["main"]
+ branches: ["7.x"]
pull_request:
concurrency:
@@ -50,6 +50,8 @@
python-version: "3.9"
- os: ubuntu-latest
python-version: "pypy-3.8"
+ - os: ubuntu-latest
+ python-version: "3.11"
- os: macos-latest
python-version: "3.8"
@@ -130,7 +132,7 @@
pip check
- name: Run the tests
run: |
- pytest -vv jupyter_client || pytest -vv jupyter_client --lf
+ pytest -vv -W default jupyter_client || pytest -vv -W default
jupyter_client --lf
make_sdist:
name: Make SDist
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/.pre-commit-config.yaml
new/jupyter_client-7.4.8/.pre-commit-config.yaml
--- old/jupyter_client-7.3.4/.pre-commit-config.yaml 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/.pre-commit-config.yaml 2020-02-02
01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.2.0
+ rev: v4.3.0
hooks:
- id: end-of-file-fixer
- id: check-case-conflict
@@ -16,42 +16,38 @@
- id: trailing-whitespace
- repo: https://github.com/asottile/reorder_python_imports
- rev: v3.1.0
+ rev: v3.8.2
hooks:
- id: reorder-python-imports
- repo: https://github.com/psf/black
- rev: 22.3.0
+ rev: 22.6.0
hooks:
- id: black
args: ["--line-length", "100"]
- repo: https://github.com/pre-commit/mirrors-prettier
- rev: v2.6.2
+ rev: v3.0.0-alpha.0
hooks:
- id: prettier
- repo: https://github.com/PyCQA/doc8
- rev: 0.11.2
+ rev: v1.0.0
hooks:
- id: doc8
args: [--max-line-length=200]
stages: [manual]
- repo: https://github.com/pycqa/flake8
- rev: 4.0.1
+ rev: 5.0.4
hooks:
- id: flake8
additional_dependencies:
- [
- "flake8-bugbear==20.1.4",
- "flake8-logging-format==0.6.0",
- "flake8-implicit-str-concat==0.2.0",
- ]
+ ["flake8-bugbear==22.6.22", "flake8-implicit-str-concat==0.2.0"]
stages: [manual]
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v0.960
+ rev: v0.971
hooks:
- id: mypy
exclude: jupyter_client/tests
@@ -60,13 +56,13 @@
stages: [manual]
- repo: https://github.com/PyCQA/doc8
- rev: 0.11.2
+ rev: v1.0.0
hooks:
- id: doc8
args: [--max-line-length=100]
- repo: https://github.com/sirosen/check-jsonschema
- rev: 0.16.0
+ rev: 0.17.1
hooks:
- id: check-jsonschema
name: "Check GitHub Workflows"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/CHANGELOG.md
new/jupyter_client-7.4.8/CHANGELOG.md
--- old/jupyter_client-7.3.4/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
+++ new/jupyter_client-7.4.8/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
@@ -2,6 +2,167 @@
<!-- <START NEW CHANGELOG ENTRY> -->
+## 7.4.8
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.7...beac94baac163015e8165fde5661aaf026e92364))
+
+### Bugs fixed
+
+- Make sure loop is marked with nest_asyncio
[#893](https://github.com/jupyter/jupyter_client/pull/893)
([@impact27](https://github.com/impact27))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-11-16&to=2022-12-05&type=c))
+
+[@arogozhnikov](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Aarogozhnikov+updated%3A2022-11-16..2022-12-05&type=Issues)
|
[@impact27](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Aimpact27+updated%3A2022-11-16..2022-12-05&type=Issues)
|
[@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Akevin-bates+updated%3A2022-11-16..2022-12-05&type=Issues)
+
+<!-- <END NEW CHANGELOG ENTRY> -->
+
+## 7.4.7
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.6...56df36b535710d2c247a2749deec456c75191af5))
+
+### Bugs fixed
+
+- Fix connection reconciliation to handle restarts
[#882](https://github.com/jupyter/jupyter_client/pull/882)
([@kevin-bates](https://github.com/kevin-bates))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-11-15&to=2022-11-16&type=c))
+
+[@meeseeksmachine](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ameeseeksmachine+updated%3A2022-11-15..2022-11-16&type=Issues)
+
+## 7.4.6
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.5...3394591f161be4a19f9e61c66ba510d7e29afd59))
+
+### Bugs fixed
+
+- Reconcile connection information
[#879](https://github.com/jupyter/jupyter_client/pull/879)
([@kevin-bates](https://github.com/kevin-bates))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-11-10&to=2022-11-15&type=c))
+
+[@meeseeksmachine](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ameeseeksmachine+updated%3A2022-11-10..2022-11-15&type=Issues)
+
+## 7.4.5
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.4...d27c8a497c6cbb1a232fbbe75cb1fd0f53faa9b0))
+
+### Maintenance and upkeep improvements
+
+- \[7.x\] Handle Jupyter Core Warning
[#875](https://github.com/jupyter/jupyter_client/pull/875)
([@blink1073](https://github.com/blink1073))
+- Clean up 7.x workflows
[#865](https://github.com/jupyter/jupyter_client/pull/865)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-10-25&to=2022-11-10&type=c))
+
+[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ablink1073+updated%3A2022-10-25..2022-11-10&type=Issues)
+
+## 7.4.4
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.3...4029f6cad9223b1287980a1f0e966ff66557386e))
+
+### Bugs fixed
+
+- Workaround for launch bug
[#861](https://github.com/jupyter/jupyter_client/pull/861)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-10-19&to=2022-10-25&type=c))
+
+[@meeseeksmachine](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ameeseeksmachine+updated%3A2022-10-19..2022-10-25&type=Issues)
+
+## 7.4.3
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.2...aa549b27d3622b1c381275777785f84dd3d5253d))
+
+### Bugs fixed
+
+- Defer creation of ready future
[#858](https://github.com/jupyter/jupyter_client/pull/858)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-10-11&to=2022-10-19&type=c))
+
+[@meeseeksmachine](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ameeseeksmachine+updated%3A2022-10-11..2022-10-19&type=Issues)
+
+## 7.4.2
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.1...0a45cc41e4ce73911e4367eddc1f0001a8431fc0))
+
+### Bugs fixed
+
+- Fix ready promise and session send
[#852](https://github.com/jupyter/jupyter_client/pull/852)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-10-11&to=2022-10-11&type=c))
+
+[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ablink1073+updated%3A2022-10-11..2022-10-11&type=Issues)
+
+## 7.4.1
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.4.0...0d87835d82d485aa3e870a63e76768bf439c3fe4))
+
+### Bugs fixed
+
+- Revert "Backport PR #845: Fix pending kernels again"
[#851](https://github.com/jupyter/jupyter_client/pull/851)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-10-11&to=2022-10-11&type=c))
+
+[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ablink1073+updated%3A2022-10-11..2022-10-11&type=Issues)
+
+## 7.4.0
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.3.5...3c0107f72e65363e8dfc99d7801a7de048e5f071))
+
+### Bugs fixed
+
+- Backport PR #845: Fix pending kernels again
[#848](https://github.com/jupyter/jupyter_client/pull/848)
([@blink1073](https://github.com/blink1073))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-08-25&to=2022-10-11&type=c))
+
+[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ablink1073+updated%3A2022-08-25..2022-10-11&type=Issues)
|
[@ccordoba12](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Accordoba12+updated%3A2022-08-25..2022-10-11&type=Issues)
|
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Adavidbrochart+updated%3A2022-08-25..2022-10-11&type=Issues)
|
[@minrk](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Aminrk+updated%3A2022-08-25..2022-10-11&type=Issues)
|
[@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3AZsailer+updated%3A2022-08-25..2022-10-11&type=Issues)
+
+## 7.3.5
+
+([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.3.4...bc5ded5439ca55bd6740885eb3a44ca6bc3e2243))
+
+### Enhancements made
+
+- add `AsyncKernelClient` to `doc/api/client.rst`
[#819](https://github.com/jupyter/jupyter_client/pull/819)
([@helioz11](https://github.com/helioz11))
+
+### Bugs fixed
+
+- Use tornado 6.2's PeriodicCallback in restarter
[#822](https://github.com/jupyter/jupyter_client/pull/822)
([@vidartf](https://github.com/vidartf))
+- Make \_stdin_hook_default async
[#814](https://github.com/jupyter/jupyter_client/pull/814)
([@davidbrochart](https://github.com/davidbrochart))
+
+### Maintenance and upkeep improvements
+
+- [pre-commit.ci] pre-commit autoupdate
[#824](https://github.com/jupyter/jupyter_client/pull/824)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#821](https://github.com/jupyter/jupyter_client/pull/821)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#820](https://github.com/jupyter/jupyter_client/pull/820)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#818](https://github.com/jupyter/jupyter_client/pull/818)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#816](https://github.com/jupyter/jupyter_client/pull/816)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#815](https://github.com/jupyter/jupyter_client/pull/815)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#812](https://github.com/jupyter/jupyter_client/pull/812)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#810](https://github.com/jupyter/jupyter_client/pull/810)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#809](https://github.com/jupyter/jupyter_client/pull/809)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+- [pre-commit.ci] pre-commit autoupdate
[#807](https://github.com/jupyter/jupyter_client/pull/807)
([@pre-commit-ci](https://github.com/pre-commit-ci))
+
+### Contributors to this release
+
+([GitHub contributors page for this
release](https://github.com/jupyter/jupyter_client/graphs/contributors?from=2022-06-08&to=2022-08-25&type=c))
+
+[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ablink1073+updated%3A2022-06-08..2022-08-25&type=Issues)
|
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Adavidbrochart+updated%3A2022-06-08..2022-08-25&type=Issues)
|
[@helioz11](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ahelioz11+updated%3A2022-06-08..2022-08-25&type=Issues)
|
[@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Apre-commit-ci+updated%3A2022-06-08..2022-08-25&type=Issues)
|
[@vidartf](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Avidartf+updated%3A2022-06-08..2022-08-25&type=Issues)
+
## 7.3.4
([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.3.3...ca4cb2d6a4b95a6925de85a47b323d2235032c74))
@@ -21,8 +182,6 @@
[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Ablink1073+updated%3A2022-06-07..2022-06-08&type=Issues)
|
[@ccordoba12](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Accordoba12+updated%3A2022-06-07..2022-06-08&type=Issues)
|
[@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fjupyter_client+involves%3Apre-commit-ci+updated%3A2022-06-07..2022-06-08&type=Issues)
-<!-- <END NEW CHANGELOG ENTRY> -->
-
## 7.3.3
([Full
Changelog](https://github.com/jupyter/jupyter_client/compare/v7.3.2...37ca37d865db260e7da6fa85339be450d6fd3c3c))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/PKG-INFO
new/jupyter_client-7.4.8/PKG-INFO
--- old/jupyter_client-7.3.4/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
-Name: jupyter-client
-Version: 7.3.4
+Name: jupyter_client
+Version: 7.4.8
Summary: Jupyter protocol implementation and client libraries
Project-URL: Homepage, https://jupyter.org
Author-email: Jupyter Development Team <[email protected]>
@@ -64,6 +64,7 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
+License-File: COPYING.md
Keywords: Interactive,Interpreter,Shell,Web
Classifier: Framework :: Jupyter
Classifier: Intended Audience :: Developers
@@ -74,17 +75,17 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
Requires-Python: >=3.7
Requires-Dist: entrypoints
Requires-Dist: jupyter-core>=4.9.2
Requires-Dist: nest-asyncio>=1.5.4
Requires-Dist: python-dateutil>=2.8.2
Requires-Dist: pyzmq>=23.0
-Requires-Dist: tornado>=6.0
+Requires-Dist: tornado>=6.2
Requires-Dist: traitlets
Provides-Extra: doc
Requires-Dist: ipykernel; extra == 'doc'
@@ -95,7 +96,7 @@
Provides-Extra: test
Requires-Dist: codecov; extra == 'test'
Requires-Dist: coverage; extra == 'test'
-Requires-Dist: ipykernel>=6.5; extra == 'test'
+Requires-Dist: ipykernel>=6.12; extra == 'test'
Requires-Dist: ipython; extra == 'test'
Requires-Dist: mypy; extra == 'test'
Requires-Dist: pre-commit; extra == 'test'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/docs/api/client.rst
new/jupyter_client-7.4.8/docs/api/client.rst
--- old/jupyter_client-7.3.4/docs/api/client.rst 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/docs/api/client.rst 2020-02-02
01:00:00.000000000 +0100
@@ -35,3 +35,19 @@
.. autoclass:: BlockingKernelClient
.. automethod:: execute_interactive
+
+ .. automethod:: get_shell_msg
+
+ .. automethod:: get_iopub_msg
+
+ .. automethod:: get_stdin_msg
+
+ .. automethod:: get_control_msg
+
+ .. automethod:: wait_for_ready
+
+ .. automethod:: is_alive
+
+.. autoclass:: AsyncKernelClient
+
+ :class:`AsyncKernelClient` is identical to :class:`BlockingKernelClient`
but the methods described above are async.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/jupyter_client/_version.py
new/jupyter_client-7.4.8/jupyter_client/_version.py
--- old/jupyter_client-7.3.4/jupyter_client/_version.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/_version.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
from typing import List
from typing import Union
-__version__ = "7.3.4"
+__version__ = "7.4.8"
# 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/jupyter_client-7.3.4/jupyter_client/client.py
new/jupyter_client-7.4.8/jupyter_client/client.py
--- old/jupyter_client-7.3.4/jupyter_client/client.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/client.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,6 +2,7 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import asyncio
+import inspect
import sys
import time
import typing as t
@@ -232,7 +233,7 @@
continue
return reply
- def _stdin_hook_default(self, msg: t.Dict[str, t.Any]) -> None:
+ async def _stdin_hook_default(self, msg: t.Dict[str, t.Any]) -> None:
"""Handle an input request"""
content = msg["content"]
if content.get("password", False):
@@ -251,7 +252,7 @@
# only send stdin reply if there *was not* another request
# or execution finished while we were reading.
- if not (self.stdin_channel.msg_ready() or
self.shell_channel.msg_ready()):
+ if not (await self.stdin_channel.msg_ready() or await
self.shell_channel.msg_ready()):
self.input(raw_data)
def _output_hook_default(self, msg: t.Dict[str, t.Any]) -> None:
@@ -469,7 +470,7 @@
If not specified, output will be redisplayed.
stdin_hook: callable(msg)
- Function to be called with stdin_request messages.
+ Function or awaitable to be called with stdin_request messages.
If not specified, input/getpass will be called.
Returns
@@ -536,7 +537,9 @@
raise TimeoutError("Timeout waiting for output")
if stdin_socket in events:
req = await self.stdin_channel.get_msg(timeout=0)
- stdin_hook(req)
+ res = stdin_hook(req)
+ if inspect.isawaitable(res):
+ await res
continue
if iopub_socket not in events:
continue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/jupyter_client/connect.py
new/jupyter_client-7.4.8/jupyter_client/connect.py
--- old/jupyter_client-7.3.4/jupyter_client/connect.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/connect.py 2020-02-02
01:00:00.000000000 +0100
@@ -160,7 +160,7 @@
# Only ever write this file as user read/writeable
# This would otherwise introduce a vulnerability as a file has secrets
- # which would let others execute arbitrarily code as you
+ # which would let others execute arbitrary code as you
with secure_write(fname) as f:
f.write(json.dumps(cfg, indent=2))
@@ -567,18 +567,71 @@
if "signature_scheme" in info:
self.session.signature_scheme = info["signature_scheme"]
- def _force_connection_info(self, info: KernelConnectionInfo) -> None:
- """Unconditionally loads connection info from a dict containing
connection info.
+ def _reconcile_connection_info(self, info: KernelConnectionInfo) -> None:
+ """Reconciles the connection information returned from the Provisioner.
- Overwrites connection info-based attributes, regardless of their
current values
- and writes this information to the connection file.
+ Because some provisioners (like derivations of LocalProvisioner) may
have already
+ written the connection file, this method needs to ensure that, if the
connection
+ file exists, its contents match that of what was returned by the
provisioner. If
+ the file does exist and its contents do not match, the file will be
replaced with
+ the provisioner information (which is considered the truth).
+
+ If the file does not exist, the connection information in 'info' is
loaded into the
+ KernelManager and written to the file.
"""
- # Reset current ports to 0 and indicate file has not been written to
enable override
- self._connection_file_written = False
- for name in port_names:
- setattr(self, name, 0)
- self.load_connection_info(info)
- self.write_connection_file()
+ # Prevent over-writing a file that has already been written with the
same
+ # info. This is to prevent a race condition where the process has
+ # already been launched but has not yet read the connection file - as
is
+ # the case with LocalProvisioners.
+ file_exists: bool = False
+ if os.path.exists(self.connection_file):
+ with open(self.connection_file) as f:
+ file_info = json.load(f)
+ # Prior to the following comparison, we need to adjust the value
of "key" to
+ # be bytes, otherwise the comparison below will fail.
+ file_info["key"] = file_info["key"].encode()
+ if not self._equal_connections(info, file_info):
+ os.remove(self.connection_file) # Contents mismatch - remove
the file
+ self._connection_file_written = False
+ else:
+ file_exists = True
+
+ if not file_exists:
+ # Load the connection info and write out file, clearing existing
+ # port-based attributes so they will be reloaded
+ for name in port_names:
+ setattr(self, name, 0)
+ self.load_connection_info(info)
+ self.write_connection_file()
+
+ # Ensure what is in KernelManager is what we expect.
+ km_info = self.get_connection_info()
+ if not self._equal_connections(info, km_info):
+ raise ValueError(
+ "KernelManager's connection information already exists and
does not match "
+ "the expected values returned from provisioner!"
+ )
+
+ @staticmethod
+ def _equal_connections(conn1: KernelConnectionInfo, conn2:
KernelConnectionInfo) -> bool:
+ """Compares pertinent keys of connection info data. Returns True if
equivalent, False otherwise."""
+
+ pertinent_keys = [
+ "key",
+ "ip",
+ "stdin_port",
+ "iopub_port",
+ "shell_port",
+ "control_port",
+ "hb_port",
+ "transport",
+ "signature_scheme",
+ ]
+
+ for key in pertinent_keys:
+ if conn1.get(key) != conn2.get(key):
+ return False
+ return True
#
--------------------------------------------------------------------------
# Creating connected sockets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_client-7.3.4/jupyter_client/ioloop/restarter.py
new/jupyter_client-7.4.8/jupyter_client/ioloop/restarter.py
--- old/jupyter_client-7.3.4/jupyter_client/ioloop/restarter.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/ioloop/restarter.py 2020-02-02
01:00:00.000000000 +0100
@@ -5,15 +5,12 @@
"""
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
-import asyncio
import time
import warnings
from traitlets import Instance
-from zmq.eventloop import ioloop
from jupyter_client.restarter import KernelRestarter
-from jupyter_client.utils import run_sync
class IOLoopKernelRestarter(KernelRestarter):
@@ -27,6 +24,8 @@
DeprecationWarning,
stacklevel=4,
)
+ from zmq.eventloop import ioloop
+
return ioloop.IOLoop.current()
_pcallback = None
@@ -34,12 +33,10 @@
def start(self):
"""Start the polling of the kernel."""
if self._pcallback is None:
- if asyncio.iscoroutinefunction(self.poll):
- cb = run_sync(self.poll)
- else:
- cb = self.poll
- self._pcallback = ioloop.PeriodicCallback(
- cb,
+ from tornado.ioloop import PeriodicCallback
+
+ self._pcallback = PeriodicCallback(
+ self.poll,
1000 * self.time_to_dead,
)
self._pcallback.start()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/jupyter_client/manager.py
new/jupyter_client-7.4.8/jupyter_client/manager.py
--- old/jupyter_client-7.3.4/jupyter_client/manager.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/manager.py 2020-02-02
01:00:00.000000000 +0100
@@ -55,6 +55,16 @@
F = t.TypeVar('F', bound=t.Callable[..., t.Any])
+def _get_future() -> t.Union[Future, CFuture]:
+ """Get an appropriate Future object"""
+ try:
+ asyncio.get_running_loop()
+ return Future()
+ except RuntimeError:
+ # No event loop running, use concurrent future
+ return CFuture()
+
+
def in_pending_state(method: F) -> F:
"""Sets the kernel to a pending state by
creating a fresh Future for the KernelManager's `ready`
@@ -65,11 +75,8 @@
@functools.wraps(method)
async def wrapper(self, *args, **kwargs):
# Create a future for the decorated method
- try:
- self._ready = Future()
- except RuntimeError:
- # No event loop running, use concurrent future
- self._ready = CFuture()
+ if self._attempted_start or not self._ready:
+ self._ready = _get_future()
try:
# call wrapped method, await, and set the result or exception.
out = await method(self, *args, **kwargs)
@@ -91,18 +98,13 @@
This version starts kernels with Popen.
"""
- _ready: t.Union[Future, CFuture]
+ _ready: t.Optional[t.Union[Future, CFuture]]
def __init__(self, *args, **kwargs):
super().__init__(**kwargs)
self._shutdown_status = _ShutdownStatus.Unset
- # Create a place holder future.
- try:
- asyncio.get_running_loop()
- self._ready = Future()
- except RuntimeError:
- # No event loop running, use concurrent future
- self._ready = CFuture()
+ self._attempted_start = False
+ self._ready = None
_created_context: Bool = Bool(False)
@@ -187,6 +189,8 @@
@property
def ready(self) -> t.Union[CFuture, Future]:
"""A future that resolves when the kernel process has started for the
first time"""
+ if not self._ready:
+ self._ready = _get_future()
return self._ready
@property
@@ -306,8 +310,9 @@
assert self.provisioner is not None
connection_info = await self.provisioner.launch_kernel(kernel_cmd,
**kw)
assert self.provisioner.has_process
- # Provisioner provides the connection information. Load into kernel
manager and write file.
- self._force_connection_info(connection_info)
+ # Provisioner provides the connection information. Load into kernel
manager
+ # and write the connection file, if not already done.
+ self._reconcile_connection_info(connection_info)
_launch_kernel = run_sync(_async_launch_kernel)
@@ -382,6 +387,7 @@
keyword arguments that are passed down to build the kernel_cmd
and launching the kernel (e.g. Popen kwargs).
"""
+ self._attempted_start = True
kernel_cmd, kw = await ensure_async(self.pre_start_kernel(**kw))
# launch the kernel subprocess
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/jupyter_client/session.py
new/jupyter_client-7.4.8/jupyter_client/session.py
--- old/jupyter_client-7.3.4/jupyter_client/session.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/session.py 2020-02-02
01:00:00.000000000 +0100
@@ -29,7 +29,7 @@
from typing import Optional
from typing import Union
-import zmq
+import zmq.asyncio
from traitlets import Any
from traitlets import Bool
from traitlets import CBytes
@@ -807,6 +807,10 @@
# ZMQStreams and dummy sockets do not support tracking.
track = False
+ if isinstance(stream, zmq.asyncio.Socket):
+ assert stream is not None
+ stream = zmq.Socket.shadow(stream.underlying)
+
if isinstance(msg_or_type, (Message, dict)):
# We got a Message or message dict, not a msg_type so don't
# build a new Message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_client-7.3.4/jupyter_client/tests/test_connect.py
new/jupyter_client-7.4.8/jupyter_client/tests/test_connect.py
--- old/jupyter_client-7.3.4/jupyter_client/tests/test_connect.py
2020-02-02 01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/tests/test_connect.py
2020-02-02 01:00:00.000000000 +0100
@@ -5,11 +5,13 @@
import os
from tempfile import TemporaryDirectory
+import pytest
from jupyter_core.application import JupyterApp
from jupyter_core.paths import jupyter_runtime_dir
from jupyter_client import connect
from jupyter_client import KernelClient
+from jupyter_client import KernelManager
from jupyter_client.consoleapp import JupyterConsoleApp
from jupyter_client.session import Session
@@ -235,3 +237,59 @@
assert not os.path.exists(filename)
for name in dc._random_port_names:
assert getattr(dc, name) == 0
+
+
+param_values = [
+ (True, True),
+ (True, False),
+ (False, True),
+ (False, False),
+]
+
+
[email protected]("file_exists, km_matches", param_values)
+def test_reconcile_connection_info(file_exists, km_matches):
+
+ expected_info = sample_info
+ mismatched_info = sample_info.copy()
+ mismatched_info["key"] = b"def456"
+ mismatched_info["shell_port"] = expected_info["shell_port"] + 42
+ mismatched_info["control_port"] = expected_info["control_port"] + 42
+
+ with TemporaryDirectory() as connection_dir:
+
+ cf = os.path.join(connection_dir, "kernel.json")
+ km = KernelManager()
+ km.connection_file = cf
+
+ if file_exists:
+ _, info = connect.write_connection_file(cf, **expected_info)
+ info["key"] = info["key"].encode() # set 'key' back to bytes
+
+ if km_matches:
+ # Let this be the case where the connection file exists, and
the KM has matching
+ # values prior to reconciliation. This is the
LocalProvisioner case.
+ provisioner_info = info
+ km.load_connection_info(provisioner_info)
+ else:
+ # Let this be the case where the connection file exists, and
the KM has those values
+ # that differ from the ones returned by the provisioner. This
is the restart-with-
+ # changed-ports case (typical for remote provisioners).
+ km.load_connection_info(expected_info)
+ provisioner_info = mismatched_info
+ else: # connection file does not exist
+ if km_matches:
+ # Let this be the case where the connection file does not
exist, NOR does the KM
+ # have any values of its own and reconciliation sets those
values. This is the
+ # non-LocalProvisioner case.
+ provisioner_info = expected_info
+ else:
+ # Let this be the case where the connection file does not
exist, yet the KM
+ # has values that do not match those returned from the
provisioner. This case
+ # is probably not practical and is equivalent to the True,
False case.
+ km.load_connection_info(expected_info)
+ provisioner_info = mismatched_info
+
+ km._reconcile_connection_info(provisioner_info)
+ km_info = km.get_connection_info()
+ assert km._equal_connections(km_info, provisioner_info)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/jupyter_client/threaded.py
new/jupyter_client-7.4.8/jupyter_client/threaded.py
--- old/jupyter_client-7.3.4/jupyter_client/threaded.py 2020-02-02
01:00:00.000000000 +0100
+++ new/jupyter_client-7.4.8/jupyter_client/threaded.py 2020-02-02
01:00:00.000000000 +0100
@@ -14,6 +14,7 @@
from typing import Optional
from typing import Union
+import nest_asyncio # type:ignore
import zmq
from traitlets import Instance
from traitlets import Type
@@ -211,6 +212,7 @@
"""Run my loop, ignoring EINTR events in the poller"""
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
+ nest_asyncio.apply(loop)
self.ioloop = ioloop.IOLoop()
self.ioloop._asyncio_event_loop = loop
# signal that self.ioloop is defined
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_client-7.3.4/pyproject.toml
new/jupyter_client-7.4.8/pyproject.toml
--- old/jupyter_client-7.3.4/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
+++ new/jupyter_client-7.4.8/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
@@ -4,7 +4,7 @@
[project]
name = "jupyter_client"
-version = "7.3.4"
+version = "7.4.8"
description = "Jupyter protocol implementation and client libraries"
keywords = [ "Interactive", "Interpreter", "Shell", "Web",]
classifiers = [
@@ -29,7 +29,7 @@
"nest-asyncio>=1.5.4",
"python-dateutil>=2.8.2",
"pyzmq>=23.0",
- "tornado>=6.0",
+ "tornado>=6.2",
"traitlets",
]
@@ -51,7 +51,7 @@
test = [
"codecov",
"coverage",
- "ipykernel>=6.5",
+ "ipykernel>=6.12",
"ipython",
"mypy",
"pre-commit",
@@ -93,7 +93,7 @@
ignore = [".mailmap", "*.yml", "*.yaml"]
[tool.tbump.version]
-current = "7.3.4"
+current = "7.4.8"
regex = '''
(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
((?P<channel>a|b|rc|.dev)(?P<release>\d+))?
@@ -135,6 +135,9 @@
# We could eventually find a way to make sure these are only created
# when there is a running event loop.
"ignore:There is no current event loop:DeprecationWarning:zmq",
+
+ # Workaround for jupyter_core warning.
+ "module:Jupyter is migrating its paths to use standard
platformdirs:DeprecationWarning",
]
[tool.mypy]
++++++ py310-ignore-deprecation.patch ++++++
Index: jupyter_client-7.4.8/pyproject.toml
===================================================================
--- jupyter_client-7.4.8.orig/pyproject.toml
+++ jupyter_client-7.4.8/pyproject.toml
@@ -136,6 +136,9 @@ filterwarnings= [
# when there is a running event loop.
"ignore:There is no current event loop:DeprecationWarning:zmq",
+ # https://github.com/jupyter/jupyter_client/issues/713
+ "ignore:There is no current event loop:DeprecationWarning",
+
# Workaround for jupyter_core warning.
"module:Jupyter is migrating its paths to use standard
platformdirs:DeprecationWarning",
]