@@ -92,7 +92,7 @@ async def kernel_model(self, kernel_id):
92
92
The uuid of the kernel.
93
93
"""
94
94
model = None
95
- km = self .get_kernel (kernel_id )
95
+ km = self .get_kernel (str ( kernel_id ) )
96
96
if km :
97
97
model = km .kernel
98
98
return model
@@ -166,13 +166,14 @@ async def interrupt_kernel(self, kernel_id, **kwargs):
166
166
167
167
async def shutdown_all (self , now = False ):
168
168
"""Shutdown all kernels."""
169
- for kernel_id in self ._kernels :
169
+ kids = list (self ._kernels )
170
+ for kernel_id in kids :
170
171
km = self .get_kernel (kernel_id )
171
172
await km .shutdown_kernel (now = now )
172
173
self .remove_kernel (kernel_id )
173
174
174
175
async def cull_kernels (self ):
175
- """Override cull_kernels so we can be sure their state is current."""
176
+ """Override cull_kernels, so we can be sure their state is current."""
176
177
await self .list_kernels ()
177
178
await super ().cull_kernels ()
178
179
@@ -295,7 +296,7 @@ class GatewaySessionManager(SessionManager):
295
296
kernel_manager = Instance ("jupyter_server.gateway.managers.GatewayMappingKernelManager" )
296
297
297
298
async def kernel_culled (self , kernel_id ):
298
- """Checks if the kernel is still considered alive and returns true if its not found."""
299
+ """Checks if the kernel is still considered alive and returns true if it's not found."""
299
300
kernel = None
300
301
try :
301
302
km = self .kernel_manager .get_kernel (kernel_id )
@@ -387,7 +388,7 @@ async def refresh_model(self, model=None):
387
388
if isinstance (self .parent , AsyncMappingKernelManager ):
388
389
# Update connections only if there's a mapping kernel manager parent for
389
390
# this kernel manager. The current kernel manager instance may not have
390
- # an parent instance if, say, a server extension is using another application
391
+ # a parent instance if, say, a server extension is using another application
391
392
# (e.g., papermill) that uses a KernelManager instance directly.
392
393
self .parent ._kernel_connections [self .kernel_id ] = int (model ["connections" ])
393
394
@@ -448,8 +449,14 @@ async def shutdown_kernel(self, now=False, restart=False):
448
449
449
450
if self .has_kernel :
450
451
self .log .debug ("Request shutdown kernel at: %s" , self .kernel_url )
451
- response = await gateway_request (self .kernel_url , method = "DELETE" )
452
- self .log .debug ("Shutdown kernel response: %d %s" , response .code , response .reason )
452
+ try :
453
+ response = await gateway_request (self .kernel_url , method = "DELETE" )
454
+ self .log .debug ("Shutdown kernel response: %d %s" , response .code , response .reason )
455
+ except web .HTTPError as error :
456
+ if error .status_code == 404 :
457
+ self .log .debug ("Shutdown kernel response: kernel not found (ignored)" )
458
+ else :
459
+ raise
453
460
454
461
async def restart_kernel (self , ** kw ):
455
462
"""Restarts a kernel via HTTP."""
@@ -518,7 +525,7 @@ def send(self, msg: dict) -> None:
518
525
519
526
@staticmethod
520
527
def serialize_datetime (dt ):
521
- if isinstance (dt , ( datetime .datetime ) ):
528
+ if isinstance (dt , datetime .datetime ):
522
529
return dt .timestamp ()
523
530
return None
524
531
@@ -595,7 +602,7 @@ async def start_channels(self, shell=True, iopub=True, stdin=True, hb=True, cont
595
602
"""Starts the channels for this kernel.
596
603
597
604
For this class, we establish a websocket connection to the destination
598
- and setup the channel-based queues on which applicable messages will
605
+ and set up the channel-based queues on which applicable messages will
599
606
be posted.
600
607
"""
601
608
@@ -606,10 +613,11 @@ async def start_channels(self, shell=True, iopub=True, stdin=True, hb=True, cont
606
613
"channels" ,
607
614
)
608
615
# Gather cert info in case where ssl is desired...
609
- ssl_options = {}
610
- ssl_options ["ca_certs" ] = GatewayClient .instance ().ca_certs
611
- ssl_options ["certfile" ] = GatewayClient .instance ().client_cert
612
- ssl_options ["keyfile" ] = GatewayClient .instance ().client_key
616
+ ssl_options = {
617
+ "ca_certs" : GatewayClient .instance ().ca_certs ,
618
+ "certfile" : GatewayClient .instance ().client_cert ,
619
+ "keyfile" : GatewayClient .instance ().client_key ,
620
+ }
613
621
614
622
self .channel_socket = websocket .create_connection (
615
623
ws_url ,
@@ -720,7 +728,7 @@ def _route_responses(self):
720
728
self ._channel_queues [channel ].put_nowait (response_message )
721
729
722
730
except websocket .WebSocketConnectionClosedException :
723
- pass # websocket closure most likely due to shutdown
731
+ pass # websocket closure most likely due to shut down
724
732
725
733
except BaseException as be :
726
734
if not self ._channels_stopped :
0 commit comments