Hello community, here is the log from the commit of package python-ipykernel for openSUSE:Factory checked in at 2020-01-30 09:38:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ipykernel (Old) and /work/SRC/openSUSE:Factory/.python-ipykernel.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipykernel" Thu Jan 30 09:38:31 2020 rev:4 rq:768074 version:5.1.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ipykernel/python-ipykernel.changes 2019-11-22 10:23:48.553302121 +0100 +++ /work/SRC/openSUSE:Factory/.python-ipykernel.new.26092/python-ipykernel.changes 2020-01-30 09:39:07.313416930 +0100 @@ -1,0 +2,9 @@ +Tue Jan 28 15:46:11 UTC 2020 - Todd R <toddrme2...@gmail.com> + +- Update to 5.1.4 + * Fix pickle issues when using inline matplotlib backend + * Fix an error during kernel shutdown + * Fix compatibility issues with Python 3.8 + * Remove some dead code + +------------------------------------------------------------------- Old: ---- ipykernel-5.1.3.tar.gz New: ---- ipykernel-5.1.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ipykernel.spec ++++++ --- /var/tmp/diff_new_pack.rnC6ZS/_old 2020-01-30 09:39:08.853417754 +0100 +++ /var/tmp/diff_new_pack.rnC6ZS/_new 2020-01-30 09:39:08.857417757 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-ipykernel # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-ipykernel -Version: 5.1.3 +Version: 5.1.4 Release: 0 Summary: IPython Kernel for Jupyter License: BSD-3-Clause ++++++ ipykernel-5.1.3.tar.gz -> ipykernel-5.1.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/.gitignore new/ipykernel-5.1.4/.gitignore --- old/ipykernel-5.1.3/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/.gitignore 2018-09-01 09:48:16.000000000 +0200 @@ -0,0 +1,26 @@ +MANIFEST +build +cover +dist +_build +docs/man/*.gz +docs/source/api/generated +docs/source/config/options +docs/source/interactive/magics-generated.txt +docs/gh-pages +IPython/html/notebook/static/mathjax +IPython/html/static/style/*.map +*.py[co] +__pycache__ +*.egg-info +*~ +*.bak +.ipynb_checkpoints +.tox +.DS_Store +\#*# +.#* +.coverage + +data_kernelspec +.pytest_cache diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/.mailmap new/ipykernel-5.1.4/.mailmap --- old/ipykernel-5.1.3/.mailmap 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/.mailmap 2015-04-09 10:09:32.000000000 +0200 @@ -0,0 +1,149 @@ +A. J. Holyoake <a.j.holyo...@gmail.com> ajholyoake <a.j.holyo...@gmail.com> +Aaron Culich <acul...@gmail.com> Aaron Culich <acul...@eecs.berkeley.edu> +Aron Ahmadia <a...@ahmadia.net> ahmadia <a...@ahmadia.net> +Benjamin Ragan-Kelley <benjami...@gmail.com> <minrk@Mercury.local> +Benjamin Ragan-Kelley <benjami...@gmail.com> Min RK +Benjamin Ragan-Kelley <benjami...@gmail.com> MinRK <benjami...@gmail.com> +Barry Wark <barryw...@gmail.com> Barry Wark <barrywarkatgmaildotcom> +Ben Edwards <bedwa...@cs.unm.edu> Ben Edwards <bedwards@sausage.(none)> +Bradley M. Froehle <brad.froe...@gmail.com> Bradley M. Froehle <bfroe...@math.berkeley.edu> +Bradley M. Froehle <brad.froe...@gmail.com> Bradley Froehle <brad.froe...@gmail.com> +Brandon Parsons <bran...@parsonstx.com> Brandon Parsons <brandon.pars...@hp.com> +Brian E. Granger <elliso...@gmail.com> Brian Granger +Brian E. Granger <elliso...@gmail.com> Brian Granger <> +Brian E. Granger <elliso...@gmail.com> bgranger <> +Brian E. Granger <elliso...@gmail.com> bgranger <bgranger@red> +Christoph Gohlke <cgoh...@uci.edu> cgohlke <cgoh...@uci.edu> +Cyrille Rossant <cyrille.ross...@gmail.com> rossant <rossant@github> +Damián Avila <damianavil...@yahoo.com.ar> damianavila <damianavil...@yahoo.com.ar> +Damián Avila <damianavil...@yahoo.com.ar> damianavila <damianav...@gmail.com> +Damon Allen <damontal...@gmail.com> damontallen <damontal...@gmail.com> +Darren Dale <dsdal...@gmail.com> darren.dale <> +Darren Dale <dsdal...@gmail.com> Darren Dale <> +Dav Clark <davcl...@berkeley.edu> Dav Clark <> +Dav Clark <davcl...@berkeley.edu> Dav Clark <davcl...@gmail.com> +David Hirschfeld <david.hirschf...@gazprom-mt.com> dhirschfeld <david.hirschf...@gazprom-mt.com> +David P. Sanders <dpsand...@gmail.com> David P. Sanders <dpsand...@ciencias.unam.mx> +David Warde-Farley <warde...@iro.umontreal.ca> David Warde-Farley <> +Doug Blank <dbl...@cs.brynmawr.edu> Doug Blank <doug.bl...@gmail.com> +Eugene Van den Bulke <eugene.van-den-bu...@gmail.com> Eugene Van den Bulke <eugene.vandenbu...@gmail.com> +Evan Patterson <epatt...@enthought.com> <epatters@EPattersons-MacBook-Pro.local> +Evan Patterson <epatt...@enthought.com> <epatters@evan-laptop.localdomain> +Evan Patterson <epatt...@enthought.com> <epatt...@caltech.edu> +Evan Patterson <epatt...@enthought.com> <ejpatt...@gmail.com> +Evan Patterson <epatt...@enthought.com> epatters <ejpatt...@gmail.com> +Evan Patterson <epatt...@enthought.com> epatters <epatt...@enthought.com> +Ernie French <ernestfre...@gmail.com> Ernie French <er...@gqpbj.com> +Ernie French <ernestfre...@gmail.com> ernie french <ernestfre...@gmail.com> +Ernie French <ernestfre...@gmail.com> ernop <ernestfre...@gmail.com> +Fernando Perez <fernando.pe...@berkeley.edu> <fperez....@gmail.com> +Fernando Perez <fernando.pe...@berkeley.edu> Fernando Perez <fernando.pe...@berkeley.edu> +Fernando Perez <fernando.pe...@berkeley.edu> fperez <> +Fernando Perez <fernando.pe...@berkeley.edu> fptest <> +Fernando Perez <fernando.pe...@berkeley.edu> fptest1 <> +Fernando Perez <fernando.pe...@berkeley.edu> Fernando Perez <fernando.pe...@berkeley.edu> +Fernando Perez <fernando.pe...@berkeley.edu> Fernando Perez <> +Fernando Perez <fernando.pe...@berkeley.edu> Fernando Perez <fperez@maqroll> +Frank Murphy <fpmur...@mtu.edu> Frank Murphy <fmur...@arbor.net> +Gabriel Becker <gmbec...@ucdavis.edu> gmbecker <gmbec...@ucdavis.edu> +Gael Varoquaux <gael.varoqu...@normalesup.org> gael.varoquaux <> +Gael Varoquaux <gael.varoqu...@normalesup.org> gvaroquaux <gvaroquaux@gvaroquaux-desktop> +Gael Varoquaux <gael.varoqu...@normalesup.org> Gael Varoquaux <> +Ingolf Becker <ingolf.bec...@googlemail.com> watercrossing <ingolf.bec...@googlemail.com> +Jake Vanderplas <jake...@gmail.com> Jake Vanderplas <vanderp...@astro.washington.edu> +Jakob Gager <jakob.ga...@gmail.com> jakobgager <jakob.ga...@gmail.com> +Jakob Gager <jakob.ga...@gmail.com> jakobgager <ga...@ilsb.tuwien.ac.at> +Jakob Gager <jakob.ga...@gmail.com> jakobgager <jakobga...@hotmail.com> +Jason Grout <jgro...@bloomberg.net> <jason.gr...@drake.edu> +Jason Grout <jgro...@bloomberg.net> <jason-git...@creativetrax.com> +Jason Gors <jason.gors.w...@gmail.com> jason gors <jason.gors.w...@gmail.com> +Jason Gors <jason.gors.w...@gmail.com> jgors <jason.gors.w...@gmail.com> +Jens Hedegaard Nielsen <jenshniel...@gmail.com> Jens Hedegaard Nielsen <jhn@jhn-Znote.(none)> +Jens Hedegaard Nielsen <jenshniel...@gmail.com> Jens H Nielsen <jenshniel...@gmail.com> +Jens Hedegaard Nielsen <jenshniel...@gmail.com> Jens H. Nielsen <jenshniel...@gmail.com> +Jez Ng <jezr...@gmail.com> Jez Ng <m...@jezng.com> +Jonathan Frederic <jdfre...@calpoly.edu> Jonathan Frederic <jonathan@LifebookMint.(none)> +Jonathan Frederic <jdfre...@calpoly.edu> Jonathan Frederic <jon.fre...@gmail.com> +Jonathan Frederic <jdfre...@calpoly.edu> Jonathan Frederic <xh3xx.go...@gmail.com> +Jonathan Frederic <jdfre...@calpoly.edu> jon <jon.fre...@gmail.com> +Jonathan Frederic <jdfre...@calpoly.edu> U-Jon-PC\Jon <Jon@Jon-PC.(none)> +Jonathan March <jma...@enthought.com> Jonathan March <j...@marchray.net> +Jonathan March <jma...@enthought.com> jdmarch <j...@marchray.net> +Jörgen Stenarson <jorgen.stenar...@kroywen.se> Jörgen Stenarson <jorgen.stenar...@bostream.nu> +Jörgen Stenarson <jorgen.stenar...@kroywen.se> Jorgen Stenarson <jorgen.stenar...@bostream.nu> +Jörgen Stenarson <jorgen.stenar...@kroywen.se> Jorgen Stenarson <> +Jörgen Stenarson <jorgen.stenar...@kroywen.se> jstenar <jorgen.stenar...@bostream.nu> +Jörgen Stenarson <jorgen.stenar...@kroywen.se> jstenar <> +Jörgen Stenarson <jorgen.stenar...@kroywen.se> Jörgen Stenarson <jorgen.stenar...@kroywen.se> +Juergen Hasch <pyt...@elbonia.de> juhasch <pyt...@elbonia.de> +Juergen Hasch <pyt...@elbonia.de> juhasch <ha...@vmbox.fritz.box> +Julia Evans <ju...@jvns.ca> Julia Evans <ju...@stripe.com> +Kester Tong <kest...@google.com> KesterTong <kest...@google.com> +Kyle Kelley <rgb...@gmail.com> Kyle Kelley <kyle.kel...@rackspace.com> +Kyle Kelley <rgb...@gmail.com> rgbkrk <rgb...@gmail.com> +Laurent Dufréchou <laurent.dufrec...@gmail.com> <laurent.dufrec...@gmail.com> +Laurent Dufréchou <laurent.dufrec...@gmail.com> <laurent@Pep> +Laurent Dufréchou <laurent.dufrec...@gmail.com> laurent dufrechou <> +Laurent Dufréchou <laurent.dufrec...@gmail.com> laurent.dufrechou <> +Laurent Dufréchou <laurent.dufrec...@gmail.com> Laurent Dufrechou <> +Laurent Dufréchou <laurent.dufrec...@gmail.com> laurent.dufrec...@gmail.com <> +Laurent Dufréchou <laurent.dufrec...@gmail.com> ldufrechou <ldufrechou@PEP> +Lorena Pantano <lorena.pant...@gmail.com> Lorena <lorena.pant...@gmail.com> +Luis Pedro Coelho <l...@luispedro.org> Luis Pedro Coelho <l...@cmu.edu> +Marc Molla <marcmo...@gmail.com> marcmolla <marcmo...@gmail.com> +Martín Gaitán <gai...@gmail.com> Martín Gaitán <gai...@phasety.com> +Matthias Bussonnier <bussonniermatth...@gmail.com> Matthias BUSSONNIER <bussonniermatth...@gmail.com> +Matthias Bussonnier <bussonniermatth...@gmail.com> Bussonnier Matthias <bussonniermatth...@gmail.com> +Matthias Bussonnier <bussonniermatth...@gmail.com> Matthias BUSSONNIER <bussonniermatth...@umr168-curn-1-24x-6561.curie.fr> +Matthias Bussonnier <bussonniermatth...@gmail.com> Matthias Bussonnier <carreau@Aspire.(none)> +Michael Droettboom <mdb...@gmail.com> Michael Droettboom <md...@stsci.edu> +Nicholas Bollweg <nick.boll...@gmail.com> Nicholas Bollweg (Nick) <nick.boll...@gmail.com> +Nicolas Rougier <nicolas.roug...@inria.fr> <nicolas.roug...@inria.fr> +Nikolay Koldunov <koldun...@gmail.com> Nikolay Koldunov <nikolay.koldu...@zmaw.de> +Omar Andrés Zapata Mesa <andresete.ch...@gmail.com> Omar Andres Zapata Mesa <andresete.ch...@gmail.com> +Omar Andrés Zapata Mesa <andresete.ch...@gmail.com> Omar Andres Zapata Mesa <omazapa@tuxhome> +Pankaj Pandey <panka...@gmail.com> Pankaj Pandey <pan...@enthought.com> +Pascal Schetelat <pascal.schete...@gmail.com> pascal-schetelat <pascal.schete...@gmail.com> +Paul Ivanov <p...@berkeley.edu> Paul Ivanov <pivanov...@gmail.com> +Pauli Virtanen <pauli.virta...@iki.fi> Pauli Virtanen <> +Pauli Virtanen <pauli.virta...@iki.fi> Pauli Virtanen <p...@iki.fi> +Pierre Gerold <pierre.ger...@laposte.net> Pierre Gerold <ger...@crans.org> +Pietro Berkes <pber...@enthought.com> Pietro Berkes <pietro.ber...@googlemail.com> +Piti Ongmongkolkul <piti...@gmail.com> piti118 <piti...@gmail.com> +Prabhu Ramachandran <pra...@enthought.com> Prabhu Ramachandran <> +Puneeth Chaganti <puncha...@gmail.com> Puneeth Chaganti <puncha...@muse-amuse.in> +Robert Kern <robert.k...@gmail.com> rkern <> +Robert Kern <robert.k...@gmail.com> Robert Kern <rk...@enthought.com> +Robert Kern <robert.k...@gmail.com> Robert Kern <rkern@Sacrilege.local> +Robert Kern <robert.k...@gmail.com> Robert Kern <> +Robert Marchman <bo.march...@gmail.com> Robert Marchman <robert.l.march...@dartmouth.edu> +Satrajit Ghosh <sa...@mit.edu> Satrajit Ghosh <sa...@ba5.mit.edu> +Satrajit Ghosh <sa...@mit.edu> Satrajit Ghosh <satrajit.gh...@gmail.com> +Scott Sanderson <scout...@gmail.com> Scott Sanderson <ssander...@quantopian.com> +smithj1 <smithj1@LMC-022896.local> smithj1 <smit...@lmc-022896.swisscom.com> +smithj1 <smithj1@LMC-022896.local> smithj1 <smithj1@lmc-022896.local> +Steven Johnson <steven.john...@drake.edu> stevenJohnson <steven.john...@drake.edu> +Steven Silvester <steven.silves...@ieee.org> blink1073 <steven.silves...@ieee.org> +S. Weber <s8we...@c4.usr.sh> s8weber <s8we...@c5.usr.sh> +Stefan van der Walt <ste...@sun.ac.za> Stefan van der Walt <b...@mentat.za.net> +Silvia Vinyes <silvia.vin...@gmail.com> Silvia <silvia@silvia-U44SG.(none)> +Silvia Vinyes <silvia.vin...@gmail.com> silviav12 <silvia.vin...@gmail.com> +Sylvain Corlay <scor...@bloomberg.net> <sylvain.cor...@gmail.com> +Sylvain Corlay <scor...@bloomberg.net> sylvain.corlay <sylvain.cor...@gmail.com> +Ted Drain <ted.dr...@gmail.com> TD22057 <ted.dr...@gmail.com> +Théophile Studer <theo.stu...@gmail.com> Théophile Studer <stu...@users.noreply.github.com> +Thomas Kluyver <tak...@gmail.com> Thomas <tak...@gmail.com> +Thomas Spura <toms...@fedoraproject.org> Thomas Spura <thomas.sp...@gmail.com> +Timo Paulssen <timona...@perpetuum-immobile.de> timo <timona...@perpetuum-immobile.de> +vds <vds@VIVIAN> vds2212 <vds2212@VIVIAN> +vds <vds@VIVIAN> vds <vds@vivian> +Ville M. Vainio <vivai...@gmail.com> <vivainio2@WN-W0941> +Ville M. Vainio <vivai...@gmail.com> ville <ville@VILLE-PC> +Ville M. Vainio <vivai...@gmail.com> ville <ville@ville-desktop> +Ville M. Vainio <vivai...@gmail.com> vivainio <> +Ville M. Vainio <vivai...@gmail.com> Ville M. Vainio <vivainio@villev> +Ville M. Vainio <vivai...@gmail.com> Ville M. Vainio <vivainio@ville_vmw> +Walter Doerwald <wal...@livinglogic.de> walter.doerwald <> +Walter Doerwald <wal...@livinglogic.de> Walter Doerwald <> +W. Trevor King <wk...@tremily.us> W. Trevor King <wk...@drexel.edu> +Yoval P. <yo...@gmx.com> y-p <yo...@gmx.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/.travis.yml new/ipykernel-5.1.4/.travis.yml --- old/ipykernel-5.1.3/.travis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/.travis.yml 2019-12-10 14:00:44.000000000 +0100 @@ -0,0 +1,47 @@ +language: python +python: + - "nightly" + - 3.8 + - 3.7 + - 3.6 + - 3.5 +sudo: false +dist: xenial +install: + - | + # pip install + pip install --upgrade setuptools pip + pip install --pre --upgrade --upgrade-strategy=eager .[test] codecov + - | + # install matplotlib + if [[ "$TRAVIS_PYTHON_VERSION" == "3.6" ]]; then + pip install matplotlib curio trio + fi + - | + # pin tornado + if [[ ! -z "$TORNADO" ]]; then + pip install tornado=="$TORNADO" + fi + - | + # pin IPython + if [[ ! -z "$IPYTHON" ]]; then + if [[ "$IPYTHON" == "master" ]]; then + SPEC=git+https://github.com/ipython/ipython#egg=ipython + else + SPEC="ipython==$IPYTHON" + fi + pip install --upgrade --pre "$SPEC" + fi + - pip freeze +script: + - jupyter kernelspec list + - pytest --cov ipykernel --durations 10 -v ipykernel +after_success: + - codecov +matrix: + include: + - python: 3.6 + env: + - IPYTHON=master + allow_failures: + - python: "nightly" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/PKG-INFO new/ipykernel-5.1.4/PKG-INFO --- old/ipykernel-5.1.3/PKG-INFO 2019-10-20 13:55:39.000000000 +0200 +++ new/ipykernel-5.1.4/PKG-INFO 2020-01-27 11:37:26.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ipykernel -Version: 5.1.3 +Version: 5.1.4 Summary: IPython Kernel for Jupyter Home-page: https://ipython.org Author: IPython Development Team diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/appveyor.yml new/ipykernel-5.1.4/appveyor.yml --- old/ipykernel-5.1.3/appveyor.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/appveyor.yml 2018-09-14 10:31:39.000000000 +0200 @@ -0,0 +1,33 @@ +build: false +shallow_clone: false +skip_branch_with_pr: true +clone_depth: 1 + +environment: + + matrix: + - python: "C:/Python36-x64" + - python: "C:/Python36" + +cache: + - C:\Users\appveyor\AppData\Local\pip\Cache + +init: + - cmd: set PATH=%python%;%python%\scripts;%PATH% +install: + - cmd: | + python -m pip install --upgrade setuptools pip wheel + pip --version + - cmd: | + pip install --pre -e . + pip install ipykernel[test] + - cmd: | + pip install matplotlib numpy + pip freeze + - cmd: python -c "import ipykernel.kernelspec; ipykernel.kernelspec.install(user=True)" +test_script: + - cmd: pytest -v --cov ipykernel ipykernel + +on_success: + - cmd: pip install codecov + - cmd: codecov diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/docs/changelog.rst new/ipykernel-5.1.4/docs/changelog.rst --- old/ipykernel-5.1.3/docs/changelog.rst 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/docs/changelog.rst 2020-01-27 11:36:40.000000000 +0100 @@ -4,6 +4,17 @@ 5.1 --- +5.1.4 +***** + +5.1.4 Includes a few bugfixes, +especially for compatibility with Python 3.8 on Windows. + +- Fix pickle issues when using inline matplotlib backend (:ghpull:`476`) +- Fix an error during kernel shutdown (:ghpull:`463`) +- Fix compatibility issues with Python 3.8 (:ghpull:`456`, :ghpull:`461`) +- Remove some dead code (:ghpull:`474`, :ghpull:`467`) + 5.1.3 ***** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/Embedding/inprocess_qtconsole.py new/ipykernel-5.1.4/examples/Embedding/inprocess_qtconsole.py --- old/ipykernel-5.1.3/examples/Embedding/inprocess_qtconsole.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/examples/Embedding/inprocess_qtconsole.py 2015-04-09 10:09:32.000000000 +0200 @@ -0,0 +1,46 @@ +from __future__ import print_function +import os + +from IPython.qt.console.rich_ipython_widget import RichIPythonWidget +from IPython.qt.inprocess import QtInProcessKernelManager +from IPython.lib import guisupport + + +def print_process_id(): + print('Process ID is:', os.getpid()) + + +def main(): + # Print the ID of the main process + print_process_id() + + app = guisupport.get_app_qt4() + + # Create an in-process kernel + # >>> print_process_id() + # will print the same process ID as the main process + kernel_manager = QtInProcessKernelManager() + kernel_manager.start_kernel() + kernel = kernel_manager.kernel + kernel.gui = 'qt4' + kernel.shell.push({'foo': 43, 'print_process_id': print_process_id}) + + kernel_client = kernel_manager.client() + kernel_client.start_channels() + + def stop(): + kernel_client.stop_channels() + kernel_manager.shutdown_kernel() + app.exit() + + control = RichIPythonWidget() + control.kernel_manager = kernel_manager + control.kernel_client = kernel_client + control.exit_requested.connect(stop) + control.show() + + guisupport.start_event_loop_qt4(app) + + +if __name__ == '__main__': + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/Embedding/inprocess_terminal.py new/ipykernel-5.1.4/examples/Embedding/inprocess_terminal.py --- old/ipykernel-5.1.3/examples/Embedding/inprocess_terminal.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/examples/Embedding/inprocess_terminal.py 2015-04-09 10:09:32.000000000 +0200 @@ -0,0 +1,31 @@ +from __future__ import print_function +import os + +from IPython.kernel.inprocess import InProcessKernelManager +from IPython.terminal.console.interactiveshell import ZMQTerminalInteractiveShell + + +def print_process_id(): + print('Process ID is:', os.getpid()) + + +def main(): + print_process_id() + + # Create an in-process kernel + # >>> print_process_id() + # will print the same process ID as the main process + kernel_manager = InProcessKernelManager() + kernel_manager.start_kernel() + kernel = kernel_manager.kernel + kernel.gui = 'qt4' + kernel.shell.push({'foo': 43, 'print_process_id': print_process_id}) + client = kernel_manager.client() + client.start_channels() + + shell = ZMQTerminalInteractiveShell(manager=kernel_manager, client=client) + shell.mainloop() + + +if __name__ == '__main__': + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/Embedding/internal_ipkernel.py new/ipykernel-5.1.4/examples/Embedding/internal_ipkernel.py --- old/ipykernel-5.1.3/examples/Embedding/internal_ipkernel.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/examples/Embedding/internal_ipkernel.py 2015-09-22 09:39:51.000000000 +0200 @@ -0,0 +1,55 @@ +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- + +import sys + +from IPython.lib.kernel import connect_qtconsole +from IPython.kernel.zmq.kernelapp import IPKernelApp + +#----------------------------------------------------------------------------- +# Functions and classes +#----------------------------------------------------------------------------- +def mpl_kernel(gui): + """Launch and return an IPython kernel with matplotlib support for the desired gui + """ + kernel = IPKernelApp.instance() + kernel.initialize(['python', '--matplotlib=%s' % gui, + #'--log-level=10' + ]) + return kernel + + +class InternalIPKernel(object): + + def init_ipkernel(self, backend): + # Start IPython kernel with GUI event loop and mpl support + self.ipkernel = mpl_kernel(backend) + # To create and track active qt consoles + self.consoles = [] + + # This application will also act on the shell user namespace + self.namespace = self.ipkernel.shell.user_ns + + # Example: a variable that will be seen by the user in the shell, and + # that the GUI modifies (the 'Counter++' button increments it): + self.namespace['app_counter'] = 0 + #self.namespace['ipkernel'] = self.ipkernel # dbg + + def print_namespace(self, evt=None): + print("\n***Variables in User namespace***") + for k, v in self.namespace.items(): + if not k.startswith('_'): + print('%s -> %r' % (k, v)) + sys.stdout.flush() + + def new_qt_console(self, evt=None): + """start a new qtconsole connected to our kernel""" + return connect_qtconsole(self.ipkernel.abs_connection_file, profile=self.ipkernel.profile) + + def count(self, evt=None): + self.namespace['app_counter'] += 1 + + def cleanup_consoles(self, evt=None): + for c in self.consoles: + c.kill() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/Embedding/ipkernel_qtapp.py new/ipykernel-5.1.4/examples/Embedding/ipkernel_qtapp.py --- old/ipykernel-5.1.3/examples/Embedding/ipkernel_qtapp.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/examples/Embedding/ipkernel_qtapp.py 2015-04-09 10:09:32.000000000 +0200 @@ -0,0 +1,75 @@ +#!/usr/bin/env python +"""Example integrating an IPython kernel into a GUI App. + +This trivial GUI application internally starts an IPython kernel, to which Qt +consoles can be connected either by the user at the command line or started +from the GUI itself, via a button. The GUI can also manipulate one variable in +the kernel's namespace, and print the namespace to the console. + +Play with it by running the script and then opening one or more consoles, and +pushing the 'Counter++' and 'Namespace' buttons. + +Upon exit, it should automatically close all consoles opened from the GUI. + +Consoles attached separately from a terminal will not be terminated, though +they will notice that their kernel died. +""" +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- + +from PyQt4 import Qt + +from internal_ipkernel import InternalIPKernel + +#----------------------------------------------------------------------------- +# Functions and classes +#----------------------------------------------------------------------------- +class SimpleWindow(Qt.QWidget, InternalIPKernel): + + def __init__(self, app): + Qt.QWidget.__init__(self) + self.app = app + self.add_widgets() + self.init_ipkernel('qt') + + def add_widgets(self): + self.setGeometry(300, 300, 400, 70) + self.setWindowTitle('IPython in your app') + + # Add simple buttons: + console = Qt.QPushButton('Qt Console', self) + console.setGeometry(10, 10, 100, 35) + self.connect(console, Qt.SIGNAL('clicked()'), self.new_qt_console) + + namespace = Qt.QPushButton('Namespace', self) + namespace.setGeometry(120, 10, 100, 35) + self.connect(namespace, Qt.SIGNAL('clicked()'), self.print_namespace) + + count = Qt.QPushButton('Count++', self) + count.setGeometry(230, 10, 80, 35) + self.connect(count, Qt.SIGNAL('clicked()'), self.count) + + # Quit and cleanup + quit = Qt.QPushButton('Quit', self) + quit.setGeometry(320, 10, 60, 35) + self.connect(quit, Qt.SIGNAL('clicked()'), Qt.qApp, Qt.SLOT('quit()')) + + self.app.connect(self.app, Qt.SIGNAL("lastWindowClosed()"), + self.app, Qt.SLOT("quit()")) + + self.app.aboutToQuit.connect(self.cleanup_consoles) + +#----------------------------------------------------------------------------- +# Main script +#----------------------------------------------------------------------------- + +if __name__ == "__main__": + app = Qt.QApplication([]) + # Create our window + win = SimpleWindow(app) + win.show() + + # Very important, IPython-specific step: this gets GUI event loop + # integration going, and it replaces calling app.exec_() + win.ipkernel.start() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/Embedding/ipkernel_wxapp.py new/ipykernel-5.1.4/examples/Embedding/ipkernel_wxapp.py --- old/ipykernel-5.1.3/examples/Embedding/ipkernel_wxapp.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/examples/Embedding/ipkernel_wxapp.py 2015-04-09 10:09:32.000000000 +0200 @@ -0,0 +1,119 @@ +#!/usr/bin/env python +"""Example integrating an IPython kernel into a GUI App. + +This trivial GUI application internally starts an IPython kernel, to which Qt +consoles can be connected either by the user at the command line or started +from the GUI itself, via a button. The GUI can also manipulate one variable in +the kernel's namespace, and print the namespace to the console. + +Play with it by running the script and then opening one or more consoles, and +pushing the 'Counter++' and 'Namespace' buttons. + +Upon exit, it should automatically close all consoles opened from the GUI. + +Consoles attached separately from a terminal will not be terminated, though +they will notice that their kernel died. + +Ref: Modified from wxPython source code wxPython/samples/simple/simple.py +""" +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- +import sys + +import wx + +from internal_ipkernel import InternalIPKernel + +#----------------------------------------------------------------------------- +# Functions and classes +#----------------------------------------------------------------------------- + +class MyFrame(wx.Frame, InternalIPKernel): + """ + This is MyFrame. It just shows a few controls on a wxPanel, + and has a simple menu. + """ + + def __init__(self, parent, title): + wx.Frame.__init__(self, parent, -1, title, + pos=(150, 150), size=(350, 285)) + + # Create the menubar + menuBar = wx.MenuBar() + + # and a menu + menu = wx.Menu() + + # add an item to the menu, using \tKeyName automatically + # creates an accelerator, the third param is some help text + # that will show up in the statusbar + menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample") + + # bind the menu event to an event handler + self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT) + + # and put the menu on the menubar + menuBar.Append(menu, "&File") + self.SetMenuBar(menuBar) + + self.CreateStatusBar() + + # Now create the Panel to put the other controls on. + panel = wx.Panel(self) + + # and a few controls + text = wx.StaticText(panel, -1, "Hello World!") + text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) + text.SetSize(text.GetBestSize()) + qtconsole_btn = wx.Button(panel, -1, "Qt Console") + ns_btn = wx.Button(panel, -1, "Namespace") + count_btn = wx.Button(panel, -1, "Count++") + close_btn = wx.Button(panel, -1, "Quit") + + # bind the button events to handlers + self.Bind(wx.EVT_BUTTON, self.new_qt_console, qtconsole_btn) + self.Bind(wx.EVT_BUTTON, self.print_namespace, ns_btn) + self.Bind(wx.EVT_BUTTON, self.count, count_btn) + self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, close_btn) + + # Use a sizer to layout the controls, stacked vertically and with + # a 10 pixel border around each + sizer = wx.BoxSizer(wx.VERTICAL) + for ctrl in [text, qtconsole_btn, ns_btn, count_btn, close_btn]: + sizer.Add(ctrl, 0, wx.ALL, 10) + panel.SetSizer(sizer) + panel.Layout() + + # Start the IPython kernel with gui support + self.init_ipkernel('wx') + + def OnTimeToClose(self, evt): + """Event handler for the button click.""" + print("See ya later!") + sys.stdout.flush() + self.cleanup_consoles(evt) + self.Close() + # Not sure why, but our IPython kernel seems to prevent normal WX + # shutdown, so an explicit exit() call is needed. + sys.exit() + + +class MyApp(wx.App): + def OnInit(self): + frame = MyFrame(None, "Simple wxPython App") + self.SetTopWindow(frame) + frame.Show(True) + self.ipkernel = frame.ipkernel + return True + +#----------------------------------------------------------------------------- +# Main script +#----------------------------------------------------------------------------- + +if __name__ == '__main__': + app = MyApp(redirect=False, clearSigInt=False) + + # Very important, IPython-specific step: this gets GUI event loop + # integration going, and it replaces calling app.MainLoop() + app.ipkernel.start() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/embedding/inprocess_qtconsole.py new/ipykernel-5.1.4/examples/embedding/inprocess_qtconsole.py --- old/ipykernel-5.1.3/examples/embedding/inprocess_qtconsole.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/examples/embedding/inprocess_qtconsole.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,46 +0,0 @@ -from __future__ import print_function -import os - -from IPython.qt.console.rich_ipython_widget import RichIPythonWidget -from IPython.qt.inprocess import QtInProcessKernelManager -from IPython.lib import guisupport - - -def print_process_id(): - print('Process ID is:', os.getpid()) - - -def main(): - # Print the ID of the main process - print_process_id() - - app = guisupport.get_app_qt4() - - # Create an in-process kernel - # >>> print_process_id() - # will print the same process ID as the main process - kernel_manager = QtInProcessKernelManager() - kernel_manager.start_kernel() - kernel = kernel_manager.kernel - kernel.gui = 'qt4' - kernel.shell.push({'foo': 43, 'print_process_id': print_process_id}) - - kernel_client = kernel_manager.client() - kernel_client.start_channels() - - def stop(): - kernel_client.stop_channels() - kernel_manager.shutdown_kernel() - app.exit() - - control = RichIPythonWidget() - control.kernel_manager = kernel_manager - control.kernel_client = kernel_client - control.exit_requested.connect(stop) - control.show() - - guisupport.start_event_loop_qt4(app) - - -if __name__ == '__main__': - main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/embedding/inprocess_terminal.py new/ipykernel-5.1.4/examples/embedding/inprocess_terminal.py --- old/ipykernel-5.1.3/examples/embedding/inprocess_terminal.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/examples/embedding/inprocess_terminal.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -from __future__ import print_function -import os - -from IPython.kernel.inprocess import InProcessKernelManager -from IPython.terminal.console.interactiveshell import ZMQTerminalInteractiveShell - - -def print_process_id(): - print('Process ID is:', os.getpid()) - - -def main(): - print_process_id() - - # Create an in-process kernel - # >>> print_process_id() - # will print the same process ID as the main process - kernel_manager = InProcessKernelManager() - kernel_manager.start_kernel() - kernel = kernel_manager.kernel - kernel.gui = 'qt4' - kernel.shell.push({'foo': 43, 'print_process_id': print_process_id}) - client = kernel_manager.client() - client.start_channels() - - shell = ZMQTerminalInteractiveShell(manager=kernel_manager, client=client) - shell.mainloop() - - -if __name__ == '__main__': - main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/embedding/internal_ipkernel.py new/ipykernel-5.1.4/examples/embedding/internal_ipkernel.py --- old/ipykernel-5.1.3/examples/embedding/internal_ipkernel.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/examples/embedding/internal_ipkernel.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,55 +0,0 @@ -#----------------------------------------------------------------------------- -# Imports -#----------------------------------------------------------------------------- - -import sys - -from IPython.lib.kernel import connect_qtconsole -from IPython.kernel.zmq.kernelapp import IPKernelApp - -#----------------------------------------------------------------------------- -# Functions and classes -#----------------------------------------------------------------------------- -def mpl_kernel(gui): - """Launch and return an IPython kernel with matplotlib support for the desired gui - """ - kernel = IPKernelApp.instance() - kernel.initialize(['python', '--matplotlib=%s' % gui, - #'--log-level=10' - ]) - return kernel - - -class InternalIPKernel(object): - - def init_ipkernel(self, backend): - # Start IPython kernel with GUI event loop and mpl support - self.ipkernel = mpl_kernel(backend) - # To create and track active qt consoles - self.consoles = [] - - # This application will also act on the shell user namespace - self.namespace = self.ipkernel.shell.user_ns - - # Example: a variable that will be seen by the user in the shell, and - # that the GUI modifies (the 'Counter++' button increments it): - self.namespace['app_counter'] = 0 - #self.namespace['ipkernel'] = self.ipkernel # dbg - - def print_namespace(self, evt=None): - print("\n***Variables in User namespace***") - for k, v in self.namespace.items(): - if not k.startswith('_'): - print('%s -> %r' % (k, v)) - sys.stdout.flush() - - def new_qt_console(self, evt=None): - """start a new qtconsole connected to our kernel""" - return connect_qtconsole(self.ipkernel.abs_connection_file, profile=self.ipkernel.profile) - - def count(self, evt=None): - self.namespace['app_counter'] += 1 - - def cleanup_consoles(self, evt=None): - for c in self.consoles: - c.kill() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/embedding/ipkernel_qtapp.py new/ipykernel-5.1.4/examples/embedding/ipkernel_qtapp.py --- old/ipykernel-5.1.3/examples/embedding/ipkernel_qtapp.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/examples/embedding/ipkernel_qtapp.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,75 +0,0 @@ -#!/usr/bin/env python -"""Example integrating an IPython kernel into a GUI App. - -This trivial GUI application internally starts an IPython kernel, to which Qt -consoles can be connected either by the user at the command line or started -from the GUI itself, via a button. The GUI can also manipulate one variable in -the kernel's namespace, and print the namespace to the console. - -Play with it by running the script and then opening one or more consoles, and -pushing the 'Counter++' and 'Namespace' buttons. - -Upon exit, it should automatically close all consoles opened from the GUI. - -Consoles attached separately from a terminal will not be terminated, though -they will notice that their kernel died. -""" -#----------------------------------------------------------------------------- -# Imports -#----------------------------------------------------------------------------- - -from PyQt4 import Qt - -from internal_ipkernel import InternalIPKernel - -#----------------------------------------------------------------------------- -# Functions and classes -#----------------------------------------------------------------------------- -class SimpleWindow(Qt.QWidget, InternalIPKernel): - - def __init__(self, app): - Qt.QWidget.__init__(self) - self.app = app - self.add_widgets() - self.init_ipkernel('qt') - - def add_widgets(self): - self.setGeometry(300, 300, 400, 70) - self.setWindowTitle('IPython in your app') - - # Add simple buttons: - console = Qt.QPushButton('Qt Console', self) - console.setGeometry(10, 10, 100, 35) - self.connect(console, Qt.SIGNAL('clicked()'), self.new_qt_console) - - namespace = Qt.QPushButton('Namespace', self) - namespace.setGeometry(120, 10, 100, 35) - self.connect(namespace, Qt.SIGNAL('clicked()'), self.print_namespace) - - count = Qt.QPushButton('Count++', self) - count.setGeometry(230, 10, 80, 35) - self.connect(count, Qt.SIGNAL('clicked()'), self.count) - - # Quit and cleanup - quit = Qt.QPushButton('Quit', self) - quit.setGeometry(320, 10, 60, 35) - self.connect(quit, Qt.SIGNAL('clicked()'), Qt.qApp, Qt.SLOT('quit()')) - - self.app.connect(self.app, Qt.SIGNAL("lastWindowClosed()"), - self.app, Qt.SLOT("quit()")) - - self.app.aboutToQuit.connect(self.cleanup_consoles) - -#----------------------------------------------------------------------------- -# Main script -#----------------------------------------------------------------------------- - -if __name__ == "__main__": - app = Qt.QApplication([]) - # Create our window - win = SimpleWindow(app) - win.show() - - # Very important, IPython-specific step: this gets GUI event loop - # integration going, and it replaces calling app.exec_() - win.ipkernel.start() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/examples/embedding/ipkernel_wxapp.py new/ipykernel-5.1.4/examples/embedding/ipkernel_wxapp.py --- old/ipykernel-5.1.3/examples/embedding/ipkernel_wxapp.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/examples/embedding/ipkernel_wxapp.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,119 +0,0 @@ -#!/usr/bin/env python -"""Example integrating an IPython kernel into a GUI App. - -This trivial GUI application internally starts an IPython kernel, to which Qt -consoles can be connected either by the user at the command line or started -from the GUI itself, via a button. The GUI can also manipulate one variable in -the kernel's namespace, and print the namespace to the console. - -Play with it by running the script and then opening one or more consoles, and -pushing the 'Counter++' and 'Namespace' buttons. - -Upon exit, it should automatically close all consoles opened from the GUI. - -Consoles attached separately from a terminal will not be terminated, though -they will notice that their kernel died. - -Ref: Modified from wxPython source code wxPython/samples/simple/simple.py -""" -#----------------------------------------------------------------------------- -# Imports -#----------------------------------------------------------------------------- -import sys - -import wx - -from internal_ipkernel import InternalIPKernel - -#----------------------------------------------------------------------------- -# Functions and classes -#----------------------------------------------------------------------------- - -class MyFrame(wx.Frame, InternalIPKernel): - """ - This is MyFrame. It just shows a few controls on a wxPanel, - and has a simple menu. - """ - - def __init__(self, parent, title): - wx.Frame.__init__(self, parent, -1, title, - pos=(150, 150), size=(350, 285)) - - # Create the menubar - menuBar = wx.MenuBar() - - # and a menu - menu = wx.Menu() - - # add an item to the menu, using \tKeyName automatically - # creates an accelerator, the third param is some help text - # that will show up in the statusbar - menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample") - - # bind the menu event to an event handler - self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT) - - # and put the menu on the menubar - menuBar.Append(menu, "&File") - self.SetMenuBar(menuBar) - - self.CreateStatusBar() - - # Now create the Panel to put the other controls on. - panel = wx.Panel(self) - - # and a few controls - text = wx.StaticText(panel, -1, "Hello World!") - text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) - text.SetSize(text.GetBestSize()) - qtconsole_btn = wx.Button(panel, -1, "Qt Console") - ns_btn = wx.Button(panel, -1, "Namespace") - count_btn = wx.Button(panel, -1, "Count++") - close_btn = wx.Button(panel, -1, "Quit") - - # bind the button events to handlers - self.Bind(wx.EVT_BUTTON, self.new_qt_console, qtconsole_btn) - self.Bind(wx.EVT_BUTTON, self.print_namespace, ns_btn) - self.Bind(wx.EVT_BUTTON, self.count, count_btn) - self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, close_btn) - - # Use a sizer to layout the controls, stacked vertically and with - # a 10 pixel border around each - sizer = wx.BoxSizer(wx.VERTICAL) - for ctrl in [text, qtconsole_btn, ns_btn, count_btn, close_btn]: - sizer.Add(ctrl, 0, wx.ALL, 10) - panel.SetSizer(sizer) - panel.Layout() - - # Start the IPython kernel with gui support - self.init_ipkernel('wx') - - def OnTimeToClose(self, evt): - """Event handler for the button click.""" - print("See ya later!") - sys.stdout.flush() - self.cleanup_consoles(evt) - self.Close() - # Not sure why, but our IPython kernel seems to prevent normal WX - # shutdown, so an explicit exit() call is needed. - sys.exit() - - -class MyApp(wx.App): - def OnInit(self): - frame = MyFrame(None, "Simple wxPython App") - self.SetTopWindow(frame) - frame.Show(True) - self.ipkernel = frame.ipkernel - return True - -#----------------------------------------------------------------------------- -# Main script -#----------------------------------------------------------------------------- - -if __name__ == '__main__': - app = MyApp(redirect=False, clearSigInt=False) - - # Very important, IPython-specific step: this gets GUI event loop - # integration going, and it replaces calling app.MainLoop() - app.ipkernel.start() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel/_version.py new/ipykernel-5.1.4/ipykernel/_version.py --- old/ipykernel-5.1.3/ipykernel/_version.py 2019-10-20 13:55:13.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel/_version.py 2020-01-27 11:33:05.000000000 +0100 @@ -1,4 +1,4 @@ -version_info = (5, 1, 3) +version_info = (5, 1, 4) __version__ = '.'.join(map(str, version_info[:3])) # pep440 is annoying, beta/alpha/rc should _not_ have dots or pip/setuptools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel/iostream.py new/ipykernel-5.1.4/ipykernel/iostream.py --- old/ipykernel-5.1.3/ipykernel/iostream.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel/iostream.py 2019-12-10 14:00:44.000000000 +0100 @@ -338,7 +338,7 @@ send will happen in the background thread """ - if self.pub_thread.thread.is_alive(): + if self.pub_thread and self.pub_thread.thread is not None and self.pub_thread.thread.is_alive(): # request flush on the background thread self.pub_thread.schedule(self._flush) # wait for flush to actually get through, if we can. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel/kernelapp.py new/ipykernel-5.1.4/ipykernel/kernelapp.py --- old/ipykernel-5.1.3/ipykernel/kernelapp.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel/kernelapp.py 2020-01-27 11:30:51.000000000 +0100 @@ -488,18 +488,6 @@ if self.shell: self.shell.configurables.append(self) - def init_extensions(self): - super(IPKernelApp, self).init_extensions() - # BEGIN HARDCODED WIDGETS HACK - # Ensure ipywidgets extension is loaded if available - extension_man = self.shell.extension_manager - if 'ipywidgets' not in extension_man.loaded: - try: - extension_man.load_extension('ipywidgets') - except ImportError as e: - self.log.debug('ipywidgets package not installed. Widgets will not be available.') - # END HARDCODED WIDGETS HACK - def configure_tornado_logger(self): """ Configure the tornado logging.Logger. @@ -514,13 +502,45 @@ handler.setFormatter(formatter) logger.addHandler(handler) + def _init_asyncio_patch(self): + """set default asyncio policy to be compatible with tornado + + Tornado 6 (at least) is not compatible with the default + asyncio implementation on Windows + + Pick the older SelectorEventLoopPolicy on Windows + if the known-incompatible default policy is in use. + + do this as early as possible to make it a low priority and overrideable + + ref: https://github.com/tornadoweb/tornado/issues/2608 + + FIXME: if/when tornado supports the defaults in asyncio, + remove and bump tornado requirement for py38 + """ + if sys.platform.startswith("win") and sys.version_info >= (3, 8): + import asyncio + try: + from asyncio import ( + WindowsProactorEventLoopPolicy, + WindowsSelectorEventLoopPolicy, + ) + except ImportError: + pass + # not affected + else: + if type(asyncio.get_event_loop_policy()) is WindowsProactorEventLoopPolicy: + # WindowsProactorEventLoopPolicy is not compatible with tornado 6 + # fallback to the pre-3.8 default of Selector + asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy()) + @catch_config_error def initialize(self, argv=None): + self._init_asyncio_patch() super(IPKernelApp, self).initialize(argv) if self.subapp is not None: return - # register zmq IOLoop with tornado - zmq_ioloop.install() + self.init_blackhole() self.init_connection_file() self.init_poller() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel/pylab/backend_inline.py new/ipykernel-5.1.4/ipykernel/pylab/backend_inline.py --- old/ipykernel-5.1.3/ipykernel/pylab/backend_inline.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel/pylab/backend_inline.py 2020-01-27 11:30:51.000000000 +0100 @@ -6,7 +6,11 @@ from __future__ import print_function import matplotlib -from matplotlib.backends.backend_agg import new_figure_manager, FigureCanvasAgg # analysis: ignore +from matplotlib.backends.backend_agg import ( + new_figure_manager, + FigureCanvasAgg, + new_figure_manager_given_figure, +) # analysis: ignore from matplotlib import colors from matplotlib._pylab_helpers import Gcf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel/serialize.py new/ipykernel-5.1.4/ipykernel/serialize.py --- old/ipykernel-5.1.3/ipykernel/serialize.py 2019-10-20 13:54:46.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel/serialize.py 2020-01-27 11:30:51.000000000 +0100 @@ -6,16 +6,10 @@ import warnings warnings.warn("ipykernel.serialize is deprecated. It has moved to ipyparallel.serialize", DeprecationWarning) -try: - import cPickle - pickle = cPickle -except: - cPickle = None - import pickle +import pickle from itertools import chain -from ipython_genutils.py3compat import PY3, buffer_to_bytes_py2 from ipykernel.pickleutil import ( can, uncan, can_sequence, uncan_sequence, CannedObject, istype, sequence_types, PICKLE_PROTOCOL, @@ -23,9 +17,6 @@ from jupyter_client.session import MAX_ITEMS, MAX_BYTES -if PY3: - buffer = memoryview - #----------------------------------------------------------------------------- # Serialization Functions #----------------------------------------------------------------------------- @@ -44,8 +35,6 @@ # because pickling buffer objects just results in broken pointers elif isinstance(buf, memoryview): obj.buffers[i] = buf.tobytes() - elif isinstance(buf, buffer): - obj.buffers[i] = bytes(buf) return buffers def _restore_buffers(obj, buffers): @@ -109,7 +98,7 @@ (newobj, bufs) : unpacked object, and the list of remaining unused buffers. """ bufs = list(buffers) - pobj = buffer_to_bytes_py2(bufs.pop(0)) + pobj = bufs.pop(0) canned = pickle.loads(pobj) if istype(canned, sequence_types) and len(canned) < MAX_ITEMS: for c in canned: @@ -164,9 +153,9 @@ Returns: original f,args,kwargs""" bufs = list(bufs) # allow us to pop assert len(bufs) >= 2, "not enough buffers!" - pf = buffer_to_bytes_py2(bufs.pop(0)) + pf = bufs.pop(0) f = uncan(pickle.loads(pf), g) - pinfo = buffer_to_bytes_py2(bufs.pop(0)) + pinfo = bufs.pop(0) info = pickle.loads(pinfo) arg_bufs, kwarg_bufs = bufs[:info['narg_bufs']], bufs[info['narg_bufs']:] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel.egg-info/PKG-INFO new/ipykernel-5.1.4/ipykernel.egg-info/PKG-INFO --- old/ipykernel-5.1.3/ipykernel.egg-info/PKG-INFO 2019-10-20 13:55:39.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel.egg-info/PKG-INFO 2020-01-27 11:37:25.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ipykernel -Version: 5.1.3 +Version: 5.1.4 Summary: IPython Kernel for Jupyter Home-page: https://ipython.org Author: IPython Development Team diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/ipykernel.egg-info/SOURCES.txt new/ipykernel-5.1.4/ipykernel.egg-info/SOURCES.txt --- old/ipykernel-5.1.3/ipykernel.egg-info/SOURCES.txt 2019-10-20 13:55:39.000000000 +0200 +++ new/ipykernel-5.1.4/ipykernel.egg-info/SOURCES.txt 2020-01-27 11:37:26.000000000 +0100 @@ -1,9 +1,14 @@ +.gitignore +.mailmap +.travis.yml CONTRIBUTING.md COPYING.md MANIFEST.in README.md +appveyor.yml ipykernel_launcher.py pyproject.toml +readthedocs.yml setup.cfg setup.py docs/Makefile @@ -12,11 +17,11 @@ docs/index.rst docs/make.bat docs/requirements.txt -examples/embedding/inprocess_qtconsole.py -examples/embedding/inprocess_terminal.py -examples/embedding/internal_ipkernel.py -examples/embedding/ipkernel_qtapp.py -examples/embedding/ipkernel_wxapp.py +examples/Embedding/inprocess_qtconsole.py +examples/Embedding/inprocess_terminal.py +examples/Embedding/internal_ipkernel.py +examples/Embedding/ipkernel_qtapp.py +examples/Embedding/ipkernel_wxapp.py ipykernel/__init__.py ipykernel/__main__.py ipykernel/_eventloop_macos.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-5.1.3/readthedocs.yml new/ipykernel-5.1.4/readthedocs.yml --- old/ipykernel-5.1.3/readthedocs.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-5.1.4/readthedocs.yml 2018-09-01 09:48:16.000000000 +0200 @@ -0,0 +1,4 @@ +python: + version: 3.5 + pip_install: true +requirements_file: docs/requirements.txt