40
40
41
41
_viewer_count = 1
42
42
_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
44
46
45
47
46
48
class ViewerRPC :
@@ -49,7 +51,7 @@ class ViewerRPC:
49
51
def __init__ (
50
52
self , ui_collapsed = True , rotate = False , ui = "pydata-sphinx" , init_data = None , parent = None , ** add_data_kwargs
51
53
):
52
- global _codecs_registered
54
+ global _codecs_registered , _cell_watcher
53
55
"""Create a viewer."""
54
56
# Register codecs if they haven't been already
55
57
if not _codecs_registered and ENVIRONMENT is not Env .HYPHA :
@@ -64,7 +66,7 @@ def __init__(
64
66
self .wid = None
65
67
self .parent = parent
66
68
if ENVIRONMENT is not Env .JUPYTERLITE :
67
- CellWatcher () .add_viewer (self .parent )
69
+ _cell_watcher and _cell_watcher .add_viewer (self .parent )
68
70
if ENVIRONMENT is not Env .HYPHA :
69
71
self .viewer_event = threading .Event ()
70
72
self .data_event = threading .Event ()
@@ -74,7 +76,7 @@ async def setup(self):
74
76
75
77
async def run (self , ctx ):
76
78
"""ImJoy plugin setup function."""
77
- global _viewer_count
79
+ global _viewer_count , _cell_watcher
78
80
ui = self ._init_viewer_kwargs .get ("ui" , None )
79
81
config = build_config (ui )
80
82
@@ -102,7 +104,7 @@ async def run(self, ctx):
102
104
)
103
105
if not defer_for_data_render (self .init_data ):
104
106
# 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 )
106
108
asyncio .get_running_loop ().call_soon_threadsafe (self .viewer_event .set )
107
109
108
110
# Wait and then update the screenshot in case rendered level changed
@@ -139,14 +141,16 @@ def update_screenshot(self, base64_image):
139
141
self .img .display (html )
140
142
141
143
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 )
144
147
145
148
def set_event (self , event_data ):
146
149
if not self .data_event .is_set ():
147
150
# Once the data has been set the deferred queue requests can be run
148
151
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 ()
150
154
151
155
152
156
class Viewer :
@@ -166,7 +170,6 @@ def __init__(
166
170
self .viewer_rpc = ViewerRPC (
167
171
ui_collapsed = ui_collapsed , rotate = rotate , ui = ui , init_data = data , parent = self .name , ** add_data_kwargs
168
172
)
169
- self .cw = CellWatcher ()
170
173
if ENVIRONMENT is not Env .JUPYTERLITE :
171
174
self ._setup_queueing ()
172
175
api .export (self .viewer_rpc )
@@ -219,9 +222,10 @@ def queue_worker(self):
219
222
loop .run_until_complete (task )
220
223
221
224
def call_getter (self , future ):
225
+ global _cell_watcher
222
226
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 ))
225
229
226
230
def queue_request (self , method , * args , ** kwargs ):
227
231
if (
@@ -275,6 +279,7 @@ async def get_cropping_planes(self):
275
279
276
280
@fetch_value
277
281
def set_image (self , image : Image , name : str = 'Image' ):
282
+ global _cell_watcher
278
283
render_type = _detect_render_type (image , 'image' )
279
284
if render_type is RenderType .IMAGE :
280
285
image = _get_viewer_image (image , label = False )
@@ -286,7 +291,7 @@ def set_image(self, image: Image, name: str = 'Image'):
286
291
svc .set_label_or_image ('image' )
287
292
else :
288
293
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 )
290
295
elif render_type is RenderType .POINT_SET :
291
296
image = _get_viewer_point_set (image )
292
297
self .queue_request ('setPointSets' , image )
@@ -531,6 +536,7 @@ async def get_roi_slice(self, scale: int = -1):
531
536
532
537
@fetch_value
533
538
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
534
540
# image args may be image name or image object
535
541
fixed_name = 'Fixed'
536
542
if isinstance (fixed_image , str ):
@@ -555,10 +561,11 @@ def compare_images(self, fixed_image: Union[str, Image], moving_image: Union[str
555
561
if swap_image_order is not None :
556
562
options ['swapImageOrder' ] = swap_image_order
557
563
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 )
559
565
560
566
@fetch_value
561
567
def set_label_image (self , label_image : Image ):
568
+ global _cell_watcher
562
569
render_type = _detect_render_type (label_image , 'image' )
563
570
if render_type is RenderType .IMAGE :
564
571
label_image = _get_viewer_image (label_image , label = True )
@@ -570,7 +577,7 @@ def set_label_image(self, label_image: Image):
570
577
svc .set_label_or_image ('label_image' )
571
578
else :
572
579
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 )
574
581
elif render_type is RenderType .POINT_SET :
575
582
label_image = _get_viewer_point_set (label_image )
576
583
self .queue_request ('setPointSets' , label_image )
0 commit comments