2828from jupyter_server .gateway .gateway_client import GatewayTokenRenewerBase , NoOpTokenRenewer
2929from jupyter_server .gateway .managers import ChannelQueue , GatewayClient , GatewayKernelManager
3030from jupyter_server .services .kernels .websocket import KernelWebsocketHandler
31+ from jupyter_server .utils import url_path_join
3132
3233from .utils import expected_http_error
3334
3435pytest_plugins = ["jupyter_events.pytest_plugin" ]
3536
3637
37- def generate_kernelspec (name ):
38+ def generate_kernelspec (name , kernelspecs_endpoint ):
3839 argv_stanza = ["python" , "-m" , "ipykernel_launcher" , "-f" , "{connection_file}" ]
3940 spec_stanza = {
4041 "spec" : {
@@ -52,6 +53,7 @@ def generate_kernelspec(name):
5253 "resources" : {
5354 "logo-64x64" : f"f/kernelspecs/{ name } /logo-64x64.png" ,
5455 "url" : "https://example.com/example-url" ,
56+ "kernelspec" : kernelspecs_endpoint ,
5557 },
5658 }
5759 return kernelspec_stanza
@@ -61,8 +63,9 @@ def generate_kernelspec(name):
6163kernelspecs : dict = {
6264 "default" : "kspec_foo" ,
6365 "kernelspecs" : {
64- "kspec_foo" : generate_kernelspec ("kspec_foo" ),
65- "kspec_bar" : generate_kernelspec ("kspec_bar" ),
66+ "kspec_foo" : generate_kernelspec ("kspec_foo" , "/foo/kernelspecs" ),
67+ "kspec_bar" : generate_kernelspec ("kspec_bar" , "/bar/kernelspecs/" ),
68+ "kspec_baz" : generate_kernelspec ("kspec_baz" , GatewayClient .kernelspecs_endpoint_default_value ),
6669 },
6770}
6871
@@ -437,11 +440,20 @@ async def test_gateway_get_kernelspecs(init_gateway, jp_fetch, jp_serverapp):
437440 assert r .code == 200
438441 content = json .loads (r .body .decode ("utf-8" ))
439442 kspecs = content .get ("kernelspecs" )
440- assert len (kspecs ) == 2
443+ assert len (kspecs ) == 3
441444 assert kspecs .get ("kspec_bar" ).get ("name" ) == "kspec_bar"
442445 assert (
443446 kspecs .get ("kspec_bar" ).get ("resources" )["logo-64x64" ].startswith (jp_serverapp .base_url )
444447 )
448+ assert (
449+ kspecs .get ("kspec_bar" ).get ("resources" )["kernelspec" ].startswith (jp_serverapp .base_url )
450+ )
451+ assert (
452+ kspecs .get ("kspec_foo" ).get ("resources" )["kernelspec" ].startswith (jp_serverapp .base_url )
453+ )
454+ assert (
455+ kspecs .get ("kspec_baz" ).get ("resources" )["kernelspec" ].startswith (jp_serverapp .base_url )
456+ )
445457
446458
447459async def test_gateway_get_named_kernelspec (init_gateway , jp_fetch ):
@@ -751,7 +763,9 @@ async def test_websocket_connection_with_session_id(init_gateway, jp_serverapp,
751763 await conn .connect ()
752764 assert conn .session_id != None
753765 expected_ws_url = (
754- f"{ mock_gateway_ws_url } /api/kernels/{ kernel_id } /channels?session_id={ conn .session_id } "
766+ url_path_join (mock_gateway_ws_url ,
767+ jp_serverapp .base_url ,
768+ f"/api/kernels/{ kernel_id } /channels?session_id={ conn .session_id } " )
755769 )
756770 assert (
757771 expected_ws_url in caplog .text
0 commit comments