@@ -200,9 +200,28 @@ def _get_endpoint_for_user_filter(default_endpoint):
200
200
return "?user=" .join ([default_endpoint , kernel_user ])
201
201
return default_endpoint
202
202
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
+
203
223
def _get_kernelspecs_endpoint_url (self , kernel_name = None ):
204
224
"""Builds a url for the kernels endpoint
205
-
206
225
Parameters
207
226
----------
208
227
kernel_name : kernel name (optional)
@@ -237,6 +256,7 @@ async def list_kernel_specs(self):
237
256
self .log .debug (f"Request list kernel specs at: { kernel_spec_url } " )
238
257
response = await gateway_request (kernel_spec_url , method = "GET" )
239
258
kernel_specs = json_decode (response .body )
259
+ kernel_specs = self ._replace_path_kernelspec_resources (kernel_specs )
240
260
return kernel_specs
241
261
242
262
async def get_kernel_spec (self , kernel_name , ** kwargs ):
0 commit comments