@@ -181,27 +181,35 @@ async def _execute_next_request(self):
181
181
else :
182
182
self .kernel ._publish_status ("idle" )
183
183
184
- self .current_request = None
185
- if self .all_getters_resolved :
184
+ if not self .results :
185
+ self .current_request = None
186
+ if self .all_getters_resolved and not self ._events .empty ():
186
187
# Continue processing the remaining queued tasks
187
188
self .create_task (self .execute_next_request )
188
189
189
190
def update_namespace (self ):
190
191
# Update the namespace variables with the results from the getters
191
192
# FIXME: This is a temporary "fix" and does not handle updating output
192
193
keys = [k for k in self .shell .user_ns .keys ()]
193
- for key in keys :
194
- value = self .shell .user_ns [key ]
195
- if asyncio .isfuture (value ) and (isinstance (value , FuturePromise ) or isinstance (value , asyncio .Task )):
196
- # Getters/setters return futures
197
- # They should all be resolved now, so use the result
198
- self .shell .user_ns [key ] = value .result ()
199
- self .results .clear ()
194
+ try :
195
+ for key in keys :
196
+ value = self .shell .user_ns [key ]
197
+ if asyncio .isfuture (value ) and (isinstance (value , FuturePromise ) or isinstance (value , asyncio .Task )):
198
+ # Getters/setters return futures
199
+ # They should all be resolved now, so use the result
200
+ self .shell .user_ns [key ] = value .result ()
201
+ self .results .clear ()
202
+ except Exception as e :
203
+ self .results .clear ()
204
+ self .abort_all = True
205
+ self .create_task (self ._execute_next_request )
206
+ raise e
200
207
201
208
def _callback (self , * args , ** kwargs ):
202
209
# After each getter/setter resolves check if they've all resolved
203
210
if self .all_getters_resolved :
204
211
self .update_namespace ()
212
+ self .current_request = None
205
213
self .create_task (self .execute_next_request )
206
214
207
215
def post_run_cell (self , response ):
0 commit comments