Skip to content

Commit c7a192b

Browse files
authored
Merge pull request #675 from thewtex/globals
Globals
2 parents 82b2181 + 778826a commit c7a192b

File tree

1 file changed

+37
-32
lines changed

1 file changed

+37
-32
lines changed

itkwidgets/standalone_server.py

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ def find_port(port=SERVER_PORT):
4545

4646

4747
PORT = find_port()
48-
OPTS = None
49-
EVENT = threading.Event()
5048
VIEWER = None
5149
BROWSER = None
5250

@@ -68,8 +66,8 @@ def standalone_viewer(url):
6866
return view(itk_viewer=svc.viewer())
6967

7068

71-
def input_dict():
72-
user_input = read_files()
69+
def input_dict(viewer_options):
70+
user_input = read_files(viewer_options)
7371
data = build_init_data(user_input)
7472
ui = user_input.get("ui", "reference")
7573
data["config"] = build_config(ui)
@@ -88,8 +86,8 @@ def input_dict():
8886
return {"data": data}
8987

9088

91-
def read_files():
92-
user_input = vars(OPTS)
89+
def read_files(viewer_options):
90+
user_input = vars(viewer_options)
9391
reader = user_input.get("reader", None)
9492
for param in INPUT_OPTIONS:
9593
input = user_input.get(param, None)
@@ -107,14 +105,22 @@ def read_files():
107105
return user_input
108106

109107

110-
async def viewer_ready(itk_viewer):
111-
init_viewer_kwargs = vars(OPTS)
112-
settings = init_params_dict(itk_viewer)
113-
for key, value in init_viewer_kwargs.items():
114-
if key in settings.keys() and value is not None:
115-
settings[key](value)
108+
class ViewerReady:
109+
def __init__(self, viewer_options, init_params_dict):
110+
self.init_viewer_kwargs = vars(viewer_options)
111+
self.init_params_dict = init_params_dict
112+
self.event = threading.Event()
116113

117-
EVENT.set()
114+
async def on_ready(self, itk_viewer):
115+
settings = self.init_params_dict(itk_viewer)
116+
for key, value in self.init_viewer_kwargs.items():
117+
if key in settings.keys() and value is not None:
118+
settings[key](value)
119+
120+
self.event.set()
121+
122+
def wait(self):
123+
self.event.wait()
118124

119125

120126
def set_label_or_image(server, type):
@@ -127,7 +133,7 @@ def fetch_zarr_store(store_type):
127133
return getattr(VIEWER, store_type, None)
128134

129135

130-
def start_viewer(server_url):
136+
def start_viewer(server_url, viewer_options):
131137
server = connect_to_server_sync(
132138
{
133139
"client_id": "itkwidgets-server",
@@ -137,7 +143,8 @@ def start_viewer(server_url):
137143
)
138144
register_itkwasm_imjoy_codecs_cli(server)
139145

140-
input_obj = input_dict()
146+
input_obj = input_dict(viewer_options)
147+
viewer_ready = ViewerReady(viewer_options, init_params_dict)
141148
server.register_service(
142149
{
143150
"name": "parsed_data",
@@ -149,7 +156,7 @@ def start_viewer(server_url):
149156
"run_in_executor": True,
150157
},
151158
"inputObject": lambda: input_obj,
152-
"viewerReady": viewer_ready,
159+
"viewerReady": viewer_ready.on_ready,
153160
"fetchZarrStore": fetch_zarr_store,
154161
}
155162
)
@@ -168,10 +175,10 @@ def start_viewer(server_url):
168175
}
169176
)
170177

171-
return server, input_obj
178+
return server, input_obj, viewer_ready
172179

173180

174-
def main():
181+
def main(viewer_options):
175182
global VIEWER
176183
JWT_SECRET = str(uuid.uuid4())
177184
os.environ["JWT_SECRET"] = JWT_SECRET
@@ -180,8 +187,8 @@ def main():
180187
server_url = f"http://{SERVER_HOST}:{PORT}"
181188
viewer_mount_dir = str(Path(VIEWER_HTML).parent)
182189

183-
out = None if OPTS.verbose else subprocess.DEVNULL
184-
err = None if OPTS.verbose else subprocess.STDOUT
190+
out = None if viewer_options.verbose else subprocess.DEVNULL
191+
err = None if viewer_options.verbose else subprocess.STDOUT
185192
with subprocess.Popen(
186193
[
187194
sys.executable,
@@ -208,7 +215,7 @@ def main():
208215
timeout -= 0.1
209216
time.sleep(0.1)
210217

211-
server, input_obj = start_viewer(server_url)
218+
server, input_obj, viewer_ready = start_viewer(server_url, viewer_options)
212219
workspace = server.config.workspace
213220
token = server.generate_token()
214221
params = urlencode({"workspace": workspace, "token": token})
@@ -217,10 +224,10 @@ def main():
217224
# Updates for resolution progression
218225
rate = 1.0
219226
fast_rate = 0.05
220-
if OPTS.rotate:
227+
if viewer_options.rotate:
221228
rate = fast_rate
222229

223-
if OPTS.browser:
230+
if viewer_options.browser:
224231
sys.stdout.write(f"Viewer url:\n\n {url}\n\n")
225232
webbrowser.open_new_tab(f"{server_url}/itkwidgets/index.html?{params}")
226233
else:
@@ -258,15 +265,15 @@ def main():
258265
elif input_data["y_slice"] is None and input_data["view_mode"] == "YPlane":
259266
page.locator('label[itk-vtk-tooltip-content="Y plane play scroll"]').click()
260267
rate = fast_rate
261-
elif input_data["y_slice"] is None and input_data["view_mode"] == "ZPlane":
268+
elif input_data["z_slice"] is None and input_data["view_mode"] == "ZPlane":
262269
page.locator('label[itk-vtk-tooltip-content="Z plane play scroll"]').click()
263270
rate = fast_rate
264271

265-
EVENT.wait() # Wait until viewer is created before launching REPL
272+
viewer_ready.wait() # Wait until viewer is created before launching REPL
266273
workspace = server.config.workspace
267274
svc = server.get_service(f"{workspace}/itkwidgets-client:itk-vtk-viewer")
268275
VIEWER = view(itk_viewer=svc.viewer(), server=server)
269-
if not OPTS.browser:
276+
if not viewer_options.browser:
270277
from imgcat import imgcat
271278
terminal_height = min(terminal_size.lines - 1, terminal_size.columns // 3)
272279

@@ -278,7 +285,7 @@ def main():
278285
CSI = b'\033['
279286
sys.stdout.buffer.write(CSI + str(terminal_height).encode() + b"F")
280287

281-
if OPTS.repl:
288+
if viewer_options.repl:
282289
banner = f"""
283290
Welcome to the itkwidgets command line tool! Press CTRL+D or
284291
run `exit()` to terminate the REPL session. Use the `viewer`
@@ -289,8 +296,6 @@ def main():
289296

290297

291298
def cli_entrypoint():
292-
global OPTS
293-
294299
parser = argparse.ArgumentParser()
295300

296301
parser.add_argument("data", nargs="?", type=str, help="Path to a data file.")
@@ -484,14 +489,14 @@ def cli_entrypoint():
484489
)
485490
parser.add_argument("--units", type=str, help="Units to display in the scale bar.")
486491

487-
OPTS = parser.parse_args()
492+
viewer_options = parser.parse_args()
488493

489494
try:
490-
main()
495+
main(viewer_options)
491496
except KeyboardInterrupt:
492497
if BROWSER:
493498
BROWSER.close()
494-
if not OPTS.browser:
499+
if not viewer_options.browser:
495500
# Clear `^C%`
496501
CSI = b'\033['
497502
sys.stdout.buffer.write(CSI + b"1K")

0 commit comments

Comments
 (0)