From 4048071170896d5aa57d8cb57b3f7cff706ad9b7 Mon Sep 17 00:00:00 2001 From: David Brochart Date: Fri, 4 Aug 2023 10:12:22 +0200 Subject: [PATCH] Check if jupyter-client allows for external kernels --- jupyter_server/serverapp.py | 37 +++++++++++++++++++++++-------------- pyproject.toml | 6 ------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/jupyter_server/serverapp.py b/jupyter_server/serverapp.py index 976fad7fee..6d38b2a149 100644 --- a/jupyter_server/serverapp.py +++ b/jupyter_server/serverapp.py @@ -26,6 +26,7 @@ from base64 import encodebytes from pathlib import Path +import jupyter_client from jupyter_client.kernelspec import KernelSpecManager from jupyter_client.manager import KernelManager from jupyter_client.session import Session @@ -1644,7 +1645,10 @@ def _update_notebook_dir(self, change): allow_none=True, config=True, help=_i18n( - "The directory to look at for external kernel connection files, if allow_external_kernels is True. Defaults to Jupyter runtime_dir/external_kernels." + "The directory to look at for external kernel connection files, if allow_external_kernels is True. " + "Defaults to Jupyter runtime_dir/external_kernels. " + "Make sure that this directory is not filled with left-over connection files, " + "that could result in unnecessary kernel manager creations." ), ) @@ -1892,20 +1896,25 @@ def init_configurables(self): parent=self, ) - if self.allow_external_kernels: - external_connection_dir = self.external_connection_dir - if external_connection_dir is None: - external_connection_dir = str(Path(self.runtime_dir) / "external_kernels") - else: - external_connection_dir = None + kwargs = { + "parent": self, + "log": self.log, + "connection_dir": self.runtime_dir, + "kernel_spec_manager": self.kernel_spec_manager, + } + if jupyter_client.version_info > (8, 3, 0): + if self.allow_external_kernels: + external_connection_dir = self.external_connection_dir + if external_connection_dir is None: + external_connection_dir = str(Path(self.runtime_dir) / "external_kernels") + kwargs["external_connection_dir"] = external_connection_dir + elif self.allow_external_kernels: + self.log.warning( + "Although allow_external_kernels=True, external kernels are not supported " + "because jupyter-client's version does not allow them (should be >8.3.0)." + ) - self.kernel_manager = self.kernel_manager_class( - parent=self, - log=self.log, - connection_dir=self.runtime_dir, - external_connection_dir=external_connection_dir, - kernel_spec_manager=self.kernel_spec_manager, - ) + self.kernel_manager = self.kernel_manager_class(**kwargs) self.contents_manager = self.contents_manager_class( parent=self, log=self.log, diff --git a/pyproject.toml b/pyproject.toml index 3d5a7337d0..f4a599c662 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -97,9 +97,6 @@ build = "make -C docs html SPHINXOPTS='-W'" api = "sphinx-apidoc -o docs/source/api -f -E jupyter_server */terminal jupyter_server/pytest_plugin.py" [tool.hatch.envs.test] -pre-install-commands = [ - "pip install https://github.com/davidbrochart/jupyter_client/archive/external-kernels.zip" -] features = ["test"] [tool.hatch.envs.test.scripts] test = "python -m pytest -vv {args}" @@ -112,9 +109,6 @@ dependencies = [ "mypy>=0.990" ] test = "mypy --install-types --non-interactive {args:.}" [tool.hatch.envs.cov] -pre-install-commands = [ - "pip install https://github.com/davidbrochart/jupyter_client/archive/external-kernels.zip" -] features = ["test"] dependencies = ["coverage[toml]", "pytest-cov"] [tool.hatch.envs.cov.scripts]