Skip to content

Commit b19c091

Browse files
committed
Update SpatialDataWrapper. Bump js version
1 parent 037a60f commit b19c091

File tree

4 files changed

+29
-21
lines changed

4 files changed

+29
-21
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "vitessce"
7-
version = "3.6.6"
7+
version = "3.6.7"
88
authors = [
99
{ name="Mark Keller", email="[email protected]" },
1010
]

src/vitessce/file_def_utils.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,29 +127,25 @@ def gen_path_schema(key: str, path: Optional[str], options: dict):
127127
gen_feature_labels_schema = partial(gen_path_schema, "featureLabels")
128128

129129

130-
def gen_sdata_image_schema(options, path: str, coordinate_system: Optional[str] = None, affine_transformation: Optional[np.ndarray] = None) -> dict:
130+
def gen_sdata_image_schema(options, path: str, coordinate_system: Optional[str] = None) -> dict:
131131
if path is not None:
132132
options["image"] = {
133133
"path": path
134134
}
135-
if affine_transformation is not None:
136-
options["image"]['coordinateTransformations'] = affine_transformation
137135
if coordinate_system is not None:
138136
options["image"]['coordinateSystem'] = coordinate_system
139137
return options
140138

141139

142-
def gen_sdata_labels_schema(options, path: str, table_path: str = "tables/table", coordinate_system: Optional[str] = None, affine_transformation: Optional[np.ndarray] = None) -> dict:
140+
def gen_sdata_obs_segmentations_schema(options, path: str, table_path: str = "tables/table", coordinate_system: Optional[str] = None) -> dict:
143141
if path is not None:
144-
options["labels"] = {
142+
options["obsSegmentations"] = {
145143
"path": path
146144
}
147145
if table_path is not None:
148-
options["labels"]['tablePath'] = table_path
149-
if affine_transformation is not None:
150-
options["labels"]['coordinateTransformations'] = affine_transformation
146+
options["obsSegmentations"]['tablePath'] = table_path
151147
if coordinate_system is not None:
152-
options["labels"]['coordinateSystem'] = coordinate_system
148+
options["obsSegmentations"]['coordinateSystem'] = coordinate_system
153149
return options
154150

155151

src/vitessce/widget.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ def launch_vitessce_io(config, theme='light', port=None, base_url=None, host_nam
131131
port, DEFAULT_PORT, proxy=proxy, base_url=base_url, host_name=host_name)
132132
config_dict = config.to_dict(base_url=base_url)
133133
routes = config.get_routes()
134+
135+
stores = config.get_stores(base_url=base_url)
136+
if len(stores) > 0:
137+
raise ValueError('One or more files in this configuration have been provided via Zarr store, which can only be loaded via the widget. Either use VitessceConfig.widget or VitessceConfig.display (instead of .web_app), or provide the files via _path or _url (rather than _store) parameters.')
138+
134139
serve_routes(config, routes, use_port)
135140
vitessce_url = f"http://vitessce.io/#?theme={theme}&url=data:," + quote_plus(
136141
json.dumps(config_dict))
@@ -626,7 +631,7 @@ class VitessceWidget(anywidget.AnyWidget):
626631

627632
next_port = DEFAULT_PORT
628633

629-
js_package_version = Unicode('3.6.7').tag(sync=True)
634+
js_package_version = Unicode('3.6.8').tag(sync=True)
630635
js_dev_mode = Bool(False).tag(sync=True)
631636
custom_js_url = Unicode('').tag(sync=True)
632637
plugin_esm = List(trait=Unicode(''), default_value=[]).tag(sync=True)
@@ -639,7 +644,7 @@ class VitessceWidget(anywidget.AnyWidget):
639644

640645
store_urls = List(trait=Unicode(''), default_value=[]).tag(sync=True)
641646

642-
def __init__(self, config, height=600, theme='auto', uid=None, port=None, proxy=False, js_package_version='3.6.7', 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, prevent_scroll=True):
647+
def __init__(self, config, height=600, theme='auto', uid=None, port=None, proxy=False, js_package_version='3.6.8', 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, prevent_scroll=True):
643648
"""
644649
Construct a new Vitessce widget.
645650
@@ -775,7 +780,7 @@ def _plugin_command(self, params, buffers):
775780
# Launch Vitessce using plain HTML representation (no ipywidgets)
776781

777782

778-
def ipython_display(config, height=600, theme='auto', base_url=None, host_name=None, uid=None, port=None, proxy=False, js_package_version='3.6.7', js_dev_mode=False, custom_js_url='', plugins=None, remount_on_uid_change=True, page_mode=False, page_esm=None):
783+
def ipython_display(config, height=600, theme='auto', base_url=None, host_name=None, uid=None, port=None, proxy=False, js_package_version='3.6.8', js_dev_mode=False, custom_js_url='', plugins=None, remount_on_uid_change=True, page_mode=False, page_esm=None):
779784
from IPython.display import display, HTML
780785
uid_str = "vitessce" + get_uid_str(uid)
781786

src/vitessce/wrappers.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
gen_obs_labels_schema,
3030
gen_obs_sets_schema,
3131
gen_sdata_image_schema,
32-
gen_sdata_labels_schema,
32+
gen_sdata_obs_segmentations_schema,
3333
gen_sdata_obs_spots_schema,
3434
gen_sdata_obs_sets_schema,
3535
gen_sdata_obs_feature_matrix_schema,
@@ -1401,7 +1401,7 @@ def auto_view_config(self, vc):
14011401

14021402
class SpatialDataWrapper(AnnDataWrapper):
14031403

1404-
def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] = None, sdata_store: Optional[Union[str, zarr.storage.StoreLike]] = None, sdata_artifact: Optional[ln.Artifact] = None, image_path: Optional[str] = None, region: Optional[str] = None, coordinate_system: Optional[str] = None, affine_transformation: Optional[np.ndarray] = None, obs_spots_path: Optional[str] = None, labels_path: Optional[str] = None, table_path: str = "tables/table", coordination_values=None, **kwargs):
1404+
def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] = None, sdata_store: Optional[Union[str, zarr.storage.StoreLike]] = None, sdata_artifact: Optional[ln.Artifact] = None, image_path: Optional[str] = None, region: Optional[str] = None, coordinate_system: Optional[str] = None, obs_spots_path: Optional[str] = None, obs_segmentations_path: Optional[str] = None, table_path: str = "tables/table", coordination_values=None, **kwargs):
14051405
"""
14061406
Wrap a SpatialData object.
14071407
@@ -1421,8 +1421,8 @@ def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] =
14211421
:type affine_transformation: Optional[np.ndarray]
14221422
:param obs_spots_path: Location of shapes that should be interpreted as spot observations, by default None
14231423
:type obs_spots_path: Optional[str]
1424-
:param labels_path: Location of the labels (segmentation bitmask image), by default None
1425-
:type labels_path: Optional[str]
1424+
:param obs_segmentations_path: Path to a labels or shapes element (segmentation bitmask label image or segmentation polygon shapes), by default None
1425+
:type obs_segmentations_path: Optional[str]
14261426
"""
14271427
raise_error_if_zero_or_more_than_one([
14281428
sdata_path,
@@ -1437,14 +1437,21 @@ def __init__(self, sdata_path: Optional[str] = None, sdata_url: Optional[str] =
14371437
kwargs.get('adata_artifact', None)
14381438
])
14391439
super().__init__(adata_path=sdata_path, adata_url=sdata_url, adata_store=sdata_store, adata_artifact=sdata_artifact, **kwargs)
1440+
if "labels_path" in kwargs:
1441+
warnings.warn("`labels_path` is deprecated. Use `obs_segmentations_path` instead.", DeprecationWarning)
1442+
self._obs_segmentations_path = kwargs["labels_path"]
1443+
if "shapes_path" in kwargs:
1444+
warnings.warn("`shapes_path` is deprecated. Use `obs_segmentations_path` instead.", DeprecationWarning)
1445+
if "affine_transformation" in kwargs:
1446+
warnings.warn("`affine_transformation` is deprecated. Store transformations in the SpatialData object, then specify `coordinate_system`.", DeprecationWarning)
1447+
14401448
self.local_dir_uid = make_unique_filename(".sdata.zarr")
14411449
self._image_path = image_path
14421450
self._region = region
14431451
self._coordinate_system = coordinate_system
1444-
self._affine_transformation = affine_transformation
14451452
self._kwargs = kwargs
14461453
self._obs_spots_path = obs_spots_path
1447-
self._labels_path = labels_path
1454+
self._obs_segmentations_path = obs_segmentations_path
14481455
if self._adata_path is not None:
14491456
self.zarr_folder = 'spatialdata.zarr'
14501457
self.obs_type_label = None
@@ -1530,8 +1537,8 @@ def generator(base_url):
15301537
options = gen_sdata_obs_feature_matrix_schema(options, self._expression_matrix, self._gene_var_filter, self._matrix_gene_var_filter, self._region)
15311538
options = gen_sdata_obs_sets_schema(options, self._obs_set_elems, self._obs_set_names, self._table_path, self._region)
15321539
options = gen_sdata_obs_spots_schema(options, self._obs_spots_path, self._table_path, self._region, self._coordinate_system)
1533-
options = gen_sdata_image_schema(options, self._image_path, self._coordinate_system, self._affine_transformation)
1534-
options = gen_sdata_labels_schema(options, self._labels_path, self._table_path, self._coordinate_system, self._affine_transformation)
1540+
options = gen_sdata_image_schema(options, self._image_path, self._coordinate_system)
1541+
options = gen_sdata_obs_segmentations_schema(options, self._obs_segmentations_path, self._table_path, self._coordinate_system)
15351542
options = gen_feature_labels_schema(self._feature_labels, options)
15361543
if len(options.keys()) > 0:
15371544
obj_file_def = {

0 commit comments

Comments
 (0)