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 - toddrme2...@gmail.com + +- 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'] = {