@@ -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
@@ -597,7 +604,7 @@ async def start_channels(self, shell=True, iopub=True, stdin=True, hb=True, cont
597
604
"""Starts the channels for this kernel.
598
605
599
606
For this class, we establish a websocket connection to the destination
600
- and setup the channel-based queues on which applicable messages will
607
+ and set up the channel-based queues on which applicable messages will
601
608
be posted.
602
609
"""
603
610
@@ -608,10 +615,11 @@ async def start_channels(self, shell=True, iopub=True, stdin=True, hb=True, cont
608
615
"channels" ,
609
616
)
610
617
# Gather cert info in case where ssl is desired...
611
- ssl_options = {}
612
- ssl_options ["ca_certs" ] = GatewayClient .instance ().ca_certs
613
- ssl_options ["certfile" ] = GatewayClient .instance ().client_cert
614
- ssl_options ["keyfile" ] = GatewayClient .instance ().client_key
618
+ ssl_options = {
619
+ "ca_certs" : GatewayClient .instance ().ca_certs ,
620
+ "certfile" : GatewayClient .instance ().client_cert ,
621
+ "keyfile" : GatewayClient .instance ().client_key ,
622
+ }
615
623
616
624
self .channel_socket = websocket .create_connection (
617
625
ws_url ,
@@ -722,7 +730,7 @@ def _route_responses(self):
722
730
self ._channel_queues [channel ].put_nowait (response_message )
723
731
724
732
except websocket .WebSocketConnectionClosedException :
725
- pass # websocket closure most likely due to shutdown
733
+ pass # websocket closure most likely due to shut down
726
734
727
735
except BaseException as be :
728
736
if not self ._channels_stopped :
0 commit comments