@@ -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 ):
0 commit comments