Skip to content

Commit 0a02e42

Browse files
Backport PR #1124 on branch 1.x (Include base_url at start of kernelspec resources path) (#1138)
Co-authored-by: Sam Bloomquist <[email protected]>
1 parent 8de93c8 commit 0a02e42

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

jupyter_server/gateway/managers.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,28 @@ def _get_endpoint_for_user_filter(default_endpoint):
200200
return "?user=".join([default_endpoint, kernel_user])
201201
return default_endpoint
202202

203+
def _replace_path_kernelspec_resources(self, kernel_specs):
204+
"""Helper method that replaces any gateway base_url with the server's base_url
205+
This enables clients to properly route through jupyter_server to a gateway
206+
for kernel resources such as logo files
207+
"""
208+
kernelspecs = kernel_specs["kernelspecs"]
209+
for kernel_name in kernelspecs:
210+
resources = kernelspecs[kernel_name]["resources"]
211+
for resource_name in resources:
212+
original_path = resources[resource_name]
213+
split_eg_base_url = str.rsplit(original_path, sep="/kernelspecs/", maxsplit=1)
214+
new_path = url_path_join(self.parent.base_url, "kernelspecs", split_eg_base_url[1])
215+
kernel_specs["kernelspecs"][kernel_name]["resources"][resource_name] = new_path
216+
if original_path != new_path:
217+
self.log.debug(
218+
f"Replaced original kernel resource path {original_path} with new "
219+
f"path {kernel_specs['kernelspecs'][kernel_name]['resources'][resource_name]}"
220+
)
221+
return kernel_specs
222+
203223
def _get_kernelspecs_endpoint_url(self, kernel_name=None):
204224
"""Builds a url for the kernels endpoint
205-
206225
Parameters
207226
----------
208227
kernel_name : kernel name (optional)
@@ -237,6 +256,7 @@ async def list_kernel_specs(self):
237256
self.log.debug(f"Request list kernel specs at: {kernel_spec_url}")
238257
response = await gateway_request(kernel_spec_url, method="GET")
239258
kernel_specs = json_decode(response.body)
259+
kernel_specs = self._replace_path_kernelspec_resources(kernel_specs)
240260
return kernel_specs
241261

242262
async def get_kernel_spec(self, kernel_name, **kwargs):

tests/test_gateway.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@ def generate_kernelspec(name):
3636
"metadata": {},
3737
}
3838
}
39-
kernelspec_stanza = {"name": name, "spec": spec_stanza, "resources": {}}
39+
kernelspec_stanza = {
40+
"name": name,
41+
"spec": spec_stanza,
42+
"resources": {"logo-64x64": f"f/kernelspecs/{name}/logo-64x64.png"},
43+
}
4044
return kernelspec_stanza
4145

4246

@@ -275,6 +279,9 @@ async def test_gateway_get_kernelspecs(init_gateway, jp_fetch):
275279
kspecs = content.get("kernelspecs")
276280
assert len(kspecs) == 2
277281
assert kspecs.get("kspec_bar").get("name") == "kspec_bar"
282+
assert (
283+
kspecs.get("kspec_bar").get("resources")["logo-64x64"].startswith(jp_serverapp.base_url)
284+
)
278285

279286

280287
async def test_gateway_get_named_kernelspec(init_gateway, jp_fetch):

0 commit comments

Comments
 (0)