def test_get_potential_readers_gives_napari(mock_npe2_pm, tmp_reader): pth = 'my_file.tif' tmp_reader(mock_npe2_pm, 'napari', ['*.tif']) readers = get_potential_readers(pth) assert 'napari' in readers assert 'builtins' not in readers
def test_get_potential_readers_plugin_name_disp_name(mock_npe2_pm, tmp_reader): pth = 'my_file.fake' fake_reader = tmp_reader(mock_npe2_pm, 'fake-reader') fake_reader.manifest.display_name = 'Fake Reader' readers = get_potential_readers(pth) assert readers['fake-reader'] == 'Fake Reader'
def test_get_potential_readers_finds_readers(mock_npe2_pm, tmp_reader): pth = 'my_file.tif' tmp_reader(mock_npe2_pm, 'tif-reader', ['*.tif']) tmp_reader(mock_npe2_pm, 'all-reader', ['*.*']) readers = get_potential_readers(pth) assert len(readers) == 3
def test_get_potential_readers_plugin_name_disp_name( tmp_plugin: DynamicPlugin, ): @tmp_plugin.contribute.reader(filename_patterns=['*.fake']) def read_tif(path): ... readers = get_potential_readers('my_file.fake') assert readers[tmp_plugin.name] == tmp_plugin.display_name
def test_get_potential_readers_gives_napari(builtins, tmp_plugin: DynamicPlugin): @tmp_plugin.contribute.reader(filename_patterns=['*.tif']) def read_tif(path): ... readers = get_potential_readers('my_file.tif') assert 'napari' in readers assert 'builtins' not in readers
def test_get_potential_readers_finds_readers(tmp_plugin: DynamicPlugin): tmp2 = tmp_plugin.spawn(register=True) @tmp_plugin.contribute.reader(filename_patterns=['*.tif']) def read_tif(path): ... @tmp2.contribute.reader(filename_patterns=['*.*']) def read_all(path): ... readers = get_potential_readers('my_file.tif') assert len(readers) == 2
def prepare_remaining_readers( paths: List[str], plugin_name: Optional[str] = None, error: Optional[ReaderPluginError] = None, ): """Remove tried plugin from readers and raise error if no readers remain. Parameters ---------- paths : List[str] paths to open plugin_name : str | None name of plugin previously tried, if any error : ReaderPluginError | None previous error raised in the process of opening Returns ------- readers: Dict[str, str] remaining readers to present to user Raises ------ ReaderPluginError raises previous error if no readers are left to try """ readers = get_potential_readers(paths[0]) # remove plugin we already tried e.g. prefered plugin if plugin_name in readers: del readers[plugin_name] # if there's no other readers left, raise the exception if not readers and error: raise ReaderPluginError( trans._( "Tried to read {path_message} with plugin {plugin}, because it was associated with that file extension/because it is the only plugin capable of reading that path, but it gave an error. Try associating a different plugin or installing a different plugin for this kind of file.", path_message=f"[{paths[0]}, ...]" if len(paths) > 1 else paths[0], plugin=plugin_name, ), plugin_name, paths, ) from error return readers
def _filter_compatible_readers(self, new_pattern): """Filter reader dropwdown items to those that accept `new_extension`""" self._new_reader_dropdown.clear() readers = self._npe2_readers.copy() to_delete = [] compatible_readers = get_potential_readers(new_pattern) for plugin_name, display_name in readers.items(): if plugin_name not in compatible_readers: to_delete.append(plugin_name) for reader in to_delete: del readers[reader] readers.update(self._npe1_readers) if not readers: self._new_reader_dropdown.addItem("None available") else: for i, (plugin_name, display_name) in enumerate(sorted(readers.items())): self._add_reader_choice(i, plugin_name, display_name)
def test_get_potential_readers_none_available(mock_npe2_pm): pth = 'my_file.fake' readers = get_potential_readers(pth) assert len(readers) == 0
def test_get_potential_readers_finds_npe1(mock_npe2_pm): pth = 'my_file.tif' readers = get_potential_readers(pth) assert 'builtins' in readers
def test_get_potential_readers_none_available(): assert not get_potential_readers('my_file.fake')