Merge pull request #1895 from blink1073/kernel-spec-escape

Allow kernelspecs to have spaces in them for backward compat
Kyle Kelley 10 years ago committed by GitHub
commit 363f71a8a2

@ -14,7 +14,7 @@ pjoin = os.path.join
from tornado import web
from ...base.handlers import APIHandler, json_errors
from ...utils import url_path_join
from ...utils import url_path_join, url_unescape
def kernelspec_model(handler, name):
"""Load a KernelSpec by name and return the REST API model"""
@ -69,8 +69,9 @@ class KernelSpecHandler(APIHandler):
@web.authenticated
@json_errors
def get(self, kernel_name):
print('hello', kernel_name, url_unescape(kernel_name))
try:
model = kernelspec_model(self, kernel_name)
model = kernelspec_model(self, url_unescape(kernel_name))
except KeyError:
raise web.HTTPError(404, u'Kernel spec %s not found' % kernel_name)
self.set_header("Content-Type", 'application/json')
@ -79,7 +80,7 @@ class KernelSpecHandler(APIHandler):
# URL to handler mappings
kernel_name_regex = r"(?P<kernel_name>[\w\.\-]+)"
kernel_name_regex = r"(?P<kernel_name>[\w\.\-%]+)"
default_handlers = [
(r"/api/kernelspecs", MainKernelSpecHandler),

@ -12,7 +12,7 @@ pjoin = os.path.join
import requests
from jupyter_client.kernelspec import NATIVE_KERNEL_NAME
from notebook.utils import url_path_join
from notebook.utils import url_path_join, url_escape
from notebook.tests.launchnotebook import NotebookTestBase, assert_http_error
# Copied from jupyter_client.tests.test_kernelspec so updating that doesn't
@ -46,10 +46,16 @@ class KernelSpecAPI(object):
def kernel_resource(self, name, path):
return self._req('GET', url_path_join('kernelspecs', name, path))
class APITest(NotebookTestBase):
"""Test the kernelspec web service API"""
def setUp(self):
sample_kernel_dir = pjoin(self.data_dir.name, 'kernels', 'sample')
self.create_spec('sample')
self.create_spec('sample 2')
self.ks_api = KernelSpecAPI(self.base_url())
def create_spec(self, name):
sample_kernel_dir = pjoin(self.data_dir.name, 'kernels', name)
try:
os.makedirs(sample_kernel_dir)
except OSError as e:
@ -63,8 +69,6 @@ class APITest(NotebookTestBase):
encoding='utf-8') as f:
f.write(some_resource)
self.ks_api = KernelSpecAPI(self.base_url())
def test_list_kernelspecs_bad(self):
"""Can list kernelspecs when one is invalid"""
bad_kernel_dir = pjoin(self.data_dir.name, 'kernels', 'bad')
@ -113,6 +117,10 @@ class APITest(NotebookTestBase):
self.assertEqual(model['spec']['display_name'], 'Test kernel')
self.assertIsInstance(model['resources'], dict)
def test_get_kernelspec_spaces(self):
model = self.ks_api.kernel_spec_info('sample%202').json()
self.assertEqual(model['name'].lower(), 'sample 2')
def test_get_nonexistant_kernelspec(self):
with assert_http_error(404):
self.ks_api.kernel_spec_info('nonexistant')

Loading…
Cancel
Save