Skip to content

Commit 81958d0

Browse files
committed
BUG: Do not use CellWatcher outside of notebook env
Signed-off-by: Brianna Major <[email protected]>
1 parent d20b17b commit 81958d0

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

itkwidgets/standalone_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def standalone_viewer(url):
6767

6868
def input_dict(viewer_options):
6969
user_input = read_files(viewer_options)
70-
data = build_init_data(user_input)
70+
data = build_init_data(user_input, {})
7171
ui = user_input.get("ui", "reference")
7272
data["config"] = build_config(ui)
7373

itkwidgets/viewer.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@
4040

4141
_viewer_count = 1
4242
_codecs_registered = False
43-
CellWatcher() # Instantiate the singleton class right away
43+
_cell_watcher = None
44+
if ENVIRONMENT is not Env.HYPHA:
45+
_cell_watcher = CellWatcher() # Instantiate the singleton class right away
4446

4547

4648
class ViewerRPC:
@@ -49,7 +51,7 @@ class ViewerRPC:
4951
def __init__(
5052
self, ui_collapsed=True, rotate=False, ui="pydata-sphinx", init_data=None, parent=None, **add_data_kwargs
5153
):
52-
global _codecs_registered
54+
global _codecs_registered, _cell_watcher
5355
"""Create a viewer."""
5456
# Register codecs if they haven't been already
5557
if not _codecs_registered and ENVIRONMENT is not Env.HYPHA:
@@ -64,7 +66,7 @@ def __init__(
6466
self.wid = None
6567
self.parent = parent
6668
if ENVIRONMENT is not Env.JUPYTERLITE:
67-
CellWatcher().add_viewer(self.parent)
69+
_cell_watcher and _cell_watcher.add_viewer(self.parent)
6870
if ENVIRONMENT is not Env.HYPHA:
6971
self.viewer_event = threading.Event()
7072
self.data_event = threading.Event()
@@ -74,7 +76,7 @@ async def setup(self):
7476

7577
async def run(self, ctx):
7678
"""ImJoy plugin setup function."""
77-
global _viewer_count
79+
global _viewer_count, _cell_watcher
7880
ui = self._init_viewer_kwargs.get("ui", None)
7981
config = build_config(ui)
8082

@@ -102,7 +104,7 @@ async def run(self, ctx):
102104
)
103105
if not defer_for_data_render(self.init_data):
104106
# Once the viewer has been created any queued requests can be run
105-
CellWatcher().update_viewer_status(self.parent, True)
107+
_cell_watcher.update_viewer_status(self.parent, True)
106108
asyncio.get_running_loop().call_soon_threadsafe(self.viewer_event.set)
107109

108110
# Wait and then update the screenshot in case rendered level changed
@@ -139,14 +141,16 @@ def update_screenshot(self, base64_image):
139141
self.img.display(html)
140142

141143
def update_viewer_status(self):
142-
if not CellWatcher().viewer_ready(self.parent):
143-
CellWatcher().update_viewer_status(self.parent, True)
144+
global _cell_watcher
145+
if not _cell_watcher.viewer_ready(self.parent):
146+
_cell_watcher.update_viewer_status(self.parent, True)
144147

145148
def set_event(self, event_data):
146149
if not self.data_event.is_set():
147150
# Once the data has been set the deferred queue requests can be run
148151
asyncio.get_running_loop().call_soon_threadsafe(self.data_event.set)
149-
self.update_viewer_status()
152+
if ENVIRONMENT is not Env.HYPHA:
153+
self.update_viewer_status()
150154

151155

152156
class Viewer:
@@ -166,7 +170,6 @@ def __init__(
166170
self.viewer_rpc = ViewerRPC(
167171
ui_collapsed=ui_collapsed, rotate=rotate, ui=ui, init_data=data, parent=self.name, **add_data_kwargs
168172
)
169-
self.cw = CellWatcher()
170173
if ENVIRONMENT is not Env.JUPYTERLITE:
171174
self._setup_queueing()
172175
api.export(self.viewer_rpc)
@@ -219,9 +222,10 @@ def queue_worker(self):
219222
loop.run_until_complete(task)
220223

221224
def call_getter(self, future):
225+
global _cell_watcher
222226
name = uuid.uuid4()
223-
CellWatcher().results[name] = future
224-
future.add_done_callback(functools.partial(CellWatcher()._callback, name))
227+
_cell_watcher.results[name] = future
228+
future.add_done_callback(functools.partial(_cell_watcher._callback, name))
225229

226230
def queue_request(self, method, *args, **kwargs):
227231
if (
@@ -275,6 +279,7 @@ async def get_cropping_planes(self):
275279

276280
@fetch_value
277281
def set_image(self, image: Image, name: str = 'Image'):
282+
global _cell_watcher
278283
render_type = _detect_render_type(image, 'image')
279284
if render_type is RenderType.IMAGE:
280285
image = _get_viewer_image(image, label=False)
@@ -286,7 +291,7 @@ def set_image(self, image: Image, name: str = 'Image'):
286291
svc.set_label_or_image('image')
287292
else:
288293
self.queue_request('setImage', image, name)
289-
CellWatcher().update_viewer_status(self.name, False)
294+
_cell_watcher and _cell_watcher.update_viewer_status(self.name, False)
290295
elif render_type is RenderType.POINT_SET:
291296
image = _get_viewer_point_set(image)
292297
self.queue_request('setPointSets', image)
@@ -531,6 +536,7 @@ async def get_roi_slice(self, scale: int = -1):
531536

532537
@fetch_value
533538
def compare_images(self, fixed_image: Union[str, Image], moving_image: Union[str, Image], method: str = None, image_mix: float = None, checkerboard: bool = None, pattern: Union[Tuple[int, int], Tuple[int, int, int]] = None, swap_image_order: bool = None):
539+
global _cell_watcher
534540
# image args may be image name or image object
535541
fixed_name = 'Fixed'
536542
if isinstance(fixed_image, str):
@@ -555,10 +561,11 @@ def compare_images(self, fixed_image: Union[str, Image], moving_image: Union[str
555561
if swap_image_order is not None:
556562
options['swapImageOrder'] = swap_image_order
557563
self.queue_request('compareImages', fixed_name, moving_name, options)
558-
CellWatcher().update_viewer_status(self.name, False)
564+
_cell_watcher and _cell_watcher.update_viewer_status(self.name, False)
559565

560566
@fetch_value
561567
def set_label_image(self, label_image: Image):
568+
global _cell_watcher
562569
render_type = _detect_render_type(label_image, 'image')
563570
if render_type is RenderType.IMAGE:
564571
label_image = _get_viewer_image(label_image, label=True)
@@ -570,7 +577,7 @@ def set_label_image(self, label_image: Image):
570577
svc.set_label_or_image('label_image')
571578
else:
572579
self.queue_request('setLabelImage', label_image)
573-
CellWatcher().update_viewer_status(self.name, False)
580+
_cell_watcher and _cell_watcher.update_viewer_status(self.name, False)
574581
elif render_type is RenderType.POINT_SET:
575582
label_image = _get_viewer_point_set(label_image)
576583
self.queue_request('setPointSets', label_image)

0 commit comments

Comments
 (0)