def test_sample_data_triggers_reader_dialog(mock_npe2_pm, tmp_reader, make_napari_viewer): """Sample data pops reader dialog if multiple compatible readers""" # make two tmp readers that take tif files tmp_reader(mock_npe2_pm, 'tif-reader', filename_patterns=['*.tif']) tmp_reader(mock_npe2_pm, 'other-tif-reader', filename_patterns=['*.tif']) # make a sample data reader for tif file tmp_sample_plugin = DynamicPlugin('sample-plugin', mock_npe2_pm) my_sample = SampleDataURI( key='tmp-sample', display_name='Temp Sample', uri='some-path/some-file.tif', ) tmp_sample_plugin.manifest.contributions.sample_data = [my_sample] tmp_sample_plugin.register() viewer = make_napari_viewer() sample_action = viewer.window.file_menu.open_sample_menu.actions()[0] with mock.patch( 'napari._qt.menus.file_menu.handle_gui_reading') as mock_read: sample_action.trigger() # assert that handle gui reading was called mock_read.assert_called_once()
def make_plugin( pm, name, filename_patterns=['*.fake'], ): reader_plugin = DynamicPlugin(name, plugin_manager=pm) @reader_plugin.contribute.reader(filename_patterns=filename_patterns) def read_func(pth): ... reader_plugin.register() return reader_plugin
def make_plugin( pm, name, filename_patterns=['*.fake'], accepts_directories=False ): reader_plugin = DynamicPlugin(name, plugin_manager=pm) @reader_plugin.contribute.reader( filename_patterns=filename_patterns, accepts_directories=accepts_directories, ) def read_func(pth): ... reader_plugin.register() return reader_plugin
def builtins(_mock_npe2_pm: PluginManager): plugin = DynamicPlugin('napari', plugin_manager=_mock_npe2_pm) mf = PluginManifest.from_file(Path(__file__).parent / 'builtins.yaml') plugin.manifest = mf with plugin: yield plugin
@pytest.fixture def builtins(_mock_npe2_pm: PluginManager): plugin = DynamicPlugin('napari', plugin_manager=_mock_npe2_pm) mf = PluginManifest.from_file(Path(__file__).parent / 'builtins.yaml') plugin.manifest = mf with plugin: yield plugin @pytest.fixture def tmp_plugin(_mock_npe2_pm: PluginManager): # guarantee that the name is unique, even if tmp_plugin has already been used count = itertools.count(0) while (name := f'tmp_plugin{next(count)}') in _mock_npe2_pm._manifests: continue with DynamicPlugin(name, plugin_manager=_mock_npe2_pm) as plugin: yield plugin def _event_check(instance): def _prepare_check(name, no_event_): def check(instance, no_event=no_event_): if name in no_event: assert not hasattr(instance.events, name), f"event {name} defined" else: assert hasattr(instance.events, name), f"event {name} not defined" return check