@@ -181,27 +181,35 @@ async def _execute_next_request(self):
181181 else :
182182 self .kernel ._publish_status ("idle" )
183183
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 ():
186187 # Continue processing the remaining queued tasks
187188 self .create_task (self .execute_next_request )
188189
189190 def update_namespace (self ):
190191 # Update the namespace variables with the results from the getters
191192 # FIXME: This is a temporary "fix" and does not handle updating output
192193 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
200207
201208 def _callback (self , * args , ** kwargs ):
202209 # After each getter/setter resolves check if they've all resolved
203210 if self .all_getters_resolved :
204211 self .update_namespace ()
212+ self .current_request = None
205213 self .create_task (self .execute_next_request )
206214
207215 def post_run_cell (self , response ):
0 commit comments