From edbf9abf32e9e9c4276db26ebb87df668bce6cee Mon Sep 17 00:00:00 2001 From: William Moore Date: Mon, 20 Sep 2021 12:43:32 +0100 Subject: [PATCH 1/2] Labels properties are a dict of lists --- napari_ome_zarr/_reader.py | 40 +++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/napari_ome_zarr/_reader.py b/napari_ome_zarr/_reader.py index 8d78025..c7fdc48 100644 --- a/napari_ome_zarr/_reader.py +++ b/napari_ome_zarr/_reader.py @@ -28,7 +28,7 @@ def napari_hook_implementation( LOGGER = logging.getLogger("napari_ome_zarr.reader") METADATA_KEYS = ("name", "visible", "contrast_limits", "colormap", - "metadata", "properties") + "metadata") @napari_hook_implementation def napari_get_reader(path: PathLike) -> Optional[ReaderFunction]: @@ -48,6 +48,40 @@ def napari_get_reader(path: PathLike) -> Optional[ReaderFunction]: return None +def transform_properties(props=None): + """ + Transform properties + + Transform a dict of {label_id : {key: value, key2: value2}} + with a key for every LABEL + into a dict of a key for every VALUE, with a list of values for each + { + "index": [1381342, 1381343...] + "omero:roiId": [1381342, 1381343...], + "omero:shapeId": [1682567, 1682567...] + } + """ + if props is None: + return None + + properties: Dict[str, List] = {} + + # First, create lists for all existing keys... + for label_id, props_dict in props.items(): + for key in props_dict.keys(): + properties[key] = [] + + keys = list(properties.keys()) + + properties["index"] = [] + for label_id, props_dict in props.items(): + properties["index"].append(label_id) + # ...in case some objects don't have all the keys + for key in keys: + properties[key].append(props_dict.get(key, None)) + return properties + + def transform(nodes: Iterator[Node]) -> Optional[ReaderFunction]: def f(*args: Any, **kwargs: Any) -> List[LayerData]: results: List[LayerData] = list() @@ -98,6 +132,10 @@ def f(*args: Any, **kwargs: Any) -> List[LayerData]: if not isinstance(cm, Colormap): cms[idx] = Colormap(cm) + properties = transform_properties(node.metadata.get("properties")) + if properties is not None: + metadata["properties"] = properties + rv: LayerData = (data, metadata, layer_type) LOGGER.debug(f"Transformed: {rv}") results.append(rv) From ccb58f86e5c5c72eb75bd4f8290798b521473451 Mon Sep 17 00:00:00 2001 From: William Moore Date: Mon, 20 Sep 2021 13:48:25 +0100 Subject: [PATCH 2/2] Add pooch to test requirements Needed by from napari import conftest, since napari test deps aren't installed --- tox.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/tox.ini b/tox.ini index 2e8a95c..ccae3e9 100644 --- a/tox.ini +++ b/tox.ini @@ -32,6 +32,7 @@ deps = # you can remove these if you don't use them napari magicgui + pooch pytest-qt qtpy pyqt5