Skip to content

Commit 4d3e770

Browse files
committed
BUG: Make sure that raised exceptions abort queued cells
1 parent d7f3f7c commit 4d3e770

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

itkwidgets/cell_watcher.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)