napari-plugin-manager 0.1.7__tar.gz → 0.1.8rc0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.github/workflows/deploy_docs.yml +6 -4
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.github/workflows/test_and_deploy.yml +10 -21
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/PKG-INFO +2 -3
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/pyproject.toml +2 -2
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/test_installer_process.py +2 -1
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/test_qt_plugin_dialog.py +14 -42
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_version.py +3 -3
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/base_qt_package_installer.py +6 -4
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/qt_plugin_dialog.py +7 -4
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager.egg-info/PKG-INFO +2 -3
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager.egg-info/requires.txt +1 -2
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/tox.ini +3 -3
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.github/dependabot.yml +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.gitignore +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.pre-commit-config.yaml +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/LICENSE +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/Makefile +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/README.md +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/RELEASE.md +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/codecov.yml +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/__init__.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_static/custom.css +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_static/favicon/logo-noborder-180.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_static/favicon/logo-silhouette-192.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_static/favicon/logo-silhouette-dark-light.svg +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_templates/navbar-project.html +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_toc.yml +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/conf.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/developers/contributing.md +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/index.md +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/description.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/direct-entry.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/filter.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/import-export.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/install.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/logo.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/status.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/uninstall.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/images/update.png +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/setup.cfg +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/__init__.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/__init__.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/conftest.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/test_base_installer_process.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/test_npe2api.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_tests/test_utils.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/base_qt_plugin_dialog.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/npe2api.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/qt_package_installer.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/qt_warning_dialog.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/qt_widgets.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/styles.qss +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/utils.py +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager.egg-info/SOURCES.txt +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager.egg-info/dependency_links.txt +0 -0
- {napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager.egg-info/top_level.txt +0 -0
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.github/workflows/deploy_docs.yml
RENAMED
|
@@ -32,7 +32,11 @@ jobs:
|
|
|
32
32
|
with:
|
|
33
33
|
python-version: "3.10"
|
|
34
34
|
|
|
35
|
-
-
|
|
35
|
+
- name: Setup headless display
|
|
36
|
+
uses: pyvista/setup-headless-display-action@7d84ae825e6d9297a8e99bdbbae20d1b919a0b19 # v4.2
|
|
37
|
+
with:
|
|
38
|
+
qt: true
|
|
39
|
+
wm: herbstluftwm
|
|
36
40
|
|
|
37
41
|
- name: Install Dependencies
|
|
38
42
|
run: |
|
|
@@ -41,9 +45,7 @@ jobs:
|
|
|
41
45
|
python -m pip install -e ".[docs]"
|
|
42
46
|
|
|
43
47
|
- name: Build Docs
|
|
44
|
-
|
|
45
|
-
with:
|
|
46
|
-
run: make docs
|
|
48
|
+
run: make docs
|
|
47
49
|
|
|
48
50
|
- name: Check file tree contents
|
|
49
51
|
run: tree
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/.github/workflows/test_and_deploy.yml
RENAMED
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
strategy:
|
|
31
31
|
fail-fast: false
|
|
32
32
|
matrix:
|
|
33
|
-
platform: [ubuntu-latest, windows-latest, macos-
|
|
33
|
+
platform: [ubuntu-latest, windows-latest, macos-15-intel, macos-latest]
|
|
34
34
|
python-version: ["3.10", "3.11", "3.12"]
|
|
35
35
|
napari: ["latest", "repo"]
|
|
36
36
|
tool: ["pip", "conda"]
|
|
@@ -47,7 +47,7 @@ jobs:
|
|
|
47
47
|
tool: conda
|
|
48
48
|
- platform: windows-latest
|
|
49
49
|
napari: repo
|
|
50
|
-
- platform: macos-
|
|
50
|
+
- platform: macos-15-intel
|
|
51
51
|
napari: repo
|
|
52
52
|
- platform: macos-latest
|
|
53
53
|
napari: repo
|
|
@@ -70,15 +70,11 @@ jobs:
|
|
|
70
70
|
conda-remove-defaults: "true"
|
|
71
71
|
python-version: ${{ matrix.python-version }}
|
|
72
72
|
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
run: |
|
|
79
|
-
git clone --depth 1 https://github.com/pyvista/gl-ci-helpers.git
|
|
80
|
-
powershell gl-ci-helpers/appveyor/install_opengl.ps1
|
|
81
|
-
if (Test-Path -Path "C:\Windows\system32\opengl32.dll" -PathType Leaf) {Exit 0} else {Exit 1}
|
|
73
|
+
- name: Setup headless display
|
|
74
|
+
uses: pyvista/setup-headless-display-action@7d84ae825e6d9297a8e99bdbbae20d1b919a0b19 # v4.2
|
|
75
|
+
with:
|
|
76
|
+
qt: true
|
|
77
|
+
wm: herbstluftwm
|
|
82
78
|
|
|
83
79
|
- name: Install dependencies without tox-conda
|
|
84
80
|
if: matrix.tool == 'pip'
|
|
@@ -95,9 +91,7 @@ jobs:
|
|
|
95
91
|
|
|
96
92
|
- name: Test with tox - pip
|
|
97
93
|
if: matrix.tool == 'pip'
|
|
98
|
-
|
|
99
|
-
with:
|
|
100
|
-
run: python -m tox
|
|
94
|
+
run: python -m tox
|
|
101
95
|
env:
|
|
102
96
|
PYVISTA_OFF_SCREEN: True # required for opengl on windows
|
|
103
97
|
NAPARI: ${{ matrix.napari }}
|
|
@@ -105,18 +99,13 @@ jobs:
|
|
|
105
99
|
FORCE_COLOR: 1
|
|
106
100
|
- name: Test with tox - conda
|
|
107
101
|
if: matrix.tool == 'conda'
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
shell: bash -el {0}
|
|
111
|
-
run: python -m tox
|
|
102
|
+
shell: bash -el {0}
|
|
103
|
+
run: python -m tox
|
|
112
104
|
env:
|
|
113
105
|
PYVISTA_OFF_SCREEN: True # required for opengl on windows
|
|
114
106
|
NAPARI: ${{ matrix.napari }}
|
|
115
107
|
TOOL: ${{ matrix.tool }}
|
|
116
108
|
FORCE_COLOR: 1
|
|
117
|
-
# Only supported pyside2 and pyside6 are not supported on py312, py313
|
|
118
|
-
# no Qt backends supported by conda-forge on py313
|
|
119
|
-
TOX_SKIP_ENV: ".*py31[23].*PySide2|.*py313.*conda"
|
|
120
109
|
|
|
121
110
|
|
|
122
111
|
- name: Upload coverage data
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: napari-plugin-manager
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8rc0
|
|
4
4
|
Summary: Install plugins for napari, in napari.
|
|
5
5
|
Author-email: napari team <napari-steering-council@googlegroups.com>
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -29,7 +29,6 @@ Classifier: Operating System :: MacOS
|
|
|
29
29
|
Requires-Python: >=3.10
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
License-File: LICENSE
|
|
32
|
-
Requires-Dist: napari
|
|
33
32
|
Requires-Dist: npe2
|
|
34
33
|
Requires-Dist: qtpy
|
|
35
34
|
Requires-Dist: superqt
|
|
@@ -45,7 +44,7 @@ Requires-Dist: napari-plugin-manager[uv]; extra == "testing"
|
|
|
45
44
|
Requires-Dist: coverage; extra == "testing"
|
|
46
45
|
Requires-Dist: flaky; extra == "testing"
|
|
47
46
|
Requires-Dist: pytest; extra == "testing"
|
|
48
|
-
Requires-Dist: pytest-qt
|
|
47
|
+
Requires-Dist: pytest-qt; extra == "testing"
|
|
49
48
|
Requires-Dist: virtualenv; extra == "testing"
|
|
50
49
|
Provides-Extra: docs
|
|
51
50
|
Requires-Dist: sphinx>6; extra == "docs"
|
|
@@ -50,7 +50,7 @@ classifiers = [
|
|
|
50
50
|
]
|
|
51
51
|
requires-python = ">=3.10"
|
|
52
52
|
dependencies = [
|
|
53
|
-
"napari", # FUTURE: Fully decouple from napari
|
|
53
|
+
# "napari", # FUTURE: Fully decouple from napari # bug in uv create problem with constraints files https://github.com/astral-sh/uv/issues/16372
|
|
54
54
|
"npe2",
|
|
55
55
|
"qtpy",
|
|
56
56
|
"superqt",
|
|
@@ -75,7 +75,7 @@ testing = [
|
|
|
75
75
|
"coverage",
|
|
76
76
|
"flaky",
|
|
77
77
|
"pytest",
|
|
78
|
-
"pytest-qt
|
|
78
|
+
"pytest-qt",
|
|
79
79
|
"virtualenv"
|
|
80
80
|
]
|
|
81
81
|
|
|
@@ -147,7 +147,8 @@ def test_pip_installer_tasks(
|
|
|
147
147
|
)
|
|
148
148
|
process_finished_data = blocker.args[0]
|
|
149
149
|
assert process_finished_data['action'] == InstallerActions.INSTALL
|
|
150
|
-
assert process_finished_data['pkgs'] == ('pydantic',)
|
|
150
|
+
assert tuple(process_finished_data['pkgs']) == ('pydantic',)
|
|
151
|
+
# It look like Pydantic6 converts tuples to lists
|
|
151
152
|
|
|
152
153
|
# Test upgrade
|
|
153
154
|
with qtbot.waitSignal(installer.allFinished, timeout=30_000):
|
|
@@ -7,7 +7,6 @@ from unittest.mock import MagicMock, call, patch
|
|
|
7
7
|
import napari.plugins
|
|
8
8
|
import npe2
|
|
9
9
|
import pytest
|
|
10
|
-
import qtpy
|
|
11
10
|
from napari.plugins._tests.test_npe2 import mock_pm # noqa
|
|
12
11
|
from napari.utils.translations import trans
|
|
13
12
|
from qtpy.QtCore import QMimeData, QPointF, Qt, QTimer, QUrl
|
|
@@ -17,13 +16,6 @@ from qtpy.QtWidgets import (
|
|
|
17
16
|
QMessageBox,
|
|
18
17
|
)
|
|
19
18
|
|
|
20
|
-
if qtpy.API_NAME == 'PySide2' and sys.version_info[:2] > (3, 10):
|
|
21
|
-
pytest.skip(
|
|
22
|
-
'Known PySide2 x Python incompatibility: '
|
|
23
|
-
'... object cannot be interpreted as an integer',
|
|
24
|
-
allow_module_level=True,
|
|
25
|
-
)
|
|
26
|
-
|
|
27
19
|
from napari_plugin_manager import base_qt_plugin_dialog, qt_plugin_dialog
|
|
28
20
|
from napari_plugin_manager.base_qt_package_installer import (
|
|
29
21
|
InstallerActions,
|
|
@@ -105,10 +97,6 @@ def plugin_dialog(
|
|
|
105
97
|
old_plugins,
|
|
106
98
|
):
|
|
107
99
|
"""Fixture that provides a plugin dialog for a normal napari install."""
|
|
108
|
-
from napari.settings import get_settings
|
|
109
|
-
|
|
110
|
-
original_setting = get_settings().plugins.use_npe2_adaptor
|
|
111
|
-
get_settings().plugins.use_npe2_adaptor = False
|
|
112
100
|
|
|
113
101
|
class PluginManagerMock:
|
|
114
102
|
def instance(self):
|
|
@@ -127,7 +115,7 @@ def plugin_dialog(
|
|
|
127
115
|
def is_disabled(self, name):
|
|
128
116
|
return False
|
|
129
117
|
|
|
130
|
-
def discover(self, include_npe1=
|
|
118
|
+
def discover(self, include_npe1=True):
|
|
131
119
|
return ['plugin']
|
|
132
120
|
|
|
133
121
|
def enable(self, plugin):
|
|
@@ -207,7 +195,6 @@ def plugin_dialog(
|
|
|
207
195
|
if widget.worker is not None:
|
|
208
196
|
widget.worker.quit()
|
|
209
197
|
assert not widget._add_items_timer.isActive()
|
|
210
|
-
get_settings().plugins.use_npe2_adaptor = original_setting
|
|
211
198
|
|
|
212
199
|
|
|
213
200
|
def test_filter_not_available_plugins(request, plugin_dialog, qtbot):
|
|
@@ -221,16 +208,15 @@ def test_filter_not_available_plugins(request, plugin_dialog, qtbot):
|
|
|
221
208
|
)
|
|
222
209
|
plugin_dialog.search('e')
|
|
223
210
|
qtbot.wait(500)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
assert not widget.warning_tooltip.isVisible()
|
|
211
|
+
for i in range(plugin_dialog.available_list.count()):
|
|
212
|
+
item = plugin_dialog.available_list.item(i)
|
|
213
|
+
widget = plugin_dialog.available_list.itemWidget(item)
|
|
214
|
+
if widget and widget.name == 'packaging':
|
|
215
|
+
assert not widget.action_button.isEnabled()
|
|
216
|
+
assert widget.warning_tooltip.isVisible()
|
|
217
|
+
else:
|
|
218
|
+
assert widget.action_button.isEnabled()
|
|
219
|
+
assert not widget.warning_tooltip.isVisible()
|
|
234
220
|
|
|
235
221
|
|
|
236
222
|
def test_filter_available_plugins(plugin_dialog, qtbot):
|
|
@@ -260,7 +246,7 @@ def test_filter_installed_plugins(plugin_dialog, qtbot):
|
|
|
260
246
|
"""
|
|
261
247
|
plugin_dialog.search('')
|
|
262
248
|
qtbot.wait(500)
|
|
263
|
-
assert plugin_dialog.installed_list.count_visible() ==
|
|
249
|
+
assert plugin_dialog.installed_list.count_visible() == 1
|
|
264
250
|
|
|
265
251
|
plugin_dialog.search('no-match@123')
|
|
266
252
|
qtbot.wait(500)
|
|
@@ -295,7 +281,7 @@ def test_version_dropdown(plugin_dialog, qtbot):
|
|
|
295
281
|
|
|
296
282
|
|
|
297
283
|
def test_plugin_list_count_items(plugin_dialog):
|
|
298
|
-
assert plugin_dialog.installed_list.count_visible() ==
|
|
284
|
+
assert plugin_dialog.installed_list.count_visible() == 1
|
|
299
285
|
|
|
300
286
|
|
|
301
287
|
def test_plugin_list_handle_action(plugin_dialog, qtbot):
|
|
@@ -361,15 +347,6 @@ def test_on_enabled_checkbox(plugin_dialog, qtbot, plugins, old_plugins):
|
|
|
361
347
|
widget.enabled_checkbox.setChecked(False)
|
|
362
348
|
assert plugins.plugins['my-plugin'] is False
|
|
363
349
|
|
|
364
|
-
# checks npe1 lines
|
|
365
|
-
item = plugin_dialog.installed_list.item(1)
|
|
366
|
-
widget = plugin_dialog.installed_list.itemWidget(item)
|
|
367
|
-
|
|
368
|
-
assert old_plugins.enabled[0] is True
|
|
369
|
-
with qtbot.waitSignal(widget.enabled_checkbox.stateChanged, timeout=500):
|
|
370
|
-
widget.enabled_checkbox.setChecked(False)
|
|
371
|
-
assert old_plugins.enabled[0] is False
|
|
372
|
-
|
|
373
350
|
|
|
374
351
|
def test_add_items_outdated_and_update(plugin_dialog, qtbot):
|
|
375
352
|
"""
|
|
@@ -465,11 +442,6 @@ def test_drop_event(plugin_dialog, tmp_path):
|
|
|
465
442
|
assert plugin_dialog.direct_entry_edit.text() == str(path_1)
|
|
466
443
|
|
|
467
444
|
|
|
468
|
-
@pytest.mark.skipif(
|
|
469
|
-
'napari_latest' in os.getenv('TOX_ENV_NAME', '')
|
|
470
|
-
and 'PySide2' in os.getenv('TOX_ENV_NAME', ''),
|
|
471
|
-
reason='PySide2 flaky with latest released napari',
|
|
472
|
-
)
|
|
473
445
|
def test_installs(qtbot, tmp_virtualenv, plugin_dialog, request):
|
|
474
446
|
if '[constructor]' in request.node.name:
|
|
475
447
|
pytest.skip(
|
|
@@ -554,7 +526,7 @@ def test_cancel(qtbot, tmp_virtualenv, plugin_dialog, request):
|
|
|
554
526
|
assert process_finished_data['action'] == InstallerActions.CANCEL
|
|
555
527
|
assert process_finished_data['pkgs'][0].startswith('requests')
|
|
556
528
|
assert plugin_dialog.available_list.count() == 1
|
|
557
|
-
assert plugin_dialog.installed_list.count() ==
|
|
529
|
+
assert plugin_dialog.installed_list.count() == 1
|
|
558
530
|
|
|
559
531
|
|
|
560
532
|
def test_cancel_all(qtbot, tmp_virtualenv, plugin_dialog, request):
|
|
@@ -581,7 +553,7 @@ def test_cancel_all(qtbot, tmp_virtualenv, plugin_dialog, request):
|
|
|
581
553
|
qtbot.wait(500)
|
|
582
554
|
|
|
583
555
|
assert plugin_dialog.available_list.count() == 2
|
|
584
|
-
assert plugin_dialog.installed_list.count() ==
|
|
556
|
+
assert plugin_dialog.installed_list.count() == 1
|
|
585
557
|
|
|
586
558
|
|
|
587
559
|
def test_direct_entry_installs(qtbot, tmp_virtualenv, plugin_dialog, request):
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/_version.py
RENAMED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.1.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
31
|
+
__version__ = version = '0.1.8rc0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 1, 8, 'rc0')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g3e3e1a4bc'
|
|
@@ -10,6 +10,8 @@ Available actions for each tool are `install`, `uninstall`
|
|
|
10
10
|
and `cancel`.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
13
15
|
import contextlib
|
|
14
16
|
import os
|
|
15
17
|
import sys
|
|
@@ -407,7 +409,7 @@ class InstallerQueue(QObject):
|
|
|
407
409
|
item = self._build_queue_item(
|
|
408
410
|
tool=tool,
|
|
409
411
|
action=InstallerActions.INSTALL,
|
|
410
|
-
pkgs=pkgs,
|
|
412
|
+
pkgs=tuple(pkgs),
|
|
411
413
|
prefix=prefix,
|
|
412
414
|
origins=origins,
|
|
413
415
|
process=self._create_process(),
|
|
@@ -448,7 +450,7 @@ class InstallerQueue(QObject):
|
|
|
448
450
|
item = self._build_queue_item(
|
|
449
451
|
tool=tool,
|
|
450
452
|
action=InstallerActions.UPGRADE,
|
|
451
|
-
pkgs=pkgs,
|
|
453
|
+
pkgs=tuple(pkgs),
|
|
452
454
|
prefix=prefix,
|
|
453
455
|
origins=origins,
|
|
454
456
|
process=self._create_process(),
|
|
@@ -485,7 +487,7 @@ class InstallerQueue(QObject):
|
|
|
485
487
|
item = self._build_queue_item(
|
|
486
488
|
tool=tool,
|
|
487
489
|
action=InstallerActions.UNINSTALL,
|
|
488
|
-
pkgs=pkgs,
|
|
490
|
+
pkgs=tuple(pkgs),
|
|
489
491
|
prefix=prefix,
|
|
490
492
|
process=self._create_process(),
|
|
491
493
|
**kwargs,
|
|
@@ -563,7 +565,7 @@ class InstallerQueue(QObject):
|
|
|
563
565
|
'exit_code': 1,
|
|
564
566
|
'exit_status': 0,
|
|
565
567
|
'action': InstallerActions.CANCEL_ALL,
|
|
566
|
-
'pkgs': all_pkgs,
|
|
568
|
+
'pkgs': tuple(all_pkgs),
|
|
567
569
|
}
|
|
568
570
|
)
|
|
569
571
|
self._process_queue()
|
|
@@ -190,7 +190,9 @@ class QtPluginDialog(BaseQtPluginDialog):
|
|
|
190
190
|
self.setStyleSheet(stylesheet)
|
|
191
191
|
|
|
192
192
|
def _add_installed(self, pkg_name: str | None = None) -> None:
|
|
193
|
-
use_npe2_adaptor =
|
|
193
|
+
use_npe2_adaptor = getattr(
|
|
194
|
+
get_settings().plugins, 'use_npe2_adaptor', True
|
|
195
|
+
)
|
|
194
196
|
pm2 = npe2.PluginManager.instance()
|
|
195
197
|
pm2.discover(include_npe1=use_npe2_adaptor)
|
|
196
198
|
for manifest in pm2.iter_manifests():
|
|
@@ -205,6 +207,7 @@ class QtPluginDialog(BaseQtPluginDialog):
|
|
|
205
207
|
distname, enabled, distname, plugin_api_version=npev
|
|
206
208
|
)
|
|
207
209
|
|
|
210
|
+
# for old napari versions that still have the setting
|
|
208
211
|
if not use_npe2_adaptor:
|
|
209
212
|
napari.plugins.plugin_manager.discover() # since they might not be loaded yet
|
|
210
213
|
for (
|
|
@@ -242,9 +245,6 @@ class QtPluginDialog(BaseQtPluginDialog):
|
|
|
242
245
|
break
|
|
243
246
|
|
|
244
247
|
def _fetch_available_plugins(self, clear_cache: bool = False) -> None:
|
|
245
|
-
settings = get_settings()
|
|
246
|
-
use_npe2_adaptor = settings.plugins.use_npe2_adaptor
|
|
247
|
-
|
|
248
248
|
if clear_cache:
|
|
249
249
|
cache_clear()
|
|
250
250
|
|
|
@@ -256,6 +256,9 @@ class QtPluginDialog(BaseQtPluginDialog):
|
|
|
256
256
|
self.worker.finished.connect(self.search)
|
|
257
257
|
self.worker.start()
|
|
258
258
|
|
|
259
|
+
use_npe2_adaptor = getattr(
|
|
260
|
+
get_settings().plugins, 'use_npe2_adaptor', True
|
|
261
|
+
)
|
|
259
262
|
pm2 = npe2.PluginManager.instance()
|
|
260
263
|
pm2.discover(include_npe1=use_npe2_adaptor)
|
|
261
264
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: napari-plugin-manager
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8rc0
|
|
4
4
|
Summary: Install plugins for napari, in napari.
|
|
5
5
|
Author-email: napari team <napari-steering-council@googlegroups.com>
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -29,7 +29,6 @@ Classifier: Operating System :: MacOS
|
|
|
29
29
|
Requires-Python: >=3.10
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
License-File: LICENSE
|
|
32
|
-
Requires-Dist: napari
|
|
33
32
|
Requires-Dist: npe2
|
|
34
33
|
Requires-Dist: qtpy
|
|
35
34
|
Requires-Dist: superqt
|
|
@@ -45,7 +44,7 @@ Requires-Dist: napari-plugin-manager[uv]; extra == "testing"
|
|
|
45
44
|
Requires-Dist: coverage; extra == "testing"
|
|
46
45
|
Requires-Dist: flaky; extra == "testing"
|
|
47
46
|
Requires-Dist: pytest; extra == "testing"
|
|
48
|
-
Requires-Dist: pytest-qt
|
|
47
|
+
Requires-Dist: pytest-qt; extra == "testing"
|
|
49
48
|
Requires-Dist: virtualenv; extra == "testing"
|
|
50
49
|
Provides-Extra: docs
|
|
51
50
|
Requires-Dist: sphinx>6; extra == "docs"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# For more information about tox, see https://tox.readthedocs.io/en/latest/
|
|
2
2
|
[tox]
|
|
3
|
-
envlist = pip-py{310,311,312,313}-{PyQt5,PyQt6,PySide6}-napari_{latest,repo}, conda-{py310,py311,py312}-{PyQt5,
|
|
3
|
+
envlist = pip-py{310,311,312,313}-{PyQt5,PyQt6,PySide6}-napari_{latest,repo}, conda-{py310,py311,py312,py313}-{PyQt5,PySide6}-napari_{latest,repo}
|
|
4
4
|
toxworkdir=/tmp/.tox
|
|
5
5
|
isolated_build = true
|
|
6
6
|
|
|
@@ -48,10 +48,10 @@ deps =
|
|
|
48
48
|
napari_latest: napari
|
|
49
49
|
napari_repo: git+https://github.com/napari/napari.git
|
|
50
50
|
|
|
51
|
+
|
|
51
52
|
# Conditional dependencies for CONDA
|
|
52
|
-
[testenv:conda-{py310,py311,py312}-{PyQt5,
|
|
53
|
+
[testenv:conda-{py310,py311,py312}-{PyQt5,PySide6}-napari_{latest,repo}]
|
|
53
54
|
conda_deps =
|
|
54
55
|
{py310,py311,py312}-PyQt5: pyqt
|
|
55
|
-
{py310,py311}-PySide2: pyside2
|
|
56
56
|
PySide6: pyside6 > 6.7
|
|
57
57
|
napari_latest: napari
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/_templates/navbar-project.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/docs/developers/contributing.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/npe2api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/styles.qss
RENAMED
|
File without changes
|
{napari_plugin_manager-0.1.7 → napari_plugin_manager-0.1.8rc0}/src/napari_plugin_manager/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|