Skip to content

Commit 1c73506

Browse files
committed
BUG: Do not use background jobs in JupyterLite
1 parent fc4730d commit 1c73506

File tree

2 files changed

+41
-12
lines changed

2 files changed

+41
-12
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
IN_JUPYTER_NOTEBOOK = False
2+
IN_JUPYTERLAB = False
3+
IN_JUPYTERLITE = False
4+
IN_AWS = False
5+
6+
try:
7+
from google.colab import files
8+
IN_COLAB = True
9+
except:
10+
IN_COLAB = False
11+
12+
if not IN_COLAB:
13+
try:
14+
from IPython import get_ipython
15+
parent_header = get_ipython().parent_header
16+
username = parent_header['header']['username']
17+
if username == '':
18+
IN_JUPYTERLAB = True
19+
elif username == 'username':
20+
IN_JUPYTER_NOTEBOOK = True
21+
else:
22+
IN_AWS = True
23+
except AttributeError:
24+
IN_JUPYTERLITE = True

itkwidgets/viewer.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from ._initialization_params import init_params_dict, init_key_aliases
1212
from ._method_types import deferred_methods
1313
from .integrations import _detect_render_type, _get_viewer_image, _get_viewer_point_sets
14+
from .integrations.environment import IN_JUPYTERLITE
1415
from .render_types import RenderType
1516
from .viewer_config import ITK_VIEWER_SRC, PYDATA_SPHINX_HREF, MUI_HREF
1617

@@ -35,8 +36,9 @@ def __init__(
3536
self.init_data = {}
3637
self.img = display(HTML(f'<div />'), display_id=str(uuid.uuid4()))
3738
self.wid = None
38-
self.viewer_event = threading.Event()
39-
self.data_event = threading.Event()
39+
if not IN_JUPYTERLITE:
40+
self.viewer_event = threading.Event()
41+
self.data_event = threading.Event()
4042

4143
def _get_input_data(self):
4244
input_options = ["data", "image", "label_image", "point_sets"]
@@ -98,11 +100,13 @@ async def run(self, ctx):
98100
config=config,
99101
)
100102
_viewer_count += 1
101-
itk_viewer.registerEventListener(
102-
'renderedImageAssigned', self.set_event
103-
)
104-
# Once the viewer has been created any queued requests can be run
105-
asyncio.get_running_loop().call_soon_threadsafe(self.viewer_event.set)
103+
if not IN_JUPYTERLITE:
104+
itk_viewer.registerEventListener(
105+
'renderedImageAssigned', self.set_event
106+
)
107+
if not IN_JUPYTERLITE:
108+
# Once the viewer has been created any queued requests can be run
109+
asyncio.get_running_loop().call_soon_threadsafe(self.viewer_event.set)
106110

107111
self.set_default_ui_values(itk_viewer)
108112
self.itk_viewer = itk_viewer
@@ -155,13 +159,14 @@ def __init__(
155159
self, ui_collapsed=True, rotate=False, ui="pydata-sphinx", **add_data_kwargs
156160
):
157161
"""Create a viewer."""
158-
self.bg_jobs = bg.BackgroundJobManager()
159162
self.viewer_rpc = ViewerRPC(
160163
ui_collapsed=ui_collapsed, rotate=rotate, ui=ui, **add_data_kwargs
161164
)
162-
self.queue = queue.Queue()
163-
self.deferred_queue = queue.Queue()
164-
self.bg_thread = self.bg_jobs.new(self.queue_worker)
165+
if not IN_JUPYTERLITE:
166+
self.bg_jobs = bg.BackgroundJobManager()
167+
self.queue = queue.Queue()
168+
self.deferred_queue = queue.Queue()
169+
self.bg_thread = self.bg_jobs.new(self.queue_worker)
165170
api.export(self.viewer_rpc)
166171

167172
@property
@@ -190,7 +195,7 @@ def queue_worker(self):
190195
loop.run_until_complete(task)
191196

192197
def queue_request(self, method, *args, **kwargs):
193-
if hasattr(self.viewer_rpc, 'itk_viewer'):
198+
if IN_JUPYTERLITE or hasattr(self.viewer_rpc, 'itk_viewer'):
194199
fn = getattr(self.viewer_rpc.itk_viewer, method)
195200
fn(*args, **kwargs)
196201
elif method in deferred_methods():

0 commit comments

Comments
 (0)