From 6b3a4813a4d2793a295ea681fd5b9606ea045187 Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Wed, 9 Sep 2020 11:57:05 +0200 Subject: [PATCH 1/4] Fix stack levels for ipykernel's deprecation warnings --- ipykernel/codeutil.py | 5 ++++- ipykernel/datapub.py | 10 ++++++++-- ipykernel/log.py | 5 ++++- ipykernel/pickleutil.py | 5 ++++- ipykernel/serialize.py | 5 ++++- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/ipykernel/codeutil.py b/ipykernel/codeutil.py index 84a7ed7ec..08212a068 100644 --- a/ipykernel/codeutil.py +++ b/ipykernel/codeutil.py @@ -12,7 +12,10 @@ # Distributed under the terms of the Modified BSD License. import warnings -warnings.warn("ipykernel.codeutil is deprecated since IPykernel 4.3.1. It has moved to ipyparallel.serialize", DeprecationWarning) +warnings.warn("ipykernel.codeutil is deprecated since IPykernel 4.3.1. It has moved to ipyparallel.serialize", + DeprecationWarning, + stacklevel=2 +) import copyreg import sys diff --git a/ipykernel/datapub.py b/ipykernel/datapub.py index 0f765719c..9eec561e3 100644 --- a/ipykernel/datapub.py +++ b/ipykernel/datapub.py @@ -2,7 +2,10 @@ """ import warnings -warnings.warn("ipykernel.datapub is deprecated. It has moved to ipyparallel.datapub", DeprecationWarning) +warnings.warn("ipykernel.datapub is deprecated. It has moved to ipyparallel.datapub", + DeprecationWarning, + stacklevel=2 +) # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. @@ -56,7 +59,10 @@ def publish_data(data): data : dict The data to be published. Think of it as a namespace. """ - warnings.warn("ipykernel.datapub is deprecated. It has moved to ipyparallel.datapub", DeprecationWarning) + warnings.warn("ipykernel.datapub is deprecated. It has moved to ipyparallel.datapub", + DeprecationWarning, + stacklevel=2 + ) from ipykernel.zmqshell import ZMQInteractiveShell ZMQInteractiveShell.instance().data_pub.publish_data(data) diff --git a/ipykernel/log.py b/ipykernel/log.py index b46b22ab8..728623fc7 100644 --- a/ipykernel/log.py +++ b/ipykernel/log.py @@ -3,7 +3,10 @@ from zmq.log.handlers import PUBHandler import warnings -warnings.warn("ipykernel.log is deprecated. It has moved to ipyparallel.engine.log", DeprecationWarning) +warnings.warn("ipykernel.log is deprecated. It has moved to ipyparallel.engine.log", + DeprecationWarning + stacklevel=2 +) class EnginePUBHandler(PUBHandler): """A simple PUBHandler subclass that sets root_topic""" diff --git a/ipykernel/pickleutil.py b/ipykernel/pickleutil.py index 669b6ac91..c0dd4a807 100644 --- a/ipykernel/pickleutil.py +++ b/ipykernel/pickleutil.py @@ -4,7 +4,10 @@ # Distributed under the terms of the Modified BSD License. import warnings -warnings.warn("ipykernel.pickleutil is deprecated. It has moved to ipyparallel.", DeprecationWarning) +warnings.warn("ipykernel.pickleutil is deprecated. It has moved to ipyparallel.", + DeprecationWarning, + stacklevel=2 +) import copy import sys diff --git a/ipykernel/serialize.py b/ipykernel/serialize.py index 437ebb591..1739aadb2 100644 --- a/ipykernel/serialize.py +++ b/ipykernel/serialize.py @@ -4,7 +4,10 @@ # Distributed under the terms of the Modified BSD License. import warnings -warnings.warn("ipykernel.serialize is deprecated. It has moved to ipyparallel.serialize", DeprecationWarning) +warnings.warn("ipykernel.serialize is deprecated. It has moved to ipyparallel.serialize", + DeprecationWarning, + stacklevel=2 +) import pickle From c799c97cbcaaedad59156c922f5762f8bcef86c7 Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Wed, 9 Sep 2020 11:56:47 +0200 Subject: [PATCH 2/4] Stop using deprecated trailets api for observing --- ipykernel/ipkernel.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ipykernel/ipkernel.py b/ipykernel/ipkernel.py index c799518f4..661627352 100644 --- a/ipykernel/ipkernel.py +++ b/ipykernel/ipkernel.py @@ -12,7 +12,7 @@ from ipython_genutils.py3compat import safe_unicode from IPython.utils.tokenutil import token_at_cursor, line_at_cursor from tornado import gen -from traitlets import Instance, Type, Any, List, Bool +from traitlets import Instance, Type, Any, List, Bool, observe, observe_compat from .comm import CommManager from .kernelbase import Kernel as KernelBase @@ -43,14 +43,18 @@ class IPythonKernel(KernelBase): ).tag(config=True) user_module = Any() - def _user_module_changed(self, name, old, new): + @observe('user_module') + @observe_compat + def _user_module_changed(self, change): if self.shell is not None: - self.shell.user_module = new + self.shell.user_module = change['new'] user_ns = Instance(dict, args=None, allow_none=True) - def _user_ns_changed(self, name, old, new): + @observe('user_ns') + @observe_compat + def _user_ns_changed(self, change): if self.shell is not None: - self.shell.user_ns = new + self.shell.user_ns = change['new'] self.shell.init_user_ns() # A reference to the Python builtin 'raw_input' function. From 2b72a63a3651a398d9ca7c0f9c0be73e79ec9e4c Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Wed, 9 Sep 2020 14:53:43 +0200 Subject: [PATCH 3/4] Use the non-deprecated ipyparallel interfaces when available --- ipykernel/datapub.py | 7 ++++++- ipykernel/serialize.py | 17 +++++++++++++---- ipykernel/zmqshell.py | 9 ++++++++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ipykernel/datapub.py b/ipykernel/datapub.py index 9eec561e3..19db14a6c 100644 --- a/ipykernel/datapub.py +++ b/ipykernel/datapub.py @@ -13,7 +13,12 @@ from traitlets.config import Configurable from traitlets import Instance, Dict, CBytes, Any from ipykernel.jsonutil import json_clean -from ipykernel.serialize import serialize_object +try: + # available since ipyparallel 5.0.0 + from ipyparallel.serialize import serialize_object +except ImportError: + # Deprecated since ipykernel 4.3.0 + from ipykernel.serialize import serialize_object from jupyter_client.session import Session, extract_header diff --git a/ipykernel/serialize.py b/ipykernel/serialize.py index 1739aadb2..a8558e80a 100644 --- a/ipykernel/serialize.py +++ b/ipykernel/serialize.py @@ -13,10 +13,19 @@ from itertools import chain -from ipykernel.pickleutil import ( - can, uncan, can_sequence, uncan_sequence, CannedObject, - istype, sequence_types, PICKLE_PROTOCOL, -) +try: + # available since ipyparallel 5.0.0 + from ipyparallel.serialize.canning import ( + can, uncan, can_sequence, uncan_sequence, CannedObject, + istype, sequence_types, + ) + from ipyparallel.serialize.serialize import PICKLE_PROTOCOL +except ImportError: + # Deprecated since ipykernel 4.3.0 + from ipykernel.pickleutil import ( + can, uncan, can_sequence, uncan_sequence, CannedObject, + istype, sequence_types, PICKLE_PROTOCOL, + ) from jupyter_client.session import MAX_ITEMS, MAX_BYTES diff --git a/ipykernel/zmqshell.py b/ipykernel/zmqshell.py index b4056e54e..1e68569d1 100644 --- a/ipykernel/zmqshell.py +++ b/ipykernel/zmqshell.py @@ -49,6 +49,13 @@ from jupyter_core.paths import jupyter_runtime_dir from jupyter_client.session import extract_header, Session +try: + # available since ipyparallel 5.0.0 + from ipyparallel.engine.datapub import ZMQDataPublisher +except ImportError: + # Deprecated since ipykernel 4.3.0 + from ipykernel.datapub import ZMQDataPublisher + #----------------------------------------------------------------------------- # Functions and classes #----------------------------------------------------------------------------- @@ -438,7 +445,7 @@ class ZMQInteractiveShell(InteractiveShell): displayhook_class = Type(ZMQShellDisplayHook) display_pub_class = Type(ZMQDisplayPublisher) - data_pub_class = Type('ipykernel.datapub.ZMQDataPublisher') + data_pub_class = Type(ZMQDataPublisher) kernel = Any() parent_header = Any() From c943abe8d74466621c0ac0090ed3e4da3918d82e Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Wed, 9 Sep 2020 15:15:25 +0200 Subject: [PATCH 4/4] Use the tornado's IOLoop with pyzmq>=17 --- ipykernel/iostream.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ipykernel/iostream.py b/ipykernel/iostream.py index 64df8c7f6..4d1e6c95d 100644 --- a/ipykernel/iostream.py +++ b/ipykernel/iostream.py @@ -14,7 +14,11 @@ from io import StringIO, TextIOBase import zmq -from zmq.eventloop.ioloop import IOLoop +if zmq.pyzmq_version_info() >= (17, 0): + from tornado.ioloop import IOLoop +else: + # deprecated since pyzmq 17 + from zmq.eventloop.ioloop import IOLoop from zmq.eventloop.zmqstream import ZMQStream from jupyter_client.session import extract_header