From f5322fc3874d1685e4e5e44098292977700ff9d7 Mon Sep 17 00:00:00 2001 From: lucabem Date: Wed, 27 May 2020 12:27:18 +0200 Subject: [PATCH 1/2] Added functionality to allow filter kernels by Jupyter Enterprise Gateway using KERNEL_USERNAME env var --- notebook/gateway/managers.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/notebook/gateway/managers.py b/notebook/gateway/managers.py index fb53f044ab..f7c0a9b02a 100644 --- a/notebook/gateway/managers.py +++ b/notebook/gateway/managers.py @@ -519,6 +519,12 @@ def _get_kernelspecs_endpoint_url(self, kernel_name=None): return self.base_endpoint + def _get_endpoint_for_user_filter(self, default_endpoint): + kernel_user = os.environ.get('KERNEL_USERNAME') + if kernel_user: + return '?user='.join([default_endpoint, kernel_user]) + return default_endpoint + @gen.coroutine def get_all_specs(self): fetched_kspecs = yield self.list_kernel_specs() @@ -543,6 +549,9 @@ def get_all_specs(self): def list_kernel_specs(self): """Get a list of kernel specs.""" kernel_spec_url = self._get_kernelspecs_endpoint_url() + + kernel_spec_url = self._get_endpoint_for_user_filter(kernel_spec_url) + self.log.debug("Request list kernel specs at: %s", kernel_spec_url) response = yield gateway_request(kernel_spec_url, method='GET') kernel_specs = json_decode(response.body) @@ -558,6 +567,9 @@ def get_kernel_spec(self, kernel_name, **kwargs): The name of the kernel. """ kernel_spec_url = self._get_kernelspecs_endpoint_url(kernel_name=str(kernel_name)) + + kernel_spec_url = self._get_endpoint_for_user_filter(kernel_spec_url) + self.log.debug("Request kernel spec at: %s" % kernel_spec_url) try: response = yield gateway_request(kernel_spec_url, method='GET') @@ -586,6 +598,7 @@ def get_kernel_spec_resource(self, kernel_name, path): The name of the desired resource """ kernel_spec_resource_url = url_path_join(self.base_resource_endpoint, str(kernel_name), str(path)) + kernel_spec_resource_url = self._get_endpoint_for_user_filter(kernel_spec_resource_url) self.log.debug("Request kernel spec resource '{}' at: {}".format(path, kernel_spec_resource_url)) try: response = yield gateway_request(kernel_spec_resource_url, method='GET') From 266e2978e94ff5143f5cd87e8d4a90e03295081e Mon Sep 17 00:00:00 2001 From: lucabem Date: Wed, 27 May 2020 18:56:30 +0200 Subject: [PATCH 2/2] Changed _get_endpoint_for_user_filter to static and used in constructor class instead of each class method --- notebook/gateway/managers.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/notebook/gateway/managers.py b/notebook/gateway/managers.py index f7c0a9b02a..8f89db6fb5 100644 --- a/notebook/gateway/managers.py +++ b/notebook/gateway/managers.py @@ -498,15 +498,25 @@ def shutdown_all(self, now=False): self.remove_kernel(kernel_id) + class GatewayKernelSpecManager(KernelSpecManager): def __init__(self, **kwargs): super(GatewayKernelSpecManager, self).__init__(**kwargs) - self.base_endpoint = url_path_join(GatewayClient.instance().url, - GatewayClient.instance().kernelspecs_endpoint) + base_endpoint = url_path_join(GatewayClient.instance().url, + GatewayClient.instance().kernelspecs_endpoint) + + self.base_endpoint = GatewayKernelSpecManager._get_endpoint_for_user_filter(base_endpoint) self.base_resource_endpoint = url_path_join(GatewayClient.instance().url, GatewayClient.instance().kernelspecs_resource_endpoint) + @staticmethod + def _get_endpoint_for_user_filter(default_endpoint): + kernel_user = os.environ.get('KERNEL_USERNAME') + if kernel_user: + return '?user='.join([default_endpoint, kernel_user]) + return default_endpoint + def _get_kernelspecs_endpoint_url(self, kernel_name=None): """Builds a url for the kernels endpoint @@ -519,12 +529,6 @@ def _get_kernelspecs_endpoint_url(self, kernel_name=None): return self.base_endpoint - def _get_endpoint_for_user_filter(self, default_endpoint): - kernel_user = os.environ.get('KERNEL_USERNAME') - if kernel_user: - return '?user='.join([default_endpoint, kernel_user]) - return default_endpoint - @gen.coroutine def get_all_specs(self): fetched_kspecs = yield self.list_kernel_specs() @@ -549,9 +553,6 @@ def get_all_specs(self): def list_kernel_specs(self): """Get a list of kernel specs.""" kernel_spec_url = self._get_kernelspecs_endpoint_url() - - kernel_spec_url = self._get_endpoint_for_user_filter(kernel_spec_url) - self.log.debug("Request list kernel specs at: %s", kernel_spec_url) response = yield gateway_request(kernel_spec_url, method='GET') kernel_specs = json_decode(response.body) @@ -567,9 +568,6 @@ def get_kernel_spec(self, kernel_name, **kwargs): The name of the kernel. """ kernel_spec_url = self._get_kernelspecs_endpoint_url(kernel_name=str(kernel_name)) - - kernel_spec_url = self._get_endpoint_for_user_filter(kernel_spec_url) - self.log.debug("Request kernel spec at: %s" % kernel_spec_url) try: response = yield gateway_request(kernel_spec_url, method='GET') @@ -598,7 +596,6 @@ def get_kernel_spec_resource(self, kernel_name, path): The name of the desired resource """ kernel_spec_resource_url = url_path_join(self.base_resource_endpoint, str(kernel_name), str(path)) - kernel_spec_resource_url = self._get_endpoint_for_user_filter(kernel_spec_resource_url) self.log.debug("Request kernel spec resource '{}' at: {}".format(path, kernel_spec_resource_url)) try: response = yield gateway_request(kernel_spec_resource_url, method='GET')