Hello community,
here is the log from the commit of package python-jupyter_ipykernel for
openSUSE:Factory checked in at 2018-02-16 21:44:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter_ipykernel (Old)
and /work/SRC/openSUSE:Factory/.python-jupyter_ipykernel.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jupyter_ipykernel"
Fri Feb 16 21:44:04 2018 rev:8 rq:577065 version:4.8.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-jupyter_ipykernel/python-jupyter_ipykernel-doc.changes
2018-02-15 13:27:20.107990204 +0100
+++
/work/SRC/openSUSE:Factory/.python-jupyter_ipykernel.new/python-jupyter_ipykernel-doc.changes
2018-02-16 21:44:05.108358264 +0100
@@ -1,0 +2,10 @@
+Thu Feb 15 14:59:24 UTC 2018 - [email protected]
+
+- Update to version 4.8.0
+ * set zmq.ROUTER_HANDOVER socket option when available
+ to workaround libzmq reconnect bug (:ghpull:`300`).
+ * Fix sdists including absolute paths for kernelspec files,
+ which prevented installation from sdist on Windows
+ (:ghpull:`306`).
+
+-------------------------------------------------------------------
python-jupyter_ipykernel.changes: same change
Old:
----
ipykernel-4.8.0.tar.gz
New:
----
ipykernel-4.8.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jupyter_ipykernel-doc.spec ++++++
--- /var/tmp/diff_new_pack.zBEmh3/_old 2018-02-16 21:44:05.848331577 +0100
+++ /var/tmp/diff_new_pack.zBEmh3/_new 2018-02-16 21:44:05.852331433 +0100
@@ -22,7 +22,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-jupyter_ipykernel-doc
-Version: 4.8.0
+Version: 4.8.1
Release: 0
Summary: Documentation for python-jupyter_ipykernel
License: BSD-3-Clause
python-jupyter_ipykernel.spec: same change
++++++ ipykernel-4.8.0.tar.gz -> ipykernel-4.8.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-4.8.0/PKG-INFO new/ipykernel-4.8.1/PKG-INFO
--- old/ipykernel-4.8.0/PKG-INFO 2018-01-17 18:37:38.000000000 +0100
+++ new/ipykernel-4.8.1/PKG-INFO 2018-02-08 17:59:54.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: ipykernel
-Version: 4.8.0
+Version: 4.8.1
Summary: IPython Kernel for Jupyter
Home-page: http://ipython.org
Author: IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-4.8.0/docs/changelog.rst
new/ipykernel-4.8.1/docs/changelog.rst
--- old/ipykernel-4.8.0/docs/changelog.rst 2018-01-17 18:27:19.000000000
+0100
+++ new/ipykernel-4.8.1/docs/changelog.rst 2018-02-08 17:58:36.000000000
+0100
@@ -4,6 +4,17 @@
4.8
---
+4.8.1
+*****
+
+`4.8.1 on GitHub <https://github.com/ipython/ipykernel/milestones/4.8.1>`__
+
+- set zmq.ROUTER_HANDOVER socket option when available
+ to workaround libzmq reconnect bug (:ghpull:`300`).
+- Fix sdists including absolute paths for kernelspec files,
+ which prevented installation from sdist on Windows
+ (:ghpull:`306`).
+
4.8.0
*****
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ipykernel-4.8.0/examples/Embedding/inprocess_qtconsole.py
new/ipykernel-4.8.1/examples/Embedding/inprocess_qtconsole.py
--- old/ipykernel-4.8.0/examples/Embedding/inprocess_qtconsole.py
1970-01-01 01:00:00.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/Embedding/inprocess_terminal.py
new/ipykernel-4.8.1/examples/Embedding/inprocess_terminal.py
--- old/ipykernel-4.8.0/examples/Embedding/inprocess_terminal.py
1970-01-01 01:00:00.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/Embedding/internal_ipkernel.py
new/ipykernel-4.8.1/examples/Embedding/internal_ipkernel.py
--- old/ipykernel-4.8.0/examples/Embedding/internal_ipkernel.py 1970-01-01
01:00:00.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/Embedding/ipkernel_qtapp.py
new/ipykernel-4.8.1/examples/Embedding/ipkernel_qtapp.py
--- old/ipykernel-4.8.0/examples/Embedding/ipkernel_qtapp.py 1970-01-01
01:00:00.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/Embedding/ipkernel_wxapp.py
new/ipykernel-4.8.1/examples/Embedding/ipkernel_wxapp.py
--- old/ipykernel-4.8.0/examples/Embedding/ipkernel_wxapp.py 1970-01-01
01:00:00.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/embedding/inprocess_qtconsole.py
new/ipykernel-4.8.1/examples/embedding/inprocess_qtconsole.py
--- old/ipykernel-4.8.0/examples/embedding/inprocess_qtconsole.py
2015-12-01 18:24:35.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/embedding/inprocess_terminal.py
new/ipykernel-4.8.1/examples/embedding/inprocess_terminal.py
--- old/ipykernel-4.8.0/examples/embedding/inprocess_terminal.py
2015-12-01 18:24:35.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/embedding/internal_ipkernel.py
new/ipykernel-4.8.1/examples/embedding/internal_ipkernel.py
--- old/ipykernel-4.8.0/examples/embedding/internal_ipkernel.py 2015-12-01
18:24:35.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/embedding/ipkernel_qtapp.py
new/ipykernel-4.8.1/examples/embedding/ipkernel_qtapp.py
--- old/ipykernel-4.8.0/examples/embedding/ipkernel_qtapp.py 2015-12-01
18:24:35.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/examples/embedding/ipkernel_wxapp.py
new/ipykernel-4.8.1/examples/embedding/ipkernel_wxapp.py
--- old/ipykernel-4.8.0/examples/embedding/ipkernel_wxapp.py 2015-12-01
18:24:35.000000000 +0100
+++ new/ipykernel-4.8.1/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-4.8.0/ipykernel/_version.py
new/ipykernel-4.8.1/ipykernel/_version.py
--- old/ipykernel-4.8.0/ipykernel/_version.py 2018-01-17 18:30:25.000000000
+0100
+++ new/ipykernel-4.8.1/ipykernel/_version.py 2018-02-08 17:55:06.000000000
+0100
@@ -1,4 +1,4 @@
-version_info = (4, 8, 0)
+version_info = (4, 8, 1)
__version__ = '.'.join(map(str, version_info))
kernel_protocol_version_info = (5, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-4.8.0/ipykernel/kernelapp.py
new/ipykernel-4.8.1/ipykernel/kernelapp.py
--- old/ipykernel-4.8.0/ipykernel/kernelapp.py 2018-01-10 12:43:25.000000000
+0100
+++ new/ipykernel-4.8.1/ipykernel/kernelapp.py 2018-02-08 13:14:28.000000000
+0100
@@ -248,6 +248,14 @@
self.control_port = self._bind_socket(self.control_socket,
self.control_port)
self.log.debug("control ROUTER Channel on port: %i" %
self.control_port)
+ if hasattr(zmq, 'ROUTER_HANDOVER'):
+ # set router-handover to workaround zeromq reconnect problems
+ # in certain rare circumstances
+ # see ipython/ipykernel#270 and zeromq/libzmq#2892
+ self.shell_socket.router_handover = \
+ self.control_socket.router_handover = \
+ self.stdin_socket.router_handover = 1
+
self.init_iopub(context)
def init_iopub(self, context):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-4.8.0/ipykernel.egg-info/PKG-INFO
new/ipykernel-4.8.1/ipykernel.egg-info/PKG-INFO
--- old/ipykernel-4.8.0/ipykernel.egg-info/PKG-INFO 2018-01-17
18:37:38.000000000 +0100
+++ new/ipykernel-4.8.1/ipykernel.egg-info/PKG-INFO 2018-02-08
17:59:54.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: ipykernel
-Version: 4.8.0
+Version: 4.8.1
Summary: IPython Kernel for Jupyter
Home-page: http://ipython.org
Author: IPython Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ipykernel-4.8.0/ipykernel.egg-info/SOURCES.txt
new/ipykernel-4.8.1/ipykernel.egg-info/SOURCES.txt
--- old/ipykernel-4.8.0/ipykernel.egg-info/SOURCES.txt 2018-01-17
18:37:38.000000000 +0100
+++ new/ipykernel-4.8.1/ipykernel.egg-info/SOURCES.txt 2018-02-08
17:59:54.000000000 +0100
@@ -5,20 +5,17 @@
ipykernel_launcher.py
setup.cfg
setup.py
-/home/takluyver/Code/ipykernel/data_kernelspec/kernel.json
-/home/takluyver/Code/ipykernel/data_kernelspec/logo-32x32.png
-/home/takluyver/Code/ipykernel/data_kernelspec/logo-64x64.png
docs/Makefile
docs/changelog.rst
docs/conf.py
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-4.8.0/setup.py new/ipykernel-4.8.1/setup.py
--- old/ipykernel-4.8.0/setup.py 2018-01-10 12:43:25.000000000 +0100
+++ new/ipykernel-4.8.1/setup.py 2018-02-08 17:54:43.000000000 +0100
@@ -97,7 +97,8 @@
write_kernel_spec(dest, overrides={'argv': argv})
setup_args['data_files'] = [
- (pjoin('share', 'jupyter', 'kernels', KERNEL_NAME), glob(pjoin(dest,
'*'))),
+ (pjoin('share', 'jupyter', 'kernels', KERNEL_NAME),
+ glob(pjoin('data_kernelspec', '*'))),
]
extras_require = setuptools_args['extras_require'] = {