Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-jupyter_console for 
openSUSE:Factory checked in at 2021-04-15 16:58:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter_console (Old)
 and      /work/SRC/openSUSE:Factory/.python-jupyter_console.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-jupyter_console"

Thu Apr 15 16:58:03 2021 rev:16 rq:885594 version:6.4.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-jupyter_console/python-jupyter_console.changes
    2021-02-15 23:16:56.575453396 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-jupyter_console.new.12324/python-jupyter_console.changes
 2021-04-15 16:58:45.274801256 +0200
@@ -1,0 +2,7 @@
+Wed Apr 14 16:06:32 UTC 2021 - Ben Greiner <[email protected]>
+
+- Update to 6.4.0
+  * no release notes
+- Drop python-jupyter_console-remove-nose.patch merged upstream
+
+-------------------------------------------------------------------

Old:
----
  jupyter_console-6.1.0.tar.gz
  python-jupyter_console-remove-nose.patch

New:
----
  jupyter_console-6.4.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-jupyter_console.spec ++++++
--- /var/tmp/diff_new_pack.PcEee5/_old  2021-04-15 16:58:45.818802118 +0200
+++ /var/tmp/diff_new_pack.PcEee5/_new  2021-04-15 16:58:45.822802124 +0200
@@ -19,14 +19,12 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define         skip_python2 1
 Name:           python-jupyter_console
-Version:        6.1.0
+Version:        6.4.0
 Release:        0
 Summary:        Jupyter terminal console
 License:        BSD-3-Clause
 URL:            https://github.com/jupyter/jupyter_console
 Source0:        
https://files.pythonhosted.org/packages/source/j/jupyter_console/jupyter_console-%{version}.tar.gz
-# https://github.com/jupyter/jupyter_console/pull/230
-Patch0:         python-jupyter_console-remove-nose.patch
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -47,7 +45,7 @@
 Requires:       python-prompt_toolkit >= 2
 Requires:       python-pyzmq
 Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
 Provides:       python-jupyter-console = %{version}-%{release}
 %if "%{python_flavor}" == "python3" || "%{python_provides}" == "python3"
 Provides:       jupyter-jupyter_console = %{version}-%{release}
@@ -64,7 +62,6 @@
 
 %prep
 %setup -q -n jupyter_console-%{version}
-%patch0 -p1
 # always build and install with setuptools: it is needed to get the entrypoint 
gh#jupyter/jupyter_console#222
 sed -i '/import sys/ a import setuptools' setup.py
 

++++++ jupyter_console-6.1.0.tar.gz -> jupyter_console-6.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/.bumpversion.cfg 
new/jupyter_console-6.4.0/.bumpversion.cfg
--- old/jupyter_console-6.1.0/.bumpversion.cfg  1970-01-01 01:00:00.000000000 
+0100
+++ new/jupyter_console-6.4.0/.bumpversion.cfg  2021-03-24 01:03:14.000000000 
+0100
@@ -0,0 +1,18 @@
+[bumpversion]
+current_version = 6.4.0
+parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(.(?P<suffix>.+))?
+serialize = 
+       {major}.{minor}.{patch}.{suffix}
+       {major}.{minor}.{patch}
+
+[bumpversion:part:suffix]
+optional_value = final
+values = 
+       dev
+       final
+
+[bumpversion:file:jupyter_console/_version.py]
+parse = 
(?P<major>\d+),\s*(?P<minor>\d+),\s*(?P<patch>\d+)(,\s*['"](?P<suffix>\w+)['"])?
+serialize = 
+       {major}, {minor}, {patch}, '{suffix}'
+       {major}, {minor}, {patch}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_console-6.1.0/.github/workflows/python-package.yml 
new/jupyter_console-6.4.0/.github/workflows/python-package.yml
--- old/jupyter_console-6.1.0/.github/workflows/python-package.yml      
1970-01-01 01:00:00.000000000 +0100
+++ new/jupyter_console-6.4.0/.github/workflows/python-package.yml      
2021-03-24 00:58:51.000000000 +0100
@@ -0,0 +1,37 @@
+# This workflow will install Python dependencies, run tests and lint with a 
variety of Python versions
+# For more information see: 
https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
+
+name: Python package
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        python-version: [3.6, 3.7, 3.8]
+
+    steps:
+    - uses: actions/checkout@v2
+    - name: Set up Python ${{ matrix.python-version }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Install dependencies
+      run: |
+        python -m pip install --upgrade pip check-manifest
+        pip install pytest pytest-cov
+        pip install .
+        python -m ipykernel.kernelspec --user
+    - name: Test with pytest
+      run: |
+        pytest --cov jupyter_console
+    - name: Check Manifest
+      run: |
+        check-manifest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/.gitignore 
new/jupyter_console-6.4.0/.gitignore
--- old/jupyter_console-6.1.0/.gitignore        1970-01-01 01:00:00.000000000 
+0100
+++ new/jupyter_console-6.4.0/.gitignore        2021-03-15 16:18:51.000000000 
+0100
@@ -0,0 +1,19 @@
+MANIFEST
+build
+dist
+_build
+docs/gh-pages
+docs/config_options.rst
+*.py[co]
+__pycache__
+*.egg-info
+*~
+*.bak
+.ipynb_checkpoints
+.tox
+.DS_Store
+\#*#
+.#*
+.coverage
+# PyCharm project cache
+.idea
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/.mailmap 
new/jupyter_console-6.4.0/.mailmap
--- old/jupyter_console-6.1.0/.mailmap  1970-01-01 01:00:00.000000000 +0100
+++ new/jupyter_console-6.4.0/.mailmap  2015-05-24 21:45:12.000000000 +0200
@@ -0,0 +1,149 @@
+A. J. Holyoake <[email protected]> ajholyoake <[email protected]>
+Aaron Culich <[email protected]> Aaron Culich <[email protected]>
+Aron Ahmadia <[email protected]> ahmadia <[email protected]>
+Benjamin Ragan-Kelley <[email protected]> <[email protected]>
+Benjamin Ragan-Kelley <[email protected]> Min RK
+Benjamin Ragan-Kelley <[email protected]> MinRK <[email protected]>
+Barry Wark <[email protected]> Barry Wark <barrywarkatgmaildotcom>
+Ben Edwards <[email protected]> Ben Edwards <bedwards@sausage.(none)>
+Bradley M. Froehle <[email protected]> Bradley M. Froehle 
<[email protected]>
+Bradley M. Froehle <[email protected]> Bradley Froehle 
<[email protected]>
+Brandon Parsons <[email protected]> Brandon Parsons 
<[email protected]>
+Brian E. Granger <[email protected]> Brian Granger
+Brian E. Granger <[email protected]> Brian Granger <>
+Brian E. Granger <[email protected]> bgranger <>
+Brian E. Granger <[email protected]> bgranger <bgranger@red>
+Christoph Gohlke <[email protected]> cgohlke <[email protected]>
+Cyrille Rossant <[email protected]> rossant <rossant@github>
+Dami??n Avila <[email protected]> damianavila 
<[email protected]>
+Dami??n Avila <[email protected]> damianavila <[email protected]>
+Damon Allen <[email protected]> damontallen <[email protected]>
+Darren Dale <[email protected]> darren.dale <>
+Darren Dale <[email protected]> Darren Dale <>
+Dav Clark <[email protected]> Dav Clark <>
+Dav Clark <[email protected]> Dav Clark <[email protected]>
+David Hirschfeld <[email protected]> dhirschfeld 
<[email protected]>
+David P. Sanders <[email protected]> David P. Sanders 
<[email protected]>
+David Warde-Farley <[email protected]> David Warde-Farley <>
+Doug Blank <[email protected]> Doug Blank <[email protected]>
+Eugene Van den Bulke <[email protected]> Eugene Van den Bulke 
<[email protected]> 
+Evan Patterson <[email protected]> 
<[email protected]>
+Evan Patterson <[email protected]> <[email protected]>
+Evan Patterson <[email protected]> <[email protected]>
+Evan Patterson <[email protected]> <[email protected]>
+Evan Patterson <[email protected]> epatters <[email protected]>
+Evan Patterson <[email protected]> epatters <[email protected]>
+Ernie French <[email protected]> Ernie French <[email protected]>
+Ernie French <[email protected]> ernie french <[email protected]>
+Ernie French <[email protected]> ernop <[email protected]>
+Fernando Perez <[email protected]> <[email protected]>
+Fernando Perez <[email protected]> Fernando Perez 
<[email protected]>
+Fernando Perez <[email protected]> fperez <>
+Fernando Perez <[email protected]> fptest <>
+Fernando Perez <[email protected]> fptest1 <>
+Fernando Perez <[email protected]> Fernando Perez 
<[email protected]>
+Fernando Perez <[email protected]> Fernando Perez <>
+Fernando Perez <[email protected]> Fernando Perez <fperez@maqroll>
+Frank Murphy <[email protected]> Frank Murphy <[email protected]>
+Gabriel Becker <[email protected]> gmbecker <[email protected]>
+Gael Varoquaux <[email protected]> gael.varoquaux <>
+Gael Varoquaux <[email protected]> gvaroquaux 
<gvaroquaux@gvaroquaux-desktop>
+Gael Varoquaux <[email protected]> Gael Varoquaux <>
+Ingolf Becker <[email protected]> watercrossing 
<[email protected]>
+Jake Vanderplas <[email protected]> Jake Vanderplas 
<[email protected]>
+Jakob Gager <[email protected]> jakobgager <[email protected]>
+Jakob Gager <[email protected]> jakobgager <[email protected]>
+Jakob Gager <[email protected]> jakobgager <[email protected]>
+Jason Grout <[email protected]> <[email protected]>
+Jason Grout <[email protected]> <[email protected]>
+Jason Gors <[email protected]> jason gors <[email protected]>
+Jason Gors <[email protected]> jgors <[email protected]>
+Jens Hedegaard Nielsen <[email protected]> Jens Hedegaard Nielsen 
<jhn@jhn-Znote.(none)>
+Jens Hedegaard Nielsen <[email protected]> Jens H Nielsen 
<[email protected]>
+Jens Hedegaard Nielsen <[email protected]> Jens H. Nielsen 
<[email protected]>
+Jez Ng <[email protected]> Jez Ng <[email protected]>
+Jonathan Frederic <[email protected]> Jonathan Frederic 
<jonathan@LifebookMint.(none)>
+Jonathan Frederic <[email protected]> Jonathan Frederic 
<[email protected]>
+Jonathan Frederic <[email protected]> Jonathan Frederic 
<[email protected]>
+Jonathan Frederic <[email protected]> jon <[email protected]>
+Jonathan Frederic <[email protected]> U-Jon-PC\Jon <Jon@Jon-PC.(none)>
+Jonathan March <[email protected]> Jonathan March <[email protected]>
+Jonathan March <[email protected]> jdmarch <[email protected]>
+J??rgen Stenarson <[email protected]> J??rgen Stenarson 
<[email protected]>
+J??rgen Stenarson <[email protected]> Jorgen Stenarson 
<[email protected]>
+J??rgen Stenarson <[email protected]> Jorgen Stenarson <>
+J??rgen Stenarson <[email protected]> jstenar 
<[email protected]>
+J??rgen Stenarson <[email protected]> jstenar <>
+J??rgen Stenarson <[email protected]> J????rgen Stenarson 
<[email protected]>
+Juergen Hasch <[email protected]> juhasch <[email protected]>
+Juergen Hasch <[email protected]> juhasch <[email protected]>
+Julia Evans <[email protected]> Julia Evans <[email protected]>
+Kester Tong <[email protected]> KesterTong <[email protected]>
+Kyle Kelley <[email protected]> Kyle Kelley <[email protected]>
+Kyle Kelley <[email protected]> rgbkrk <[email protected]>
+Laurent Dufr??chou <[email protected]> <[email protected]>
+Laurent Dufr??chou <[email protected]> <laurent@Pep>
+Laurent Dufr??chou <[email protected]> laurent dufrechou <>
+Laurent Dufr??chou <[email protected]> laurent.dufrechou <>
+Laurent Dufr??chou <[email protected]> Laurent Dufrechou <>
+Laurent Dufr??chou <[email protected]> [email protected] <>
+Laurent Dufr??chou <[email protected]> ldufrechou <ldufrechou@PEP>
+Lorena Pantano <[email protected]> Lorena <[email protected]>
+Luis Pedro Coelho <[email protected]> Luis Pedro Coelho <[email protected]>
+Marc Molla <[email protected]> marcmolla <[email protected]>
+Mart??n Gait??n <[email protected]> Mart??n Gait??n <[email protected]>
+Matthias Bussonnier <[email protected]> Matthias BUSSONNIER 
<[email protected]>
+Matthias Bussonnier <[email protected]> Bussonnier Matthias 
<[email protected]>
+Matthias Bussonnier <[email protected]> Matthias BUSSONNIER 
<[email protected]>
+Matthias Bussonnier <[email protected]> Matthias Bussonnier 
<carreau@Aspire.(none)>
+Michael Droettboom <[email protected]> Michael Droettboom <[email protected]>
+Nicholas Bollweg <[email protected]> Nicholas Bollweg (Nick) 
<[email protected]>
+Nicolas Rougier <[email protected]> <[email protected]>
+Nikolay Koldunov <[email protected]> Nikolay Koldunov 
<[email protected]>
+Omar Andr??s Zapata Mesa <[email protected]> Omar Andres Zapata Mesa 
<[email protected]>
+Omar Andr??s Zapata Mesa <[email protected]> Omar Andres Zapata Mesa 
<omazapa@tuxhome>
+Pankaj Pandey <[email protected]> Pankaj Pandey <[email protected]>
+Pascal Schetelat <[email protected]> pascal-schetelat 
<[email protected]>
+Paul Ivanov <[email protected]> Paul Ivanov <[email protected]>
+Pauli Virtanen <[email protected]> Pauli Virtanen <>
+Pauli Virtanen <[email protected]> Pauli Virtanen <[email protected]>
+Pierre Gerold <[email protected]> Pierre Gerold <[email protected]>
+Pietro Berkes <[email protected]> Pietro Berkes 
<[email protected]>
+Piti Ongmongkolkul <[email protected]> piti118 <[email protected]>
+Prabhu Ramachandran <[email protected]> Prabhu Ramachandran <>
+Puneeth Chaganti <[email protected]> Puneeth Chaganti 
<[email protected]>
+Robert Kern <[email protected]> rkern <>
+Robert Kern <[email protected]> Robert Kern <[email protected]>
+Robert Kern <[email protected]> Robert Kern <[email protected]>
+Robert Kern <[email protected]> Robert Kern <>
+Robert Marchman <[email protected]> Robert Marchman 
<[email protected]>
+Satrajit Ghosh <[email protected]> Satrajit Ghosh <[email protected]>
+Satrajit Ghosh <[email protected]> Satrajit Ghosh <[email protected]>
+Scott Sanderson <[email protected]> Scott Sanderson 
<[email protected]>
+smithj1 <[email protected]> smithj1 <[email protected]>
+smithj1 <[email protected]> smithj1 <[email protected]>
+Steven Johnson <[email protected]> stevenJohnson 
<[email protected]>
+Steven Silvester <[email protected]> blink1073 
<[email protected]>
+S. Weber <[email protected]> s8weber <[email protected]>
+Stefan van der Walt <[email protected]> Stefan van der Walt <[email protected]>
+Silvia Vinyes <[email protected]> Silvia <silvia@silvia-U44SG.(none)>
+Silvia Vinyes <[email protected]> silviav12 <[email protected]>
+Sylvain Corlay <[email protected]> <[email protected]>
+Sylvain Corlay <[email protected]> sylvain.corlay 
<[email protected]>
+Ted Drain <[email protected]> TD22057 <[email protected]>
+Th??ophile Studer <[email protected]> Th??ophile Studer 
<[email protected]>
+Thomas Kluyver <[email protected]> Thomas <[email protected]>
+Thomas Spura <[email protected]> Thomas Spura <[email protected]>
+Timo Paulssen <[email protected]> timo 
<[email protected]>
+vds <vds@VIVIAN> vds2212 <vds2212@VIVIAN>
+vds <vds@VIVIAN> vds <vds@vivian>
+Ville M. Vainio <[email protected]> <vivainio2@WN-W0941>
+Ville M. Vainio <[email protected]> ville <ville@VILLE-PC>
+Ville M. Vainio <[email protected]> ville <ville@ville-desktop>
+Ville M. Vainio <[email protected]> vivainio <>
+Ville M. Vainio <[email protected]> Ville M. Vainio <vivainio@villev>
+Ville M. Vainio <[email protected]> Ville M. Vainio <vivainio@ville_vmw>
+Walter Doerwald <[email protected]> walter.doerwald <>
+Walter Doerwald <[email protected]> Walter Doerwald <>
+W. Trevor King <[email protected]> W. Trevor King <[email protected]>
+Yoval P. <[email protected]> y-p <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/MANIFEST.in 
new/jupyter_console-6.4.0/MANIFEST.in
--- old/jupyter_console-6.1.0/MANIFEST.in       2020-01-16 00:32:32.000000000 
+0100
+++ new/jupyter_console-6.4.0/MANIFEST.in       2021-03-15 16:18:51.000000000 
+0100
@@ -4,6 +4,7 @@
 
 # Documentation
 graft docs
+graft scripts
 exclude docs/\#*
 
 # Examples
@@ -20,3 +21,10 @@
 global-exclude *.pyo
 global-exclude .git
 global-exclude .ipynb_checkpoints
+
+include *.md
+include *.yml
+include .bumpversion.cfg
+include mypy.ini
+include pytest.ini
+include .mailmap
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/PKG-INFO 
new/jupyter_console-6.4.0/PKG-INFO
--- old/jupyter_console-6.1.0/PKG-INFO  2020-01-16 23:11:15.000000000 +0100
+++ new/jupyter_console-6.4.0/PKG-INFO  2021-03-24 01:04:09.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: jupyter_console
-Version: 6.1.0
+Version: 6.4.0
 Summary: Jupyter terminal console
 Home-page: https://jupyter.org
 Author: Jupyter Development Team
@@ -17,5 +17,5 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Requires-Python: >=3.5
+Requires-Python: >=3.6
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/README.md 
new/jupyter_console-6.4.0/README.md
--- old/jupyter_console-6.1.0/README.md 2020-01-16 00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/README.md 2021-03-15 16:18:51.000000000 +0100
@@ -33,6 +33,14 @@
     jupyter kernelspec list
 
 
+### Release build:
+
+```bash
+$ pip install pep517
+$ python -m pep517.build .
+```
+
+
 ## Resources
 - [Project Jupyter website](https://jupyter.org)
 - [Documentation for Jupyter 
Console](https://jupyter-console.readthedocs.io/en/latest/) 
[[PDF](https://media.readthedocs.org/pdf/jupyter-console/latest/jupyter-notebook.pdf)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/RELEASING.md 
new/jupyter_console-6.4.0/RELEASING.md
--- old/jupyter_console-6.1.0/RELEASING.md      1970-01-01 01:00:00.000000000 
+0100
+++ new/jupyter_console-6.4.0/RELEASING.md      2021-03-24 00:41:21.000000000 
+0100
@@ -0,0 +1,36 @@
+# Releasing
+
+## Prerequisites
+
+- Install `bump2version`
+- Install `twine`
+
+## Push to GitHub
+
+Change from patch to minor or major for appropriate version updates.
+
+```bash
+# Commit, test, publish, tag release
+bump2version minor # CHECK FIRST: If the patch version currently set is not 
sufficient
+git commit -am "Prepared <release-id>"
+bump2version suffix  # Remove the .dev
+git commit -am "Generated release <release-id>"
+git tag <release_version_here>
+git push && git push --tags
+```
+
+## Push to PyPI
+
+```bash
+rm -rf dist/*
+rm -rf build/*
+python setup.py sdist bdist_wheel
+# Double check the dist/* files have the right verison (no `.dev`) and install 
the wheel to ensure it's good
+pip install dist/*
+twine upload dist/*
+```
+
+## Prep repo for development
+
+- `bumpversion patch # Resets the patch and dev versions`
+- `git commit -am "Resumed patch dev"; git push`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/docs/index.rst 
new/jupyter_console-6.4.0/docs/index.rst
--- old/jupyter_console-6.1.0/docs/index.rst    2020-01-16 00:32:32.000000000 
+0100
+++ new/jupyter_console-6.4.0/docs/index.rst    2021-03-15 16:18:51.000000000 
+0100
@@ -4,11 +4,11 @@
 The Jupyter console is a terminal frontend for kernels using the Jupyter 
protocol.
 The console can be installed with::
 
-    pip install jupyter-console
+    pip install jupyter_console
 
 If you want to use conda instead to perform your installation::
 
-    conda install -c conda-forge jupyter-console
+    conda install -c conda-forge jupyter_console
 
 And started with::
 
@@ -20,7 +20,7 @@
 
 To start the console with a particular kernel, ask for it by name::
 
-    jupyter console --kernel=julia-0.4
+    jupyter console --kernel=julia-1.4
 
 A list of available kernels can be seen with::
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/jupyter_console/_version.py 
new/jupyter_console-6.4.0/jupyter_console/_version.py
--- old/jupyter_console-6.1.0/jupyter_console/_version.py       2020-01-16 
23:09:54.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/_version.py       2021-03-24 
01:03:14.000000000 +0100
@@ -5,6 +5,6 @@
 See PEP 440 https://www.python.org/dev/peps/pep-0440/
 """
 
-version_info = (6, 1, 0)
+version_info = (6, 4, 0)
 
 __version__ = '.'.join(map(str, version_info[:3])) + ''.join(version_info[3:])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/jupyter_console/app.py 
new/jupyter_console-6.4.0/jupyter_console/app.py
--- old/jupyter_console-6.1.0/jupyter_console/app.py    2020-01-16 
00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/app.py    2021-03-16 
16:25:55.000000000 +0100
@@ -9,7 +9,6 @@
 
 from __future__ import print_function
 
-import logging
 import signal
 import sys
 
@@ -18,7 +17,7 @@
 )
 from traitlets.config import catch_config_error, boolean_flag
 
-from jupyter_core.application import JupyterApp, base_aliases, base_flags, 
NoStart
+from jupyter_core.application import JupyterApp, base_aliases, base_flags
 from jupyter_client.consoleapp import (
         JupyterConsoleApp, app_aliases, app_flags,
     )
@@ -42,9 +41,8 @@
 # copy flags from mixin:
 flags = dict(base_flags)
 # start with mixin frontend flags:
-frontend_flags = dict(app_flags)
 # update full dict with frontend flags:
-flags.update(frontend_flags)
+flags.update(app_flags)
 flags.update(boolean_flag(
     'simple-prompt', 'ZMQTerminalInteractiveShell.simple_prompt',
     "Force simple minimal prompt using `raw_input`",
@@ -53,15 +51,11 @@
 
 # copy flags from mixin
 aliases = dict(base_aliases)
-# start with mixin frontend flags
-frontend_aliases = dict(app_aliases)
-# load updated frontend flags into full dict
-aliases.update(frontend_aliases)
-
-# get flags&aliases into sets, and remove a couple that
-# shouldn't be scrubbed from backend flags:
-frontend_aliases = set(frontend_aliases.keys())
-frontend_flags = set(frontend_flags.keys())
+
+aliases.update(app_aliases)
+
+frontend_aliases = set(app_aliases.keys())
+frontend_flags = set(app_flags.keys())
 
 
 #-----------------------------------------------------------------------------
@@ -146,8 +140,6 @@
     def init_banner(self):
         """optionally display the banner"""
         self.shell.show_banner()
-        # Make sure there is a space below the banner.
-        #if self.log_level <= logging.INFO: print()
 
     def start(self):
         # JupyterApp.start dispatches on NoStart
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/jupyter_console/completer.py 
new/jupyter_console-6.4.0/jupyter_console/completer.py
--- old/jupyter_console-6.1.0/jupyter_console/completer.py      2020-01-16 
00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/completer.py      2021-03-15 
16:18:51.000000000 +0100
@@ -4,11 +4,6 @@
 # Copyright (c) IPython Development Team.
 # Distributed under the terms of the Modified BSD License.
 
-try:
-    from queue import Empty  # Py 3
-except ImportError:
-    from Queue import Empty  # Py 2
-
 from traitlets.config import Configurable
 from traitlets import Float
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/jupyter_console/ptshell.py 
new/jupyter_console-6.4.0/jupyter_console/ptshell.py
--- old/jupyter_console-6.1.0/jupyter_console/ptshell.py        2020-01-16 
00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/ptshell.py        2021-03-24 
00:58:34.000000000 +0100
@@ -1,6 +1,7 @@
 """IPython terminal interface using prompt_toolkit in place of readline"""
 from __future__ import print_function
 
+import asyncio
 import base64
 import errno
 from getpass import getpass
@@ -10,33 +11,59 @@
 import signal
 import subprocess
 import sys
+from tempfile import TemporaryDirectory
 import time
 from warnings import warn
 
+from typing import Dict as DictType, Any as AnyType
+
 from zmq import ZMQError
 from IPython.core import page
-from ipython_genutils.tempdir import NamedFileInTemporaryDirectory
-from traitlets import (Bool, Integer, Float, Unicode, List, Dict, Enum,
-                       Instance, Any)
+from traitlets import (
+    Bool,
+    Integer,
+    Float,
+    Unicode,
+    List,
+    Dict,
+    Enum,
+    Instance,
+    Any,
+)
 from traitlets.config import SingletonConfigurable
 
 from .completer import ZMQCompleter
 from .zmqhistory import ZMQHistoryManager
 from . import __version__
 
+# Discriminate version3 for asyncio
+from prompt_toolkit import __version__ as ptk_version
+PTK3 = ptk_version.startswith('3.')
+
+if not PTK3:
+    # use_ayncio_event_loop obsolete in PKT3
+    from prompt_toolkit.eventloop.defaults import use_asyncio_event_loop
+
 from prompt_toolkit.completion import Completer, Completion
 from prompt_toolkit.document import Document
 from prompt_toolkit.enums import DEFAULT_BUFFER, EditingMode
-from prompt_toolkit.filters import (Condition, has_focus, has_selection,
-                                    vi_insert_mode, emacs_insert_mode, is_done)
+from prompt_toolkit.filters import (
+    Condition,
+    has_focus,
+    has_selection,
+    vi_insert_mode,
+    emacs_insert_mode,
+    is_done,
+)
 from prompt_toolkit.history import InMemoryHistory
-from prompt_toolkit.patch_stdout import patch_stdout
 from prompt_toolkit.shortcuts.prompt import PromptSession
-from prompt_toolkit.shortcuts import print_formatted_text
+from prompt_toolkit.shortcuts import print_formatted_text, CompleteStyle
 from prompt_toolkit.key_binding import KeyBindings
 from prompt_toolkit.lexers import PygmentsLexer
-from prompt_toolkit.layout.processors import (ConditionalProcessor,
-                                              
HighlightMatchingBracketProcessor)
+from prompt_toolkit.layout.processors import (
+    ConditionalProcessor,
+    HighlightMatchingBracketProcessor,
+)
 from prompt_toolkit.styles import merge_styles
 from prompt_toolkit.styles.pygments import (style_from_pygments_cls,
                                             style_from_pygments_dict)
@@ -83,6 +110,15 @@
     return answers[ans]
 
 
+async def async_input(prompt, loop=None):
+    """Simple async version of input using a the default executor"""
+    if loop is None:
+        loop = asyncio.get_event_loop()
+
+    raw = await loop.run_in_executor(None, input, prompt)
+    return raw
+
+
 def get_pygments_lexer(name):
     name = name.lower()
     if name == 'ipython2':
@@ -113,9 +149,26 @@
             code=document.text,
             cursor_pos=document.cursor_position
         )
-        start_pos = content['cursor_start'] - document.cursor_position
-        for m in content['matches']:
-            yield Completion(m, start_position=start_pos)
+        meta = content["metadata"]
+
+        if "_jupyter_types_experimental" in meta:
+            try:
+                new_meta = {}
+                for c, m in zip(
+                    content["matches"], meta["_jupyter_types_experimental"]
+                ):
+                    new_meta[c] = m["type"]
+                meta = new_meta
+            except Exception:
+                pass
+
+        start_pos = content["cursor_start"] - document.cursor_position
+        for m in content["matches"]:
+            yield Completion(
+                m,
+                start_position=start_pos,
+                display_meta=meta.get(m, "?"),
+            )
 
 
 class ZMQTerminalInteractiveShell(SingletonConfigurable):
@@ -206,8 +259,9 @@
         """
     )
 
-    callable_image_handler = Any(config=True, help=
-        """
+    callable_image_handler = Any(
+        config=True,
+        help="""
         Callable object called via 'callable' image handler with one
         argument, `data`, which is `msg["content"]["data"]` where
         `msg` is the message from iopub channel.  For example, you can
@@ -248,15 +302,29 @@
         help="""Set to display confirmation dialog on exit.
         You can always use 'exit' or 'quit', to force a
         direct exit without any confirmation.
-        """
+        """,
     )
 
-    highlight_matching_brackets = Bool(True,
-        help="Highlight matching brackets.",
+    display_completions = Enum(
+        ("column", "multicolumn", "readlinelike"),
+        help=(
+            "Options for displaying tab completions, 'column', 'multicolumn', 
and "
+            "'readlinelike'. These options are for `prompt_toolkit`, see "
+            "`prompt_toolkit` documentation for more information."
+        ),
+        default_value="multicolumn",
+    ).tag(config=True)
+    
+    prompt_includes_vi_mode = Bool(True,
+        help="Display the current vi mode (when using vi editing mode)."
     ).tag(config=True)
 
-    manager = Instance('jupyter_client.KernelManager', allow_none=True)
-    client = Instance('jupyter_client.KernelClient', allow_none=True)
+    highlight_matching_brackets = Bool(True, help="Highlight matching 
brackets.",).tag(
+        config=True
+    )
+
+    manager = Instance("jupyter_client.KernelManager", allow_none=True)
+    client = Instance("jupyter_client.KernelClient", allow_none=True)
 
     def _client_changed(self, name, old, new):
         self.session_id = new.session.session
@@ -299,16 +367,25 @@
         self.history_manager = ZMQHistoryManager(client=self.client)
         self.configurables.append(self.history_manager)
 
-    def get_prompt_tokens(self):
+    def vi_mode(self):
+        if (getattr(self, 'editing_mode', None) == 'vi'
+                and self.prompt_includes_vi_mode):
+            return '['+str(self.pt_cli.app.vi_state.input_mode)[3:6]+'] '
+        return ''
+    
+    def get_prompt_tokens(self, ec=None):
+        if ec is None:
+            ec = self.execution_count
         return [
+            (Token.Prompt, self.vi_mode()),
             (Token.Prompt, 'In ['),
-            (Token.PromptNum, str(self.execution_count)),
+            (Token.PromptNum, str(ec)),
             (Token.Prompt, ']: '),
         ]
 
     def get_continuation_tokens(self, width):
         return [
-            (Token.Prompt, (' ' * (width - 2)) + ': '),
+            (Token.Prompt, (" " * (width - 5)) + "...: "),
         ]
 
     def get_out_prompt_tokens(self):
@@ -323,7 +400,26 @@
         print_formatted_text(PygmentsTokens(tokens), end='',
                              style = self.pt_cli.app.style)
 
-    kernel_info = {}
+    def get_remote_prompt_tokens(self):
+        return [
+            (Token.RemotePrompt, self.other_output_prefix),
+        ]
+
+    def print_remote_prompt(self, ec=None):
+        tokens = self.get_remote_prompt_tokens() + 
self.get_prompt_tokens(ec=ec)
+        print_formatted_text(
+            PygmentsTokens(tokens), end="", style=self.pt_cli.app.style
+        )
+
+    @property
+    def pt_complete_style(self):
+        return {
+            "multicolumn": CompleteStyle.MULTI_COLUMN,
+            "column": CompleteStyle.COLUMN,
+            "readlinelike": CompleteStyle.READLINE_LIKE,
+        }[self.display_completions]
+
+    kernel_info: DictType[str, AnyType] = {}
 
     def init_kernel_info(self):
         """Wait for a kernel to be ready, and store kernel info"""
@@ -334,9 +430,9 @@
         while True:
             try:
                 reply = self.client.get_shell_msg(timeout=1)
-            except Empty:
+            except Empty as e:
                 if (time.time() - tic) > timeout:
-                    raise RuntimeError("Kernel didn't respond to 
kernel_info_request")
+                    raise RuntimeError("Kernel didn't respond to 
kernel_info_request") from e
             else:
                 if reply['parent_header'].get('msg_id') == msg_id:
                     self.kernel_info = reply['content']
@@ -350,8 +446,10 @@
         if self.simple_prompt or ('JUPYTER_CONSOLE_TEST' in os.environ):
             # Simple restricted interface for tests so we can find prompts with
             # pexpect. Multi-line input not supported.
-            def prompt():
-                return input('In [%d]: ' % self.execution_count)
+            async def prompt():
+                prompt = 'In [%d]: ' % self.execution_count
+                raw = await async_input(prompt)
+                return raw
             self.prompt_for_code = prompt
             self.print_out_prompt = \
                 lambda: print('Out[%d]: ' % self.execution_count, end='')
@@ -395,6 +493,10 @@
         def _(event):
             event.cli.suspend_to_background()
 
+        @kb.add("c-o", filter=(has_focus(DEFAULT_BUFFER) & emacs_insert_mode))
+        def _(event):
+            event.current_buffer.insert_text("\n")
+
         # Pre-populate history from IPython's history database
         history = InMemoryHistory()
         last_cell = u""
@@ -410,6 +512,7 @@
             Token.PromptNum: '#00ff00 bold',
             Token.OutPrompt: '#ff2200',
             Token.OutPromptNum: '#ff0000 bold',
+            Token.RemotePrompt: '#999900',
         }
         if self.highlighting_style:
             style_cls = get_style_by_name(self.highlighting_style)
@@ -444,14 +547,21 @@
             Condition(lambda: self.highlight_matching_brackets))
         ]
 
+        # Tell prompt_toolkit to use the asyncio event loop.
+        # Obsolete in prompt_toolkit.v3
+        if not PTK3:
+            use_asyncio_event_loop()
+
         self.pt_cli = PromptSession(
             message=(lambda: PygmentsTokens(self.get_prompt_tokens())),
             multiline=True,
+            complete_style=self.pt_complete_style,
             editing_mode=editing_mode,
             lexer=PygmentsLexer(get_pygments_lexer(lexer)),
             prompt_continuation=(
-                lambda width, lineno, is_soft_wrap:
-                PygmentsTokens(self.get_continuation_tokens(width))
+                lambda width, lineno, is_soft_wrap: PygmentsTokens(
+                    self.get_continuation_tokens(width)
+                )
             ),
             key_bindings=kb,
             history=history,
@@ -460,21 +570,20 @@
             style=style,
             input_processors=input_processors,
             color_depth=(ColorDepth.TRUE_COLOR if self.true_color else None),
-
         )
 
-    def prompt_for_code(self):
+    async def prompt_for_code(self):
         if self.next_input:
             default = self.next_input
             self.next_input = None
         else:
             default = ''
 
-        with patch_stdout(raw=True):
-            text = self.pt_cli.prompt(
-                default=default,
-#                pre_run=self.pre_prompt,# reset_current_buffer=True,
-            )
+        if PTK3:
+            text = await self.pt_cli.prompt_async(default=default)
+        else:
+            text = await self.pt_cli.prompt(default=default, async_=True)
+
         return text
 
     def init_io(self):
@@ -523,12 +632,12 @@
                 set_doc()
             self.next_input = None
 
-    def interact(self, display_banner=None):
+    async def interact(self, loop=None, display_banner=None):
         while self.keep_running:
             print('\n', end='')
 
             try:
-                code = self.prompt_for_code()
+                code = await self.prompt_for_code()
             except EOFError:
                 if (not self.confirm_exit) or \
                         ask_yes_no('Do you really want to exit ([y]/n)?', 'y', 
'n'):
@@ -540,11 +649,29 @@
 
     def mainloop(self):
         self.keepkernel = not self.own_kernel
+        loop = asyncio.get_event_loop()
         # An extra layer of protection in case someone mashing Ctrl-C breaks
         # out of our internal code.
         while True:
             try:
-                self.interact()
+                tasks = [self.interact(loop=loop)]
+
+                if self.include_other_output:
+                    # only poll the iopub channel asynchronously if we
+                    # wish to include external content
+                    tasks.append(self.handle_external_iopub(loop=loop))
+
+                main_task = asyncio.wait(tasks, loop=loop, 
return_when=asyncio.FIRST_COMPLETED)
+                _, pending = loop.run_until_complete(main_task)
+
+                for task in pending:
+                    task.cancel()
+                try:
+                    loop.run_until_complete(asyncio.gather(*pending))
+                except asyncio.CancelledError:
+                    pass
+                loop.stop()
+                loop.close()
                 break
             except KeyboardInterrupt:
                 print("\nKeyboardInterrupt escaped interact()\n")
@@ -620,8 +747,8 @@
             content = msg["content"]
             status = content['status']
 
-            if status == 'aborted':
-                self.write('Aborted\n')
+            if status == "aborted":
+                sys.stdout.write("Aborted\n")
                 return
             elif status == 'ok':
                 # handle payloads
@@ -680,11 +807,9 @@
     include_other_output = Bool(False, config=True,
         help="""Whether to include output from clients
         other than this one sharing the same kernel.
-
-        Outputs are not displayed until enter is pressed.
         """
     )
-    other_output_prefix = Unicode("[remote] ", config=True,
+    other_output_prefix = Unicode("Remote ", config=True,
         help="""Prefix to add to outputs coming from clients other than this 
one.
 
         Only relevant if include_other_output is True.
@@ -707,6 +832,15 @@
         else:
             return from_here
 
+    async def handle_external_iopub(self, loop=None):
+        while self.keep_running:
+            # we need to check for keep_running from time to time as
+            # we are blocking in an executor block which cannot be cancelled.
+            poll_result = await loop.run_in_executor(
+                None, self.client.iopub_channel.socket.poll, 500)
+            if(poll_result):
+                self.handle_iopub()
+
     def handle_iopub(self, msg_id=''):
         """Process messages on the IOPub channel
 
@@ -718,7 +852,6 @@
         while self.client.iopub_channel.msg_ready():
             sub_msg = self.client.iopub_channel.get_msg()
             msg_type = sub_msg['header']['msg_type']
-            parent = sub_msg["parent_header"]
 
             # Update execution_count in case it changed in another session
             if msg_type == "execute_input":
@@ -727,6 +860,7 @@
             if self.include_output(sub_msg):
                 if msg_type == 'status':
                     self._execution_state = 
sub_msg["content"]["execution_state"]
+
                 elif msg_type == 'stream':
                     if sub_msg["content"]["name"] == "stdout":
                         if self._pending_clearoutput:
@@ -765,6 +899,12 @@
                         print()
                     print(text_repr)
 
+                    # Remote: add new prompt
+                    if not self.from_here(sub_msg):
+                        sys.stdout.write('\n')
+                        sys.stdout.flush()
+                        self.print_remote_prompt()
+
                 elif msg_type == 'display_data':
                     data = sub_msg["content"]["data"]
                     handled = self.handle_rich_data(data)
@@ -775,11 +915,19 @@
                         if 'text/plain' in data:
                             print(data['text/plain'])
 
+                # If execute input: print it
                 elif msg_type == 'execute_input':
                     content = sub_msg['content']
-                    if not self.from_here(sub_msg):
-                        sys.stdout.write(self.other_output_prefix)
-                    sys.stdout.write('In [{}]: 
'.format(content['execution_count']))
+                    ec = content.get('execution_count', self.execution_count - 
1)
+
+                    # New line
+                    sys.stdout.write('\n')
+                    sys.stdout.flush()
+
+                    # With `Remote In [3]: `
+                    self.print_remote_prompt(ec=ec)
+
+                    # And the code
                     sys.stdout.write(content['code'] + '\n')
 
                 elif msg_type == 'clear_output':
@@ -818,33 +966,31 @@
             from PIL import Image, ImageShow
         except ImportError:
             return False
-        raw = base64.decodestring(data[mime].encode('ascii'))
+        raw = base64.decodebytes(data[mime].encode('ascii'))
         img = Image.open(BytesIO(raw))
         return ImageShow.show(img)
 
     def handle_image_stream(self, data, mime):
-        raw = base64.decodestring(data[mime].encode('ascii'))
+        raw = base64.decodebytes(data[mime].encode('ascii'))
         imageformat = self._imagemime[mime]
         fmt = dict(format=imageformat)
         args = [s.format(**fmt) for s in self.stream_image_handler]
-        with open(os.devnull, 'w') as devnull:
-            proc = subprocess.Popen(
-                args, stdin=subprocess.PIPE,
-                stdout=devnull, stderr=devnull)
+        with subprocess.Popen(args, stdin=subprocess.PIPE,
+                              stdout=subprocess.DEVNULL, 
stderr=subprocess.DEVNULL) as proc:
             proc.communicate(raw)
-        return (proc.returncode == 0)
+            return (proc.returncode == 0)
 
     def handle_image_tempfile(self, data, mime):
-        raw = base64.decodestring(data[mime].encode('ascii'))
+        raw = base64.decodebytes(data[mime].encode('ascii'))
         imageformat = self._imagemime[mime]
         filename = 'tmp.{0}'.format(imageformat)
-        with NamedFileInTemporaryDirectory(filename) as f, \
-                open(os.devnull, 'w') as devnull:
-            f.write(raw)
-            f.flush()
-            fmt = dict(file=f.name, format=imageformat)
+        with TemporaryDirectory() as tempdir:
+            fullpath = os.path.join(tempdir, filename)
+            with open(fullpath, 'wb') as f:
+                f.write(raw)
+            fmt = dict(file=fullpath, format=imageformat)
             args = [s.format(**fmt) for s in self.tempfile_image_handler]
-            rc = subprocess.call(args, stdout=devnull, stderr=devnull)
+            rc = subprocess.call(args, stdout=subprocess.DEVNULL, 
stderr=subprocess.DEVNULL)
         return (rc == 0)
 
     def handle_image_callable(self, data, mime):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_console-6.1.0/jupyter_console/tests/conftest.py 
new/jupyter_console-6.4.0/jupyter_console/tests/conftest.py
--- old/jupyter_console-6.1.0/jupyter_console/tests/conftest.py 1970-01-01 
01:00:00.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/tests/conftest.py 2021-03-15 
16:18:51.000000000 +0100
@@ -0,0 +1,6 @@
+import pytest
+
+
[email protected](autouse=True)
+def env_setup(monkeypatch):
+    monkeypatch.setenv("JUPYTER_CONSOLE_TEST", "1")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_console-6.1.0/jupyter_console/tests/test_console.py 
new/jupyter_console-6.4.0/jupyter_console/tests/test_console.py
--- old/jupyter_console-6.1.0/jupyter_console/tests/test_console.py     
2020-01-16 00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/tests/test_console.py     
2021-03-16 16:26:17.000000000 +0100
@@ -9,24 +9,26 @@
 import tempfile
 from subprocess import check_output
 
-from nose import SkipTest
+import pytest
 
 from traitlets.tests.utils import check_help_all_output
-from ipython_genutils.testing import decorators as dec
 
[email protected]_win32
+
[email protected]
[email protected](sys.platform == "win32", reason="skip on windows")
 def test_console_starts():
     """test that `jupyter console` starts a terminal"""
     p, pexpect, t = start_console()
-    p.sendline('5')
-    idx = p.expect([r'Out\[\d+\]: 5', pexpect.EOF], timeout=t)
-    idx = p.expect([r'In \[\d+\]', pexpect.EOF], timeout=t)
+    p.sendline("5")
+    p.expect([r"Out\[\d+\]: 5", pexpect.EOF], timeout=t)
+    p.expect([r"In \[\d+\]", pexpect.EOF], timeout=t)
     stop_console(p, pexpect, t)
 
 def test_help_output():
     """jupyter console --help-all works"""
     check_help_all_output('jupyter_console')
 
[email protected]
 def test_display_text():
     "Ensure display protocol plain/text key is supported"
     # equivalent of:
@@ -58,16 +60,17 @@
     args = ['-m', 'jupyter_console', '--colors=NoColor']
     cmd = sys.executable
     env = os.environ.copy()
-    env['JUPYTER_CONSOLE_TEST'] = '1'
+    env["JUPYTER_CONSOLE_TEST"] = "1"
+    env["PROMPT_TOOLKIT_NO_CPR"] = "1"
 
     try:
         p = pexpect.spawn(cmd, args=args, env=env)
     except IOError:
-        raise SkipTest("Couldn't find command %s" % cmd)
+        pytest.skip("Couldn't find command %s" % cmd)
     
     # timeout after one minute
     t = 60
-    idx = p.expect(r'In \[\d+\]', timeout=t)
+    p.expect(r"In \[\d+\]", timeout=t)
     return p, pexpect, t
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_console-6.1.0/jupyter_console/tests/test_image_handler.py 
new/jupyter_console-6.4.0/jupyter_console/tests/test_image_handler.py
--- old/jupyter_console-6.1.0/jupyter_console/tests/test_image_handler.py       
2020-01-16 00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/tests/test_image_handler.py       
2021-03-24 00:58:34.000000000 +0100
@@ -1,20 +1,16 @@
 # Copyright (c) IPython Development Team.
 # Distributed under the terms of the Modified BSD License.
 
+import base64
 import os
 import sys
+from tempfile import TemporaryDirectory
 import unittest
-import base64
+from unittest.mock import patch
 
-try:
-    from unittest.mock import patch
-except ImportError:
-    from mock import patch
+import pytest
 
 from jupyter_console.ptshell import ZMQTerminalInteractiveShell
-from ipython_genutils.tempdir import TemporaryDirectory
-from ipython_genutils.testing.decorators import skip_without
-from ipython_genutils.ipstruct import Struct
 
 
 SCRIPT_PATH = os.path.join(
@@ -32,10 +28,11 @@
         self.shell = NonCommunicatingShell()
         self.raw = b'dummy data'
         self.mime = 'image/png'
-        self.data = {self.mime: base64.encodestring(self.raw).decode('ascii')}
+        self.data = {self.mime: base64.encodebytes(self.raw).decode('ascii')}
 
     def test_call_pil_by_default(self):
         pil_called_with = []
+
         def pil_called(data, mime):
             pil_called_with.append(data)
 
@@ -51,8 +48,8 @@
         shell.handle_image(None, None)  # arguments are dummy
         assert len(pil_called_with) == 1
 
-    @skip_without('PIL')
     def test_handle_image_PIL(self):
+        pytest.importorskip('PIL')
         from PIL import Image, ImageShow
 
         open_called_with = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/jupyter_console/zmqhistory.py 
new/jupyter_console-6.4.0/jupyter_console/zmqhistory.py
--- old/jupyter_console-6.1.0/jupyter_console/zmqhistory.py     2020-01-16 
00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console/zmqhistory.py     2021-03-15 
16:18:51.000000000 +0100
@@ -14,10 +14,7 @@
 from IPython.core.history import HistoryAccessorBase
 from traitlets import Dict, List
 
-try:
-    from queue import Empty  # Py 3
-except ImportError:
-    from Queue import Empty  # Py 2
+from queue import Empty  # Py 3
 
 class ZMQHistoryManager(HistoryAccessorBase):
     """History accessor and manager for ZMQ-based kernels"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_console-6.1.0/jupyter_console.egg-info/PKG-INFO 
new/jupyter_console-6.4.0/jupyter_console.egg-info/PKG-INFO
--- old/jupyter_console-6.1.0/jupyter_console.egg-info/PKG-INFO 2020-01-16 
23:11:15.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console.egg-info/PKG-INFO 2021-03-24 
01:04:08.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: jupyter-console
-Version: 6.1.0
+Version: 6.4.0
 Summary: Jupyter terminal console
 Home-page: https://jupyter.org
 Author: Jupyter Development Team
@@ -17,5 +17,5 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Requires-Python: >=3.5
+Requires-Python: >=3.6
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_console-6.1.0/jupyter_console.egg-info/SOURCES.txt 
new/jupyter_console-6.4.0/jupyter_console.egg-info/SOURCES.txt
--- old/jupyter_console-6.1.0/jupyter_console.egg-info/SOURCES.txt      
2020-01-16 23:11:15.000000000 +0100
+++ new/jupyter_console-6.4.0/jupyter_console.egg-info/SOURCES.txt      
2021-03-24 01:04:08.000000000 +0100
@@ -1,9 +1,18 @@
+.bumpversion.cfg
+.gitignore
+.mailmap
 CONTRIBUTING.md
 COPYING.md
 MANIFEST.in
 README.md
+RELEASING.md
+mypy.ini
+pyproject.toml
+pytest.ini
+readthedocs.yml
 setup.cfg
 setup.py
+.github/workflows/python-package.yml
 docs/Makefile
 docs/autogen_config.py
 docs/changelog.rst
@@ -27,6 +36,8 @@
 jupyter_console.egg-info/requires.txt
 jupyter_console.egg-info/top_level.txt
 jupyter_console/tests/__init__.py
+jupyter_console/tests/conftest.py
 jupyter_console/tests/test_console.py
 jupyter_console/tests/test_image_handler.py
-jupyter_console/tests/writetofile.py
\ No newline at end of file
+jupyter_console/tests/writetofile.py
+scripts/jupyter-console
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/mypy.ini 
new/jupyter_console-6.4.0/mypy.ini
--- old/jupyter_console-6.1.0/mypy.ini  1970-01-01 01:00:00.000000000 +0100
+++ new/jupyter_console-6.4.0/mypy.ini  2021-03-15 16:18:51.000000000 +0100
@@ -0,0 +1,4 @@
+[mypy]
+python_version = 3.6
+ignore_missing_imports = True
+follow_imports = silent
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/pyproject.toml 
new/jupyter_console-6.4.0/pyproject.toml
--- old/jupyter_console-6.1.0/pyproject.toml    1970-01-01 01:00:00.000000000 
+0100
+++ new/jupyter_console-6.4.0/pyproject.toml    2021-03-15 16:18:51.000000000 
+0100
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools>=40.8.0", "wheel"]
+build-backend = "setuptools.build_meta"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/pytest.ini 
new/jupyter_console-6.4.0/pytest.ini
--- old/jupyter_console-6.1.0/pytest.ini        1970-01-01 01:00:00.000000000 
+0100
+++ new/jupyter_console-6.4.0/pytest.ini        2021-03-15 16:18:51.000000000 
+0100
@@ -0,0 +1,2 @@
+[pytest]
+addopts = --durations=10
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/readthedocs.yml 
new/jupyter_console-6.4.0/readthedocs.yml
--- old/jupyter_console-6.1.0/readthedocs.yml   1970-01-01 01:00:00.000000000 
+0100
+++ new/jupyter_console-6.4.0/readthedocs.yml   2021-03-15 16:18:51.000000000 
+0100
@@ -0,0 +1,9 @@
+conda:
+    file: docs/environment.yml
+python:
+    version: 3
+    setup_py_install: true
+    pip install: true
+formats:
+    - epub
+    - pdf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/scripts/jupyter-console 
new/jupyter_console-6.4.0/scripts/jupyter-console
--- old/jupyter_console-6.1.0/scripts/jupyter-console   1970-01-01 
01:00:00.000000000 +0100
+++ new/jupyter_console-6.4.0/scripts/jupyter-console   2016-03-10 
19:38:25.000000000 +0100
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+from jupyter_console import app
+
+if __name__ == '__main__':
+    app.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/setup.cfg 
new/jupyter_console-6.4.0/setup.cfg
--- old/jupyter_console-6.1.0/setup.cfg 2020-01-16 23:11:15.000000000 +0100
+++ new/jupyter_console-6.4.0/setup.cfg 2021-03-24 01:04:09.000000000 +0100
@@ -1,8 +1,6 @@
-[bdist_wheel]
-universal = 1
-
 [flake8]
 max-line-length = 99
+ignore = W291, E266, E265, E128, E251, E402, E124, E302, W293, E231, E222, 
W503, E126, E121, W391, E226, E127, W504
 
 [metadata]
 license_file = COPYING.md
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_console-6.1.0/setup.py 
new/jupyter_console-6.4.0/setup.py
--- old/jupyter_console-6.1.0/setup.py  2020-01-16 00:32:32.000000000 +0100
+++ new/jupyter_console-6.4.0/setup.py  2021-03-24 00:58:34.000000000 +0100
@@ -16,7 +16,7 @@
 import sys
 
 
-if sys.version_info < (3, 5):
+if sys.version_info < (3, 6):
     pip_message = 'This may be due to an out of date pip. Make sure you have 
pip >= 9.0.1.'
     try:
         import pip
@@ -32,9 +32,10 @@
 
 
     error = """
-Jupyter_Console 6.0+ supports Python 3.5 and above.
+Jupyter_Console 6.2+ supports Python 3.6 and above.
 When using Python 2.7, please install and older version of Jupyter Console
 Python 3.3 and 3.4 were supported up to Jupyter Console 5.x.
+Python 3.5 was supported up to Jupyter Console 6.1.0.
 
 Python {py} detected.
 {pip}
@@ -49,9 +50,8 @@
 #-----------------------------------------------------------------------------
 
 import os
-from glob import glob
 
-from distutils.core import setup
+from setuptools import setup
 
 pjoin = os.path.join
 here = os.path.abspath(os.path.dirname(__file__))
@@ -70,7 +70,6 @@
 setup_args = dict(
     name            = name,
     version         = version_ns['__version__'],
-    scripts         = glob(pjoin('scripts', '*')),
     packages        = packages,
     description     = "Jupyter terminal console",
     long_description= "An IPython-like terminal frontend for Jupyter kernels 
in any language.",
@@ -88,38 +87,23 @@
         'Programming Language :: Python',
         'Programming Language :: Python :: 3',
     ],
-)
-
-if 'develop' in sys.argv or any(a.startswith('bdist') for a in sys.argv):
-    import setuptools
-
-setuptools_args = {}
-install_requires = setuptools_args['install_requires'] = [
-    'jupyter_client',
-    'ipython',
-    'ipykernel', # bless IPython kernel for now
-    'prompt_toolkit>=2.0.0,<3.1.0,!=3.0.0,!=3.0.1',
-    'pygments',
-]
-
-extras_require = setuptools_args['extras_require'] = {
-    'test:sys_platform != "win32"': ['pexpect'],
-
-
-}
-
-setuptools_args['python_requires'] = '>=3.5'
-
-
-setuptools_args['entry_points'] = {
+    install_requires=[
+        'jupyter_client',
+        'ipython',
+        'ipykernel',  # bless IPython kernel for now
+        'prompt_toolkit>=2.0.0,<3.1.0,!=3.0.0,!=3.0.1',
+        'pygments',
+    ],
+    extras_require={
+        'test:sys_platform != "win32"': ['pexpect'],
+    },
+    python_requires='>=3.6',
+    entry_points={
         'console_scripts': [
             'jupyter-console = jupyter_console.app:main',
         ]
-}
-
-if 'setuptools' in sys.modules:
-    setup_args.update(setuptools_args)
-    setup_args.pop('scripts')
+    }
+)
 
 
 if __name__ == '__main__':

Reply via email to