@@ -233,6 +233,7 @@ def get_uid_str(uid):
233
233
const remountOnUidChange = view.model.get('remount_on_uid_change');
234
234
const storeUrls = view.model.get('store_urls');
235
235
const invokeTimeout = view.model.get('invoke_timeout');
236
+ const invokeBatched = view.model.get('invoke_batched');
236
237
237
238
const pageMode = view.model.get('page_mode');
238
239
const pageEsm = view.model.get('page_esm');
@@ -319,23 +320,25 @@ def get_uid_str(uid):
319
320
storeUrl,
320
321
{
321
322
async get(key) {
322
- return enqueue([storeUrl, key]);
323
- /*
324
- const [data, buffers] = await view.experimental.invoke("_zarr_get", [storeUrl, key], {
325
- signal: AbortSignal.timeout(invokeTimeout),
326
- });
327
- if (!data.success) return undefined;
328
-
329
- if (key.includes("spatialdata_attrs") && key.endsWith("0") && !ArrayBuffer.isView(buffers[0].buffer)) {
330
- // For some reason, the Zarrita.js UnicodeStringArray does not seem to work with
331
- // ArrayBuffers (throws a TypeError), so here we convert to Uint8Array if needed.
332
- // This error is occurring specifically for the arr.getChunk call within the AnnDataSource._loadString function.
333
- // TODO: figure out a more long-term solution.
334
- return new Uint8Array(buffers[0].buffer);
335
- }
323
+ if (invokeBatched) {
324
+ return enqueue([storeUrl, key]);
325
+ } else {
326
+ // Do not submit zarr gets in batches. Instead, submit individually.
327
+ const [data, buffers] = await view.experimental.invoke("_zarr_get", [storeUrl, key], {
328
+ signal: AbortSignal.timeout(invokeTimeout),
329
+ });
330
+ if (!data.success) return undefined;
331
+
332
+ if (key.includes("spatialdata_attrs") && key.endsWith("0") && !ArrayBuffer.isView(buffers[0].buffer)) {
333
+ // For some reason, the Zarrita.js UnicodeStringArray does not seem to work with
334
+ // ArrayBuffers (throws a TypeError), so here we convert to Uint8Array if needed.
335
+ // This error is occurring specifically for the arr.getChunk call within the AnnDataSource._loadString function.
336
+ // TODO: figure out a more long-term solution.
337
+ return new Uint8Array(buffers[0].buffer);
338
+ }
336
339
337
- return buffers[0].buffer;
338
- */
340
+ return buffers[0].buffer;
341
+ }
339
342
},
340
343
}
341
344
])),
@@ -603,10 +606,11 @@ class VitessceWidget(anywidget.AnyWidget):
603
606
page_mode = Bool (False ).tag (sync = True )
604
607
page_esm = Unicode ('' ).tag (sync = True )
605
608
invoke_timeout = Int (300000 ).tag (sync = True )
609
+ invoke_batched = Bool (True ).tag (sync = True )
606
610
607
611
store_urls = List (trait = Unicode ('' ), default_value = []).tag (sync = True )
608
612
609
- def __init__ (self , config , height = 600 , theme = 'auto' , uid = None , port = None , proxy = False , js_package_version = '3.5.11' , js_dev_mode = False , custom_js_url = '' , plugins = None , remount_on_uid_change = True , prefer_local = True , invoke_timeout = 300000 , page_mode = False , page_esm = None ):
613
+ def __init__ (self , config , height = 600 , theme = 'auto' , uid = None , port = None , proxy = False , js_package_version = '3.5.11' , js_dev_mode = False , custom_js_url = '' , plugins = None , remount_on_uid_change = True , prefer_local = True , invoke_timeout = 300000 , invoke_batched = True , page_mode = False , page_esm = None ):
610
614
"""
611
615
Construct a new Vitessce widget.
612
616
@@ -623,6 +627,7 @@ def __init__(self, config, height=600, theme='auto', uid=None, port=None, proxy=
623
627
:param bool remount_on_uid_change: Passed to the remountOnUidChange prop of the <Vitessce/> React component. By default, True.
624
628
:param bool prefer_local: Should local data be preferred (only applies to `*_artifact` data objects)? By default, True.
625
629
:param int invoke_timeout: The timeout in milliseconds for invoking Python functions from JavaScript. By default, 300000.
630
+ :param bool invoke_batched: Should invocations (Zarr gets) be submitted in batch, or individually? By default, True.
626
631
:param bool page_mode: Whether to render the <Vitessce/> component in grid-mode or page-mode. By default, False.
627
632
:param str page_esm: The ES module string for the page component creation function. Optional.
628
633
@@ -658,7 +663,7 @@ def __init__(self, config, height=600, theme='auto', uid=None, port=None, proxy=
658
663
js_package_version = js_package_version , js_dev_mode = js_dev_mode , custom_js_url = custom_js_url ,
659
664
plugin_esm = plugin_esm , remount_on_uid_change = remount_on_uid_change ,
660
665
page_mode = page_mode , page_esm = ('' if page_esm is None else page_esm ),
661
- invoke_timeout = invoke_timeout ,
666
+ invoke_timeout = invoke_timeout , invoke_batched = invoke_batched ,
662
667
uid = uid_str , store_urls = list (self ._stores .keys ())
663
668
)
664
669
0 commit comments