Skip to content

napari_ndev._napari_reader #

napari_get_reader #

napari_get_reader(path, in_memory=None, open_first_scene_only=False)

Get the appropriate reader function for a single given path.

Parameters:

  • path #

    (PathLike) –

    Path to the file to be read

  • in_memory #

    (bool, default: None ) –

    Whether to read the file in memory, by default None

  • open_first_scene_only #

    (bool, default: False ) –

    Whether to ignore multi-scene files and just open the first scene, by default False

Returns:

  • ReaderFunction

    The reader function for the given path

Source code in src/napari_ndev/_napari_reader.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
def napari_get_reader(
    path: PathLike,
    in_memory: bool | None = None,
    open_first_scene_only: bool = False,
) -> ReaderFunction | None:
    """
    Get the appropriate reader function for a single given path.

    Parameters
    ----------
    path : PathLike
        Path to the file to be read
    in_memory : bool, optional
        Whether to read the file in memory, by default None
    open_first_scene_only : bool, optional
        Whether to ignore multi-scene files and just open the first scene,
        by default False


    Returns
    -------
    ReaderFunction
        The reader function for the given path

    """
    if isinstance(path, list):
        logger.info("Bioio: Expected a single path, got a list of paths.")
        return None

    try:
        # TODO: Test this if else functionality.
        from bioio import plugin_feasibility_report as pfr
        fr = pfr(path)
        if 'bioio-ome-tiff' in fr and fr['bioio-ome-tiff'].supported:
            import bioio_ome_tiff
            reader = bioio_ome_tiff.Reader
        else:
            plugin = nImage.determine_plugin(path)
            reader = plugin.metadata.get_reader()
        # return napari_reader_function(path, reader, in_memory)
        return partial(
            napari_reader_function,
            reader=reader,
            in_memory=in_memory,
            open_first_scene_only=open_first_scene_only
        )
    except UnsupportedFileFormatError:
        logger.warning("Bioio: Unsupported file format")
        return None
    except Exception as e:  # noqa: BLE001
        logger.warning("Bioio: Error reading file")
        logger.warning(e)
        return None

napari_reader_function #

napari_reader_function(
    path,
    reader,
    in_memory=None,
    open_first_scene_only=False,
    layer_type="image",
)

Read a file using the given reader function.

Parameters:

  • path #

    (PathLike) –

    Path to the file to be read

  • reader #

    (None) –

    Bioio Reader function to be used to read the file, by default None.

  • in_memory #

    (bool, default: None ) –

    Whether to read the file in memory, by default None.

  • layer_type #

    (str, default: 'image' ) –

    Type of layer to be created in napari, by default 'image'.

  • open_first_scene_only #

    (bool, default: False ) –

    Whether to ignore multi-scene files and just open the first scene, by default False.

Returns:

  • list

    List containing image data, metadata, and layer type

Source code in src/napari_ndev/_napari_reader.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
def napari_reader_function(
    path: PathLike,
    reader: Callable,
    in_memory: bool | None = None,
    open_first_scene_only: bool = False,
    layer_type: str = 'image'
) -> list[LayerData] | None:
    """
    Read a file using the given reader function.

    Parameters
    ----------
    path : PathLike
        Path to the file to be read
    reader : None
        Bioio Reader function to be used to read the file, by default None.
    in_memory : bool, optional
        Whether to read the file in memory, by default None.
    layer_type : str, optional
        Type of layer to be created in napari, by default 'image'.
    open_first_scene_only : bool, optional
        Whether to ignore multi-scene files and just open the first scene,
        by default False.

    Returns
    -------
    list
        List containing image data, metadata, and layer type

    """
    if isinstance(path, list):
        logger.info("Bioio: Expected a single path, got a list of paths.")
        return None

    img = nImage(path, reader=reader)
    in_memory = img._determine_in_memory(path) if in_memory is None else in_memory
    logger.info('Bioio: Reading in-memory: %s', in_memory)

    if len(img.scenes) > 1 and not open_first_scene_only:
        _get_scenes(path=path, img=img, in_memory=in_memory)
        return [(None,)]

    # TODO: why should I return the squeezed data and not the full data
    # is it because napari squeezes it anyway?
    img_data = img.get_napari_image_data(in_memory=in_memory)
    img_meta = img.get_napari_metadata(path)

    return [(img_data.data, img_meta, layer_type)]