Skip to content

Commit

Permalink
Backport PR #1124 on branch 1.x (Include base_url at start of kernels…
Browse files Browse the repository at this point in the history
…pec resources path) (#1138)

Co-authored-by: Sam Bloomquist <bloom246@umn.edu>
  • Loading branch information
meeseeksmachine and bloomsa committed Dec 20, 2022
1 parent 8de93c8 commit 0a02e42
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
22 changes: 21 additions & 1 deletion jupyter_server/gateway/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,9 +200,28 @@ def _get_endpoint_for_user_filter(default_endpoint):
return "?user=".join([default_endpoint, kernel_user])
return default_endpoint

def _replace_path_kernelspec_resources(self, kernel_specs):
"""Helper method that replaces any gateway base_url with the server's base_url
This enables clients to properly route through jupyter_server to a gateway
for kernel resources such as logo files
"""
kernelspecs = kernel_specs["kernelspecs"]
for kernel_name in kernelspecs:
resources = kernelspecs[kernel_name]["resources"]
for resource_name in resources:
original_path = resources[resource_name]
split_eg_base_url = str.rsplit(original_path, sep="/kernelspecs/", maxsplit=1)
new_path = url_path_join(self.parent.base_url, "kernelspecs", split_eg_base_url[1])
kernel_specs["kernelspecs"][kernel_name]["resources"][resource_name] = new_path
if original_path != new_path:
self.log.debug(
f"Replaced original kernel resource path {original_path} with new "
f"path {kernel_specs['kernelspecs'][kernel_name]['resources'][resource_name]}"
)
return kernel_specs

def _get_kernelspecs_endpoint_url(self, kernel_name=None):
"""Builds a url for the kernels endpoint
Parameters
----------
kernel_name : kernel name (optional)
Expand Down Expand Up @@ -237,6 +256,7 @@ async def list_kernel_specs(self):
self.log.debug(f"Request list kernel specs at: {kernel_spec_url}")
response = await gateway_request(kernel_spec_url, method="GET")
kernel_specs = json_decode(response.body)
kernel_specs = self._replace_path_kernelspec_resources(kernel_specs)
return kernel_specs

async def get_kernel_spec(self, kernel_name, **kwargs):
Expand Down
9 changes: 8 additions & 1 deletion tests/test_gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ def generate_kernelspec(name):
"metadata": {},
}
}
kernelspec_stanza = {"name": name, "spec": spec_stanza, "resources": {}}
kernelspec_stanza = {
"name": name,
"spec": spec_stanza,
"resources": {"logo-64x64": f"f/kernelspecs/{name}/logo-64x64.png"},
}
return kernelspec_stanza


Expand Down Expand Up @@ -275,6 +279,9 @@ async def test_gateway_get_kernelspecs(init_gateway, jp_fetch):
kspecs = content.get("kernelspecs")
assert len(kspecs) == 2
assert kspecs.get("kspec_bar").get("name") == "kspec_bar"
assert (
kspecs.get("kspec_bar").get("resources")["logo-64x64"].startswith(jp_serverapp.base_url)
)


async def test_gateway_get_named_kernelspec(init_gateway, jp_fetch):
Expand Down

0 comments on commit 0a02e42

Please sign in to comment.