Skip to content

Commit 8c55eb7

Browse files
authored
Merge pull request #317 from jupyter/auto-backport-of-pr-311
Backport PR #311 on branch 5.x
2 parents 0934194 + 8098d97 commit 8c55eb7

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

jupyter_client/kernelspec.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# Copyright (c) Jupyter Development Team.
44
# Distributed under the terms of the Modified BSD License.
55

6+
import errno
67
import io
78
import json
89
import os
@@ -199,15 +200,39 @@ def _get_kernel_spec_by_name(self, kernel_name, resource_dir):
199200

200201
return self.kernel_spec_class.from_resource_dir(resource_dir)
201202

203+
def _find_spec_directory(self, kernel_name):
204+
"""Find the resource directory of a named kernel spec"""
205+
for kernel_dir in self.kernel_dirs:
206+
try:
207+
files = os.listdir(kernel_dir)
208+
except OSError as e:
209+
if e.errno in (errno.ENOTDIR, errno.ENOENT):
210+
continue
211+
raise
212+
for f in files:
213+
path = pjoin(kernel_dir, f)
214+
if f.lower() == kernel_name and _is_kernel_dir(path):
215+
return path
216+
217+
if kernel_name == NATIVE_KERNEL_NAME:
218+
try:
219+
from ipykernel.kernelspec import RESOURCES
220+
except ImportError:
221+
pass
222+
else:
223+
return RESOURCES
224+
202225
def get_kernel_spec(self, kernel_name):
203226
"""Returns a :class:`KernelSpec` instance for the given kernel_name.
204227
205228
Raises :exc:`NoSuchKernel` if the given kernel name is not found.
206229
"""
207-
d = self.find_kernel_specs()
208-
try:
209-
resource_dir = d[kernel_name.lower()]
210-
except KeyError:
230+
if not _is_valid_kernel_name(kernel_name):
231+
self.log.warning("Kernelspec name %r is invalid: %s", kernel_name,
232+
_kernel_name_description)
233+
234+
resource_dir = self._find_spec_directory(kernel_name.lower())
235+
if resource_dir is None:
211236
raise NoSuchKernel(kernel_name)
212237

213238
return self._get_kernel_spec_by_name(kernel_name, resource_dir)

0 commit comments

Comments
 (0)