コード例 #1
0
def test_try_reader_from_settings(make_napari_viewer, tmpdir, layers):
    """Test opening file with reader saved in settings"""
    viewer = make_napari_viewer()
    im_pth = os.path.join(tmpdir, 'layer.png')
    extension = '.png'
    layers[0].save(im_pth, plugin=BUILTINS_DISP)

    readers = {BUILTINS_DISP: BUILTINS_NAME}
    with restore_settings_on_exit():
        # read successfully with settings
        get_settings().plugins.extension2reader = {extension: BUILTINS_DISP}
        error_message = viewer.window._qt_viewer._try_reader_from_settings(
            readers, extension, im_pth)
        assert error_message is None
        assert len(viewer.layers) == 1
        assert viewer.layers[0].source.reader_plugin == BUILTINS_NAME

        # find plugin from settings but it fails to read
        os.remove(im_pth)
        error_message = viewer.window._qt_viewer._try_reader_from_settings(
            readers, extension, im_pth)
        assert error_message.startswith(
            f"Tried to open file with {BUILTINS_DISP}, but reading failed")

    # fail to find plugin from settings
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {
            extension: 'not-a-real-name'
        }
        error_message = viewer.window._qt_viewer._try_reader_from_settings(
            readers, extension, im_pth)
        assert error_message.startswith(
            "Can't find not-a-real-name plugin associated with .png files.")
コード例 #2
0
def test_extension2reader_removal(extension2reader_widget, qtbot):
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {
            '.test': 'test-plugin',
            '.abc': 'abc-plugin',
        }
        widget = extension2reader_widget()

        assert widget._table.rowCount() == 2

        btn_to_click = widget._table.cellWidget(0, 1).findChild(QPushButton)
        qtbot.mouseClick(btn_to_click, Qt.LeftButton)

        assert get_settings().plugins.extension2reader == {
            '.abc': 'abc-plugin'
        }
        assert widget._table.rowCount() == 1
        assert widget._table.item(0, 0).text() == '.abc'

        # remove remaining extension
        btn_to_click = widget._table.cellWidget(0, 1).findChild(QPushButton)
        qtbot.mouseClick(btn_to_click, Qt.LeftButton)
        assert get_settings().plugins.extension2reader == {}
        assert widget._table.rowCount() == 1
        assert ("No filename preferences found"
                in widget._table.item(0, 0).text())
コード例 #3
0
def test_get_preferred_reader_complex_pattern():
    pth = 'my-specific-folder/my_file.tif'
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {
            'my-specific-folder/*.tif': 'fake-plugin'
        }
        reader = get_preferred_reader(pth)
        assert reader == 'fake-plugin'
コード例 #4
0
def test_extension2reader_defaults(extension2reader_widget, ):
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {}
        widget = extension2reader_widget()

        assert widget._table.rowCount() == 1
        assert (widget._table.itemAt(
            0, 0).text() == 'No filename preferences found.')
コード例 #5
0
def test_extension2reader_with_settings(extension2reader_widget, ):
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'.test': 'test-plugin'}
        widget = extension2reader_widget()

        assert widget._table.rowCount() == 1
        assert widget._table.item(0, 0).text() == '.test'
        assert (widget._table.cellWidget(
            0, 1).findChild(QLabel).text() == 'test-plugin')
コード例 #6
0
ファイル: test_utils.py プロジェクト: jojoelfe/napari
def test_coercion_to_glob_doesnt_change_settings():
    with restore_settings_on_exit():
        settings = {'*.tif': 'fake-plugin', '.csv': 'other-plugin'}
        get_settings().plugins.extension2reader = settings
        settings = _coerce_extensions_to_globs(settings)
        assert settings == {'*.tif': 'fake-plugin', '*.csv': 'other-plugin'}
        assert get_settings().plugins.extension2reader == {
            '*.tif': 'fake-plugin',
            '.csv': 'other-plugin',
        }
コード例 #7
0
def test_open_or_get_error_preferred_fails(tmp_path):
    viewer = ViewerModel()
    pth = tmp_path / 'my-file.npy'

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'.npy': 'napari'}

        with pytest.raises(ReaderPluginError,
                           match='Tried opening with napari, but failed.'):
            viewer._open_or_raise_error([str(pth)])
コード例 #8
0
def test_open_or_get_error_cant_find_plugin(mock_npe2_pm, tmp_reader):
    """Test correct error message is returned when prefered plugin is missing."""
    viewer = ViewerModel()

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'*.fake': 'fake-reader'}

        tmp_reader(mock_npe2_pm, 'other-fake-reader')

        with pytest.raises(MissingAssociatedReaderError,
                           match="Can't find fake-reader plugin"):
            viewer._open_or_raise_error(['my_file.fake'])
コード例 #9
0
ファイル: test_qt_viewer.py プロジェクト: tlambert03/napari
def test_get_and_try_preferred_reader(make_napari_viewer, tmpdir, layers):
    """Test opening file with user preference and persisting preference"""
    viewer = make_napari_viewer()
    im_pth = os.path.join(tmpdir, 'layer.png')
    layers[0].save(im_pth, plugin=BUILTINS_DISP)
    error_message = 'Test error message'
    readers = {BUILTINS_DISP: BUILTINS_NAME, 'not-a-plugin': 'not-a-plugin'}

    # open successfully without persisting
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {}
        reader_dialog = MockQtReaderDialog(
            im_pth, readers=readers, error_message=error_message
        )
        reader_dialog._set_plugin_choice(BUILTINS_DISP)
        reader_dialog._set_persist_choice(False)
        viewer.window._qt_viewer._get_and_try_preferred_reader(
            reader_dialog, readers, error_message
        )
        assert len(viewer.layers) == 1
        assert viewer.layers[0].source.reader_plugin == BUILTINS_NAME
        assert get_settings().plugins.extension2reader == {}

    # open successfully and persist choice
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {}
        reader_dialog = MockQtReaderDialog(
            im_pth,
            readers=readers,
            error_message=error_message,
            extension='.png',
        )
        reader_dialog._set_plugin_choice(BUILTINS_DISP)
        reader_dialog._set_persist_choice(True)
        viewer.window._qt_viewer._get_and_try_preferred_reader(
            reader_dialog, readers, error_message
        )
        assert get_settings().plugins.extension2reader == {
            '.png': BUILTINS_DISP
        }
コード例 #10
0
def test_open_or_get_error_prefered_plugin(mock_npe2_pm, tmp_reader, tmp_path):
    """Test plugin preference is respected."""
    viewer = ViewerModel()
    pth = tmp_path / 'my-file.npy'
    np.save(pth, np.random.random((10, 10)))

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'*.npy': 'builtins'}

        tmp_reader(mock_npe2_pm, 'fake-reader', filename_patterns=['*.npy'])
        tmp_reader(mock_npe2_pm,
                   'other-fake-reader',
                   filename_patterns=['*.npy'])

        added = viewer._open_or_raise_error([str(pth)])
        assert len(added) == 1
        assert added[0].source.reader_plugin == 'builtins'
コード例 #11
0
ファイル: test_viewer_model.py プロジェクト: jojoelfe/napari
def test_open_or_get_error_cant_find_plugin(
    tmp_path, mock_npe2_pm, tmp_reader
):
    """Test user is warned and only plugin used if preferred plugin missing."""
    viewer = ViewerModel()
    pth = tmp_path / 'my-file.npy'
    np.save(pth, np.random.random((10, 10)))

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'*.npy': 'fake-reader'}

        with pytest.warns(
            RuntimeWarning, match="Can't find fake-reader plugin"
        ):
            added = viewer._open_or_raise_error([str(pth)])
        assert len(added) == 1
        assert added[0].source.reader_plugin == 'builtins'
コード例 #12
0
def test_adding_new_preference_no_asterisk(extension2reader_widget, qtbot,
                                           tmp_reader, mock_npe2_pm):
    tmp_reader(mock_npe2_pm, 'npy-reader', filename_patterns=['*.npy'])
    tif_reader = tmp_reader(mock_npe2_pm,
                            'tif-reader',
                            filename_patterns=['*.tif'])
    tif_reader.manifest.display_name = "TIF Reader"

    widget = extension2reader_widget(npe1_readers={})
    widget._fn_pattern_edit.setText('.tif')
    # will be filtered and tif-reader will be only item
    widget._new_reader_dropdown.setCurrentIndex(0)

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {}
        widget._save_new_preference(True)
        settings = get_settings().plugins.extension2reader
        assert '*.tif' in settings
        assert settings['*.tif'] == 'tif-reader'
コード例 #13
0
ファイル: test_viewer_model.py プロジェクト: jojoelfe/napari
def test_open_or_get_error_no_prefered_plugin_many_available(
    mock_npe2_pm, tmp_reader
):
    """Test MultipleReaderError raised if preferred plugin missing."""
    viewer = ViewerModel()

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'*.fake': 'not-a-plugin'}

        tmp_reader(mock_npe2_pm, 'fake-reader', filename_patterns=['*.fake'])
        tmp_reader(
            mock_npe2_pm, 'other-fake-reader', filename_patterns=['*.fake']
        )

        with pytest.warns(
            RuntimeWarning, match="Can't find not-a-plugin plugin"
        ):
            with pytest.raises(
                MultipleReaderError, match='Multiple plugins found capable'
            ):
                viewer._open_or_raise_error(['my_file.fake'])
コード例 #14
0
def test_editing_preference(extension2reader_widget, qtbot, tmp_reader,
                            mock_npe2_pm):
    tmp_reader(mock_npe2_pm, 'tif-reader', filename_patterns=['*.tif'])
    tmp_reader(mock_npe2_pm, 'other-tif-reader', filename_patterns=['*.tif'])

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'*.tif': 'tif-reader'}

        widget = extension2reader_widget(npe1_readers={})
        widget._fn_pattern_edit.setText('*.tif')
        # will be filtered and other-tif-reader will be first item
        widget._new_reader_dropdown.setCurrentIndex(0)
        original_row_count = widget._table.rowCount()
        widget._save_new_preference(True)
        settings = get_settings().plugins.extension2reader
        assert '*.tif' in settings
        assert settings['*.tif'] == 'other-tif-reader'
        assert widget._table.rowCount() == original_row_count
        plugin_label = widget._table.cellWidget(original_row_count - 1,
                                                1).findChild(QLabel)
        assert plugin_label.text() == 'other-tif-reader'
コード例 #15
0
def test_open_with_dialog_choices_persist(make_napari_viewer, tmp_path):
    pth = tmp_path / 'my-file.npy'
    np.save(pth, np.random.random((10, 10)))
    display_name = 'builtins'
    persist = True
    extension = '.npy'
    readers = {'builtins': 'builtins'}
    paths = [str(pth)]
    stack = False

    with restore_settings_on_exit():
        viewer = make_napari_viewer()
        open_with_dialog_choices(
            display_name,
            persist,
            extension,
            readers,
            paths,
            stack,
            viewer.window._qt_viewer,
        )
        assert len(viewer.layers) == 1
        assert get_settings().plugins.extension2reader['.npy'] == 'builtins'
コード例 #16
0
ファイル: test_reader_dialog.py プロジェクト: jojoelfe/napari
def test_open_with_dialog_choices_raises(make_napari_viewer):
    pth = 'my-file.fake'
    display_name = 'Fake Plugin'
    persist = True
    extension = '.fake'
    readers = {'fake-plugin': 'Fake Plugin'}
    paths = [str(pth)]
    stack = False

    with restore_settings_on_exit():
        viewer = make_napari_viewer()
        get_settings().plugins.extension2reader = {}
        with pytest.raises(ValueError):
            open_with_dialog_choices(
                display_name,
                persist,
                extension,
                readers,
                paths,
                stack,
                viewer.window._qt_viewer,
            )
        # settings weren't saved because reading failed
        get_settings().plugins.extension2reader == {}
コード例 #17
0
def test_adding_new_preference(extension2reader_widget, qtbot, tmp_reader,
                               mock_npe2_pm):
    tmp_reader(mock_npe2_pm, 'npy-reader', filename_patterns=['*.npy'])
    tif_reader = tmp_reader(mock_npe2_pm,
                            'tif-reader',
                            filename_patterns=['*.tif'])
    tif_reader.manifest.display_name = "TIF Reader"

    widget = extension2reader_widget(npe1_readers={})
    widget._fn_pattern_edit.setText('*.tif')
    # will be filtered and tif-reader will be only item
    widget._new_reader_dropdown.setCurrentIndex(0)

    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {}
        widget._save_new_preference(True)
        settings = get_settings().plugins.extension2reader
        assert '*.tif' in settings
        assert settings['*.tif'] == 'tif-reader'
        assert (widget._table.item(widget._table.rowCount() - 1,
                                   0).text() == '*.tif')
        plugin_label = widget._table.cellWidget(widget._table.rowCount() - 1,
                                                1).findChild(QLabel)
        assert plugin_label.text() == 'TIF Reader'
コード例 #18
0
ファイル: test_utils.py プロジェクト: julianbader/napari
def test_get_preferred_reader_no_readers():
    pth = 'my_file.tif'
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {}
        reader = get_preferred_reader(pth)
        assert reader is None
コード例 #19
0
ファイル: test_utils.py プロジェクト: julianbader/napari
def test_get_preferred_reader_for_extension():
    pth = 'my_file.tif'
    with restore_settings_on_exit():
        get_settings().plugins.extension2reader = {'.tif': 'fake-plugin'}
        reader = get_preferred_reader(pth)
        assert reader == 'fake-plugin'