Hello community,

here is the log from the commit of package python-jupyter_client for 
openSUSE:Factory checked in at 2019-07-30 14:01:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter_client (Old)
 and      /work/SRC/openSUSE:Factory/.python-jupyter_client.new.4126 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-jupyter_client"

Tue Jul 30 14:01:55 2019 rev:10 rq:719302 version:5.3.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-jupyter_client/python-jupyter_client-doc.changes
  2019-05-22 11:05:14.598574957 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-jupyter_client.new.4126/python-jupyter_client-doc.changes
        2019-07-30 14:01:56.468975287 +0200
@@ -1,0 +2,16 @@
+Sat Jul 27 23:06:22 UTC 2019 - Todd R <toddrme2...@gmail.com>
+
+- Update to 5.3.1
+  * Fix bug with control channel socket introduced in 5.3.0
+- Update to 5.3.0
+  + New Features:
+    * Multiprocessing and Threading support
+    * Setup package long_description
+  + Changes:
+    * Control channel now in the public API
+    * Closing Jupyter Client is now faster
+    * Pip support improvements
+  + Breaking changes:
+    * Dropped support for Python 3.3 and 3.4 (upstream packages dropped 
support already)
+
+-------------------------------------------------------------------
python-jupyter_client.changes: same change

Old:
----
  jupyter_client-5.2.4.tar.gz

New:
----
  jupyter_client-5.3.1.tar.gz

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

Other differences:
------------------
++++++ python-jupyter_client-doc.spec ++++++
--- /var/tmp/diff_new_pack.UZLBXb/_old  2019-07-30 14:01:57.336974693 +0200
+++ /var/tmp/diff_new_pack.UZLBXb/_new  2019-07-30 14:01:57.348974685 +0200
@@ -23,7 +23,7 @@
 %bcond_without html
 %bcond_without tests
 Name:           python-jupyter_client-doc
-Version:        5.2.4
+Version:        5.3.1
 Release:        0
 Summary:        Documentation for the Jupyter client libraries
 License:        BSD-3-Clause

++++++ python-jupyter_client.spec ++++++
--- /var/tmp/diff_new_pack.UZLBXb/_old  2019-07-30 14:01:57.424974633 +0200
+++ /var/tmp/diff_new_pack.UZLBXb/_new  2019-07-30 14:01:57.432974628 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-jupyter_client
-Version:        5.2.4
+Version:        5.3.1
 Release:        0
 Summary:        Jupyter protocol implementation and client libraries
 License:        BSD-3-Clause


++++++ jupyter_client-5.2.4.tar.gz -> jupyter_client-5.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/PKG-INFO 
new/jupyter_client-5.3.1/PKG-INFO
--- old/jupyter_client-5.2.4/PKG-INFO   2018-12-10 15:25:49.000000000 +0100
+++ new/jupyter_client-5.3.1/PKG-INFO   2019-07-09 23:25:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: jupyter_client
-Version: 5.2.4
+Version: 5.3.1
 Summary: Jupyter protocol implementation and client libraries
 Home-page: https://jupyter.org
 Author: Jupyter Development Team
@@ -9,7 +9,53 @@
 Project-URL: Documentation, https://jupyter-client.readthedocs.io
 Project-URL: Source, https://github.com/jupyter/jupyter_client/
 Project-URL: Tracker, https://github.com/jupyter/jupyter_client/issues
-Description: UNKNOWN
+Description: # Jupyter Client
+        
+        [![Code 
Health](https://landscape.io/github/jupyter/jupyter_client/master/landscape.svg?style=flat)](https://landscape.io/github/jupyter/jupyter_client/master)
+        
+        
+        `jupyter_client` contains the reference implementation of the [Jupyter 
protocol][].
+        It also provides client and kernel management APIs for working with 
kernels.
+        
+        It also provides the `jupyter kernelspec` entrypoint
+        for installing kernelspecs for use with Jupyter frontends.
+        
+        [Jupyter protocol]: 
https://jupyter-client.readthedocs.io/en/latest/messaging.html
+        
+        
+        # Development Setup
+        
+        The [Jupyter Contributor 
Guides](http://jupyter.readthedocs.io/en/latest/contributor/content-contributor.html)
 provide extensive information on contributing code or documentation to Jupyter 
projects. The limited instructions below for setting up a development 
environment are for your convenience.
+        
+        ## Coding
+        
+        You'll need Python and `pip` on the search path. Clone the Jupyter 
Client git repository to your computer, for example in 
`/my/project/jupyter_client`.
+        Now create an [editable 
install](https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs)
+        and download the dependencies of code and test suite by executing:
+        
+            cd /my/projects/jupyter_client/
+            pip install -e .[test]
+            py.test
+        
+        The last command runs the test suite to verify the setup. During 
development, you can pass filenames to `py.test`, and it will execute only 
those tests.
+        
+        ## Documentation
+        
+        The documentation of Jupyter Client is generated from the files in 
`docs/` using Sphinx. Instructions for setting up Sphinx with a selection of 
optional modules are in the [Documentation 
Guide](http://jupyter.readthedocs.io/en/latest/contrib_docs/index.html). You'll 
also need the `make` command.
+        For a minimal Sphinx installation to process the Jupyter Client docs, 
execute:
+        
+            pip install ipykernel sphinx sphinx_rtd_theme
+        
+        The following commands build the documentation in HTML format and 
check for broken links:
+        
+            cd /my/projects/jupyter_client/docs/
+            make html linkcheck
+        
+        Point your browser to the following URL to access the generated 
documentation:
+        
+        _file:///my/projects/jupyter\_client/docs/\_build/html/index.html_
+        
+        
 Keywords: Interactive,Interpreter,Shell,Web
 Platform: Linux
 Platform: Mac OS X
@@ -24,5 +70,6 @@
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 3
-Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
+Description-Content-Type: text/markdown
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/docs/changelog.rst 
new/jupyter_client-5.3.1/docs/changelog.rst
--- old/jupyter_client-5.2.4/docs/changelog.rst 2018-12-10 15:22:46.000000000 
+0100
+++ new/jupyter_client-5.3.1/docs/changelog.rst 2019-07-09 23:23:30.000000000 
+0200
@@ -4,6 +4,30 @@
 Changes in Jupyter Client
 =========================
 
+5.3.1
+=====
+
+- Fix bug with control channel socket introduced in 5.3.0 (:ghpull:`456`).
+
+5.3.0
+=====
+`5.3.0 on GitHub 
<https://github.com/jupyter/jupyter_client/milestones/5.3.0>`__
+
+New Features:
+
+- Multiprocessing and Threading support (:ghpull:`437`) and (:ghpull:`450`)
+- Setup package long_description (:ghpull:`411`) 
+
+Changes:
+
+- Control channel now in the public API (:ghpull:`447`)
+- Closing Jupyter Client is now faster (:ghpull:`420`)
+- Pip support improvements (:ghpull:`421`)
+
+Breaking changes:
+
+- Dropped support for Python 3.3 and 3.4 (upstream packages dropped support 
already)
+
 5.2.4
 =====
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/docs/messaging.rst 
new/jupyter_client-5.3.1/docs/messaging.rst
--- old/jupyter_client-5.2.4/docs/messaging.rst 2017-11-22 12:54:35.000000000 
+0100
+++ new/jupyter_client-5.3.1/docs/messaging.rst 2019-07-09 22:04:55.000000000 
+0200
@@ -351,9 +351,9 @@
     # should not send these messages.
     'allow_stdin' : True,
 
-    # A boolean flag, which, if True, does not abort the execution queue, if 
an exception is encountered.
-    # This allows the queued execution of multiple execute_requests, even if 
they generate exceptions.
-    'stop_on_error' : False,
+    # A boolean flag, which, if True, aborts the execution queue if an 
exception is encountered.
+    # If False, queued execute_requests will execute even if this request 
generates an exception.
+    'stop_on_error' : True,
     }
 
 .. versionchanged:: 5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/jupyter_client/_version.py 
new/jupyter_client-5.3.1/jupyter_client/_version.py
--- old/jupyter_client-5.2.4/jupyter_client/_version.py 2018-12-10 
15:20:11.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/_version.py 2019-07-09 
23:24:11.000000000 +0200
@@ -1,4 +1,4 @@
-version_info = (5, 2, 4)
+version_info = (5, 3, 1)
 __version__ = '.'.join(map(str, version_info))
 
 protocol_version_info = (5, 3)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/jupyter_client/channels.py 
new/jupyter_client-5.3.1/jupyter_client/channels.py
--- old/jupyter_client-5.2.4/jupyter_client/channels.py 2018-12-10 
15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/channels.py 2019-07-09 
22:04:55.000000000 +0200
@@ -7,7 +7,7 @@
 
 import atexit
 import errno
-from threading import Thread
+from threading import Thread, Event
 import time
 
 import zmq
@@ -73,6 +73,7 @@
 
         # running is False until `.start()` is called
         self._running = False
+        self._exit = Event()
         # don't start paused
         self._pause = False
         self.poller = zmq.Poller()
@@ -138,7 +139,7 @@
         while self._running:
             if self._pause:
                 # just sleep, and skip the rest of the loop
-                time.sleep(self.time_to_dead)
+                self._exit.wait(self.time_to_dead)
                 continue
 
             since_last_heartbeat = 0.0
@@ -155,7 +156,7 @@
                 # sleep the remainder of the cycle
                 remainder = self.time_to_dead - (time.time() - request_time)
                 if remainder > 0:
-                    time.sleep(remainder)
+                    self._exit.wait(remainder)
                 continue
             else:
                 # nothing was received within the time limit, signal heart 
failure
@@ -184,6 +185,7 @@
     def stop(self):
         """Stop the channel's event loop and join its thread."""
         self._running = False
+        self._exit.set()
         self.join()
         self.close()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/jupyter_client/client.py 
new/jupyter_client-5.3.1/jupyter_client/client.py
--- old/jupyter_client-5.2.4/jupyter_client/client.py   2018-07-30 
11:52:36.000000000 +0200
+++ new/jupyter_client-5.3.1/jupyter_client/client.py   2019-07-08 
22:06:08.000000000 +0200
@@ -51,7 +51,7 @@
     # The PyZMQ Context to use for communication with the kernel.
     context = Instance(zmq.Context)
     def _context_default(self):
-        return zmq.Context.instance()
+        return zmq.Context()
 
     # The classes to use for the various channels
     shell_channel_class = Type(ChannelABC)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client/ioloop/manager.py 
new/jupyter_client-5.3.1/jupyter_client/ioloop/manager.py
--- old/jupyter_client-5.2.4/jupyter_client/ioloop/manager.py   2018-12-10 
15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/ioloop/manager.py   2019-07-09 
22:04:55.000000000 +0200
@@ -56,6 +56,7 @@
                 self._restarter.stop()
 
     connect_shell = as_zmqstream(KernelManager.connect_shell)
+    connect_control = as_zmqstream(KernelManager.connect_control)
     connect_iopub = as_zmqstream(KernelManager.connect_iopub)
     connect_stdin = as_zmqstream(KernelManager.connect_stdin)
     connect_hb = as_zmqstream(KernelManager.connect_hb)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/jupyter_client/manager.py 
new/jupyter_client-5.3.1/jupyter_client/manager.py
--- old/jupyter_client-5.2.4/jupyter_client/manager.py  2018-12-10 
15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/manager.py  2019-07-09 
22:42:35.000000000 +0200
@@ -39,7 +39,7 @@
     # The PyZMQ Context to use for communication with the kernel.
     context = Instance(zmq.Context)
     def _context_default(self):
-        return zmq.Context.instance()
+        return zmq.Context()
 
     # the class to create with our `client` method
     client_class = 
DottedObjectName('jupyter_client.blocking.BlockingKernelClient')
@@ -207,7 +207,7 @@
 
     def _connect_control_socket(self):
         if self._control_socket is None:
-            self._control_socket = self.connect_control()
+            self._control_socket = self._create_connected_socket('control')
             self._control_socket.linger = 100
 
     def _close_control_socket(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client/multikernelmanager.py 
new/jupyter_client-5.3.1/jupyter_client/multikernelmanager.py
--- old/jupyter_client-5.2.4/jupyter_client/multikernelmanager.py       
2018-12-10 15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/multikernelmanager.py       
2019-07-09 22:04:55.000000000 +0200
@@ -47,7 +47,7 @@
     )
 
     kernel_spec_manager = Instance(KernelSpecManager, allow_none=True)
-    
+
     kernel_manager_class = DottedObjectName(
         "jupyter_client.ioloop.IOLoopKernelManager", config=True,
         help="""The kernel manager class.  This is configurable to allow
@@ -63,7 +63,7 @@
 
     context = Instance('zmq.Context')
     def _context_default(self):
-        return zmq.Context.instance()
+        return zmq.Context()
 
     connection_dir = Unicode('')
 
@@ -274,6 +274,22 @@
 
         Parameters
         ==========
+        kernel_id : uuid
+            The id of the kernel
+        identity : bytes (optional)
+            The zmq identity of the socket
+
+        Returns
+        =======
+        stream : zmq Socket or ZMQStream
+        """
+
+    @kernel_method
+    def connect_control(self, kernel_id, identity=None):
+        """Return a zmq Socket connected to the control channel.
+
+        Parameters
+        ==========
         kernel_id : uuid
             The id of the kernel
         identity : bytes (optional)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/jupyter_client/session.py 
new/jupyter_client-5.3.1/jupyter_client/session.py
--- old/jupyter_client-5.2.4/jupyter_client/session.py  2018-12-10 
15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/session.py  2019-07-09 
22:04:55.000000000 +0200
@@ -186,7 +186,7 @@
     # not configurable:
     context = Instance('zmq.Context')
     def _context_default(self):
-        return zmq.Context.instance()
+        return zmq.Context()
 
     session = Instance('jupyter_client.session.Session',
                        allow_none=True)
@@ -300,10 +300,10 @@
     """
 
     debug = Bool(False, config=True, help="""Debug output in the Session""")
-    
+
     check_pid = Bool(True, config=True,
         help="""Whether to check PID to protect against calls after fork.
-        
+
         This check can be disabled if fork-safety is handled elsewhere.
         """)
 
@@ -387,9 +387,9 @@
     digest_mod = Any()
     def _digest_mod_default(self):
         return hashlib.sha256
-    
+
     auth = Instance(hmac.HMAC, allow_none=True)
-    
+
     def _new_auth(self):
         if self.key:
             self.auth = hmac.HMAC(self.key, digestmod=self.digest_mod)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client/tests/test_kernelmanager.py 
new/jupyter_client-5.3.1/jupyter_client/tests/test_kernelmanager.py
--- old/jupyter_client-5.2.4/jupyter_client/tests/test_kernelmanager.py 
2017-08-08 17:56:46.000000000 +0200
+++ new/jupyter_client-5.3.1/jupyter_client/tests/test_kernelmanager.py 
2019-07-08 22:06:08.000000000 +0200
@@ -11,6 +11,9 @@
 from subprocess import PIPE
 import sys
 import time
+import threading
+import multiprocessing as mp
+import pytest
 from unittest import TestCase
 
 from traitlets.config.loader import Config
@@ -28,7 +31,7 @@
     
     def tearDown(self):
         self.env_patch.stop()
-    
+
     def _install_test_kernel(self):
         kernel_dir = pjoin(paths.jupyter_data_dir(), 'kernels', 'signaltest')
         os.makedirs(kernel_dir)
@@ -127,3 +130,118 @@
 
         self.assertTrue(km.is_alive())
         self.assertTrue(kc.is_alive())
+
+@pytest.mark.parallel
+class TestParallel:
+
+    @pytest.fixture(autouse=True)
+    def env(self):
+        env_patch = test_env()
+        env_patch.start()
+        yield
+        env_patch.stop()
+
+    @pytest.fixture(params=['tcp', 'ipc'])
+    def transport(self, request):
+        return request.param
+
+    @pytest.fixture
+    def config(self, transport):
+        c = Config()
+        c.transport = transport
+        if transport == 'ipc':
+            c.ip = 'test'
+        return c
+
+    def _install_test_kernel(self):
+        kernel_dir = pjoin(paths.jupyter_data_dir(), 'kernels', 'signaltest')
+        os.makedirs(kernel_dir)
+        with open(pjoin(kernel_dir, 'kernel.json'), 'w') as f:
+            f.write(json.dumps({
+                'argv': [sys.executable,
+                         '-m', 'jupyter_client.tests.signalkernel',
+                         '-f', '{connection_file}'],
+                'display_name': "Signal Test Kernel",
+            }))
+
+    def test_start_sequence_kernels(self, config):
+        """Ensure that a sequence of kernel startups doesn't break anything."""
+
+        self._install_test_kernel()
+        self._run_signaltest_lifecycle(config)
+        self._run_signaltest_lifecycle(config)
+        self._run_signaltest_lifecycle(config)
+
+    def test_start_parallel_thread_kernels(self, config):
+        self._install_test_kernel()
+        self._run_signaltest_lifecycle(config)
+
+        thread = threading.Thread(target=self._run_signaltest_lifecycle, 
args=(config,))
+        thread2 = threading.Thread(target=self._run_signaltest_lifecycle, 
args=(config,))
+        try:
+            thread.start()
+            thread2.start()
+        finally:
+            thread.join()
+            thread2.join()
+
+    def test_start_parallel_process_kernels(self, config):
+        self._install_test_kernel()
+
+        self._run_signaltest_lifecycle(config)
+        thread = threading.Thread(target=self._run_signaltest_lifecycle, 
args=(config,))
+        proc = mp.Process(target=self._run_signaltest_lifecycle, 
args=(config,))
+        try:
+            thread.start()
+            proc.start()
+        finally:
+            thread.join()
+            proc.join()
+
+        assert proc.exitcode == 0
+
+    def test_start_sequence_process_kernels(self, config):
+        self._install_test_kernel()
+        self._run_signaltest_lifecycle(config)
+        proc = mp.Process(target=self._run_signaltest_lifecycle, 
args=(config,))
+        try:
+            proc.start()
+        finally:
+            proc.join()
+
+        assert proc.exitcode == 0
+    
+    def _prepare_kernel(self, km, startup_timeout=TIMEOUT, **kwargs):
+        km.start_kernel(**kwargs)
+        kc = km.client()
+        kc.start_channels()
+        try:
+            kc.wait_for_ready(timeout=startup_timeout)
+        except RuntimeError:
+            kc.stop_channels()
+            km.shutdown_kernel()
+            raise
+
+        return kc
+
+    def _run_signaltest_lifecycle(self, config=None):
+        km = KernelManager(config=config, kernel_name='signaltest')
+        kc = self._prepare_kernel(km, stdout=PIPE, stderr=PIPE)
+
+        def execute(cmd):
+            kc.execute(cmd)
+            reply = kc.get_shell_msg(TIMEOUT)
+            content = reply['content']
+            assert content['status'] == 'ok'
+            return content
+
+        execute("start")
+        assert km.is_alive()
+        execute('check')
+        assert km.is_alive()
+
+        km.restart_kernel(now=True)
+        assert km.is_alive()
+        execute('check')
+
+        km.shutdown_kernel()
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client/tests/test_multikernelmanager.py 
new/jupyter_client-5.3.1/jupyter_client/tests/test_multikernelmanager.py
--- old/jupyter_client-5.2.4/jupyter_client/tests/test_multikernelmanager.py    
2017-08-08 17:56:46.000000000 +0200
+++ new/jupyter_client-5.3.1/jupyter_client/tests/test_multikernelmanager.py    
2019-07-08 22:07:24.000000000 +0200
@@ -1,14 +1,21 @@
 """Tests for the notebook kernel and session manager."""
 
-from subprocess import PIPE
+import os
 import time
-from unittest import TestCase
+import threading
+import multiprocessing as mp
 
+from subprocess import PIPE
+from unittest import TestCase
 from traitlets.config.loader import Config
-from ..localinterfaces import localhost
 from jupyter_client import KernelManager
 from jupyter_client.multikernelmanager import MultiKernelManager
+
 from .utils import skip_win32
+from ..localinterfaces import localhost
+
+TIMEOUT = 30
+
 
 class TestKernelManager(TestCase):
 
@@ -83,3 +90,43 @@
     def test_ipc_cinfo(self):
         km = self._get_ipc_km()
         self._run_cinfo(km, 'ipc', 'test')
+
+    def test_start_sequence_tcp_kernels(self):
+        """Ensure that a sequence of kernel startups doesn't break anything."""
+        self._run_lifecycle(self._get_tcp_km())
+        self._run_lifecycle(self._get_tcp_km())
+        self._run_lifecycle(self._get_tcp_km())
+
+
+    def test_start_sequence_tcp_kernels(self):
+        """Ensure that a sequence of kernel startups doesn't break anything."""
+        self._run_lifecycle(self._get_ipc_km())
+        self._run_lifecycle(self._get_ipc_km())
+        self._run_lifecycle(self._get_ipc_km())
+
+    def test_start_parallel_thread_kernels(self):
+        self.test_tcp_lifecycle()
+
+        thread = threading.Thread(target=self.test_tcp_lifecycle)
+        thread2 = threading.Thread(target=self.test_tcp_lifecycle)
+        try:
+            thread.start()
+            thread2.start()
+        finally:
+            thread.join()
+            thread2.join()
+
+    def test_start_parallel_process_kernels(self):
+        self.test_tcp_lifecycle()
+
+        thread = threading.Thread(target=self.test_tcp_lifecycle)
+        proc = mp.Process(target=self.test_tcp_lifecycle)
+
+        try:
+            thread.start()
+            proc.start()
+        finally:
+            thread.join()
+            proc.join()
+
+        assert proc.exitcode == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client/tests/test_session.py 
new/jupyter_client-5.3.1/jupyter_client/tests/test_session.py
--- old/jupyter_client-5.2.4/jupyter_client/tests/test_session.py       
2018-12-10 15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client/tests/test_session.py       
2019-07-09 22:04:55.000000000 +0200
@@ -83,7 +83,7 @@
         self.assertIsInstance(self.session.auth, hmac.HMAC)
 
     def test_send(self):
-        ctx = zmq.Context.instance()
+        ctx = zmq.Context()
         A = ctx.socket(zmq.PAIR)
         B = ctx.socket(zmq.PAIR)
         A.bind("inproc://test")
@@ -316,7 +316,7 @@
         self._datetime_test(session)
 
     def test_send_raw(self):
-        ctx = zmq.Context.instance()
+        ctx = zmq.Context()
         A = ctx.socket(zmq.PAIR)
         B = ctx.socket(zmq.PAIR)
         A.bind("inproc://test")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client.egg-info/PKG-INFO 
new/jupyter_client-5.3.1/jupyter_client.egg-info/PKG-INFO
--- old/jupyter_client-5.2.4/jupyter_client.egg-info/PKG-INFO   2018-12-10 
15:25:48.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client.egg-info/PKG-INFO   2019-07-09 
23:25:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: jupyter-client
-Version: 5.2.4
+Version: 5.3.1
 Summary: Jupyter protocol implementation and client libraries
 Home-page: https://jupyter.org
 Author: Jupyter Development Team
@@ -9,7 +9,53 @@
 Project-URL: Documentation, https://jupyter-client.readthedocs.io
 Project-URL: Source, https://github.com/jupyter/jupyter_client/
 Project-URL: Tracker, https://github.com/jupyter/jupyter_client/issues
-Description: UNKNOWN
+Description: # Jupyter Client
+        
+        [![Code 
Health](https://landscape.io/github/jupyter/jupyter_client/master/landscape.svg?style=flat)](https://landscape.io/github/jupyter/jupyter_client/master)
+        
+        
+        `jupyter_client` contains the reference implementation of the [Jupyter 
protocol][].
+        It also provides client and kernel management APIs for working with 
kernels.
+        
+        It also provides the `jupyter kernelspec` entrypoint
+        for installing kernelspecs for use with Jupyter frontends.
+        
+        [Jupyter protocol]: 
https://jupyter-client.readthedocs.io/en/latest/messaging.html
+        
+        
+        # Development Setup
+        
+        The [Jupyter Contributor 
Guides](http://jupyter.readthedocs.io/en/latest/contributor/content-contributor.html)
 provide extensive information on contributing code or documentation to Jupyter 
projects. The limited instructions below for setting up a development 
environment are for your convenience.
+        
+        ## Coding
+        
+        You'll need Python and `pip` on the search path. Clone the Jupyter 
Client git repository to your computer, for example in 
`/my/project/jupyter_client`.
+        Now create an [editable 
install](https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs)
+        and download the dependencies of code and test suite by executing:
+        
+            cd /my/projects/jupyter_client/
+            pip install -e .[test]
+            py.test
+        
+        The last command runs the test suite to verify the setup. During 
development, you can pass filenames to `py.test`, and it will execute only 
those tests.
+        
+        ## Documentation
+        
+        The documentation of Jupyter Client is generated from the files in 
`docs/` using Sphinx. Instructions for setting up Sphinx with a selection of 
optional modules are in the [Documentation 
Guide](http://jupyter.readthedocs.io/en/latest/contrib_docs/index.html). You'll 
also need the `make` command.
+        For a minimal Sphinx installation to process the Jupyter Client docs, 
execute:
+        
+            pip install ipykernel sphinx sphinx_rtd_theme
+        
+        The following commands build the documentation in HTML format and 
check for broken links:
+        
+            cd /my/projects/jupyter_client/docs/
+            make html linkcheck
+        
+        Point your browser to the following URL to access the generated 
documentation:
+        
+        _file:///my/projects/jupyter\_client/docs/\_build/html/index.html_
+        
+        
 Keywords: Interactive,Interpreter,Shell,Web
 Platform: Linux
 Platform: Mac OS X
@@ -24,5 +70,6 @@
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 3
-Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
+Description-Content-Type: text/markdown
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jupyter_client-5.2.4/jupyter_client.egg-info/requires.txt 
new/jupyter_client-5.3.1/jupyter_client.egg-info/requires.txt
--- old/jupyter_client-5.2.4/jupyter_client.egg-info/requires.txt       
2018-12-10 15:25:48.000000000 +0100
+++ new/jupyter_client-5.3.1/jupyter_client.egg-info/requires.txt       
2019-07-09 23:25:14.000000000 +0200
@@ -8,9 +8,4 @@
 ipykernel
 ipython
 mock
-
-[test:(python_version >= "3.4" or python_version == "2.7")]
 pytest
-
-[test:python_version == "3.3"]
-pytest<3.3.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jupyter_client-5.2.4/setup.py 
new/jupyter_client-5.3.1/setup.py
--- old/jupyter_client-5.2.4/setup.py   2018-12-10 15:19:44.000000000 +0100
+++ new/jupyter_client-5.3.1/setup.py   2019-07-09 22:04:55.000000000 +0200
@@ -16,8 +16,8 @@
 import sys
 
 v = sys.version_info
-if v[:2] < (2,7) or (v[0] >= 3 and v[:2] < (3,3)):
-    error = "ERROR: %s requires Python version 2.7 or 3.3 or above." % name
+if v[:2] < (2, 7) or (v[0] >= 3 and v[:2] < (3, 5)):
+    error = "ERROR: %s requires Python version 2.7 or 3.5 or above." % name
     print(error, file=sys.stderr)
     sys.exit(1)
 
@@ -61,6 +61,8 @@
     version         = version_ns['__version__'],
     packages        = packages,
     description     = 'Jupyter protocol implementation and client libraries',
+    long_description=open('README.md').read(),
+    long_description_content_type='text/markdown',
     author          = 'Jupyter Development Team',
     author_email    = 'jupy...@googlegroups.com',
     url             = 'https://jupyter.org',
@@ -91,11 +93,9 @@
         'python-dateutil>=2.1',
         'tornado>=4.1',
     ],
-    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*',
+    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
     extras_require   = {
-        'test': ['ipykernel', 'ipython', 'mock'],
-        'test:python_version == "3.3"': ['pytest<3.3.0'],
-        'test:(python_version >= "3.4" or python_version == "2.7")': 
['pytest'],
+        'test': ['ipykernel', 'ipython', 'mock', 'pytest'],
     },
     cmdclass         = {
         'bdist_egg': bdist_egg if 'bdist_egg' in sys.argv else 
bdist_egg_disabled,


Reply via email to