88
99from IPython .utils .path import get_ipython_dir
1010from IPython .utils .py3compat import PY3
11- from IPython .utils .traitlets import HasTraits , List , Unicode , Dict , Any
11+ from IPython .utils .traitlets import HasTraits , List , Unicode , Dict , Any , Set
12+ from IPython .config import Configurable
1213from .launcher import make_ipkernel_cmd
1314
1415if os .name == 'nt' :
@@ -81,7 +82,7 @@ class NoSuchKernel(KeyError):
8182 def __init__ (self , name ):
8283 self .name = name
8384
84- class KernelSpecManager (HasTraits ):
85+ class KernelSpecManager (Configurable ):
8586 ipython_dir = Unicode ()
8687 def _ipython_dir_default (self ):
8788 return get_ipython_dir ()
@@ -94,9 +95,15 @@ def _user_kernel_dir_default(self):
9495 def env_kernel_dir (self ):
9596 return pjoin (sys .prefix , 'share' , 'jupyter' , 'kernels' )
9697
98+ whitelist = Set (config = True ,
99+ help = """Whitelist of allowed kernel names.
100+
101+ By default, all installed kernels are allowed.
102+ """
103+ )
97104 kernel_dirs = List (
98105 help = "List of kernel directories to search. Later ones take priority over earlier."
99- )
106+ )
100107 def _kernel_dirs_default (self ):
101108 dirs = SYSTEM_KERNEL_DIRS [:]
102109 if self .env_kernel_dir not in dirs :
@@ -128,6 +135,9 @@ def find_kernel_specs(self):
128135 d .update (_list_kernels_in (kernel_dir ))
129136
130137 d [NATIVE_KERNEL_NAME ] = self ._native_kernel_resource_dir
138+ if self .whitelist :
139+ # filter if there's a whitelist
140+ d = {name :spec for name ,spec in d .items () if name in self .whitelist }
131141 return d
132142 # TODO: Caching?
133143
@@ -136,7 +146,8 @@ def get_kernel_spec(self, kernel_name):
136146
137147 Raises :exc:`NoSuchKernel` if the given kernel name is not found.
138148 """
139- if kernel_name in {'python' , NATIVE_KERNEL_NAME }:
149+ if kernel_name in {'python' , NATIVE_KERNEL_NAME } and \
150+ (not self .whitelist or kernel_name in self .whitelist ):
140151 return KernelSpec (resource_dir = self ._native_kernel_resource_dir ,
141152 ** self ._native_kernel_dict )
142153
0 commit comments