Skip to content

Plugin quality checklist sources

Sean Martin edited this page Jun 27, 2023 · 12 revisions

The plugin quality checklist will produce outputs that are split into categories:

For platform specific information (e.g. Linux, MacOS, Windows), these are all separate items in the checklist, but they are described together here.

General metadata about the plugin and this tool

Output Source Description
Plugin Name napari hub API The python package name of the plugin (not the hub display name).
Analysis Status napari-hub-cli tool SUCCESS if everything worked as expected, or ERROR_MSG if there is a failure.
Repository URL napari hub API The link to the source code of the plugin.
Has explicit version in configuration files plugin's configuration files (pyproject.toml, setup.cfg, setup.py) True if there is a version listed for the plugin in the configuration files, False otherwise.
Plugin version plugin's configuration files The version of the plugin checked that the napari-hub-cli was run on.
CLI Tool Version napari-hub-cli tool The version of the napari-hub-cli tool that was used to analyse the plugin.
Execution Timestamp napari-hub-cli tool The date and time at which the plugin started to be analyzed at
Supported Platforms plugin's configuration files A text version of the Has explicit Linux/MacOS/Windows support
Supported Python versions plugin's configuration files The major Python versions listed in the project configuration files. (3, 9) represents Python 3.9 support, for example.
Plugin engine version plugin's configuration files The version of the napari engine used by the plugin (npe1 or npe2).
Number of Installed Dependencies pip based dependency solver The sum total amount of direct and indirect python packages that would be required to be installed for this plugin. If the plugin's dependencies cannot be retrieved (versions errors or incompatibility), Failed to resolve dependencies is displayed.
Codecov results Codecov API The total coverage rate of tests for the main/master branch of the plugin as reported by codecov.io.
Number of analyzed Python files plugins's source code The number of python files in the project which were analyzed.

Plugin has an open source license

Output Source Description
Has LICENSE file plugin's source code True if a file named LICENSE exists in the plugin source code, False otherwise.
Is licence OSI approved plugin's source code True if the LICENSE file exists in the plugin source code and is recognized as a license listed under opensource.org licenses

Plugin is installable from PyPI

Output Source Description
Has explicit Linux/MacOS/Windows support plugin's configuration files The plugin configuration files are parsed for PyPI classifier setup. If Operating System: OS Independent is specified, Linux/MacOS/Windows are all set to True. Otherwise, the existing classifiers related to operating systems support are parsed for the words Linux, MacOS, and Windows, then set to True if those words are present in a classifier (respectively).
Installable on Linux/MacOS/Windows pip based dependency solver and PyPI For each platform this is set as follows: For each Python version that is supported by the plugin, a pip based dependency solver is run to determine which dependencies (and versions) would need to be installed to install this plugin. If no valid solution can be found to this problem (e.g. conflicting dependencies), this is marked as False. This is also marked as False if there is a depencency (direct or indirect) that has C extensions, but does not provide any wheels to install from for that platform. Otherwise it is set to True
All deps are wheels for Linux/MacOS/Windows pip based dependency solver and PyPI True if for each dependency (direct or indirect) there is a wheel on PyPI to install that dependency which is compatible with the current platform. none-any wheels satisfy all platforms.
Has no deps with C extensions for Linux/MacOS/Windows pip based dependency solver and PyPI True if for each dependency that has C extensions, that dependency provides a wheel for the platform.
Had no unexpected error during dependency analysis napari-hub-cli tool True would indicate a catch all for any unexpected errors that occurred during dependency analysis (e.g. a drop in internet connection). The output for the related plugin could be incorrect.

Plugin supports the napari bundled app

Output Source Description
Has no npe2 parsing errors npe2api True if the plugin is not listed on the npe2api fetch errors page.
Linux/Windows/MacOS bundle support npe2api True if the plugin is listed on the npe2api conda page for that plugin, and the corresponding platform is listed as being supported on the npe2api conda page for that plugin.

Plugin tests are passing have a high coverage rate

Output Source Description
Github Action Workflows are configured plugin's GitHub workflow repository True if the plugin has a non empty .github/workflows directory in the repository with actions.
Github Action tests are configured plugin's GitHub workflow repository True if the plugin has a mention of pytest, unittest or tox in the configured GitHub actions.
Github Action codecov is configured plugin's GitHub workflow repository True if the plugin has an action which involves uploading test results to codecov
Tests are passing for main/master branch plugin's GitHub repository True if ALL configured GitHub action tests are passing on the main/master branch (in other words, the branch as a green tick as opposed to a red X).
Project has codecov result on main/master branch codecov API True if the plugin is available on codecov.io for the master/main branch
Tests cover more than 80% of the code for the main/master branch codecov API True if the codecov.io coverage rate for the plugin on the main/master branch is over 80%.

Plugin does not depend on specific PyQT or pyside versions

Output Source Description
Has no dependencies to PySide2 or PyQt5 plugin's configuration files True if the plugin does not specify any dependencies to any PyQt or Pyside (e.g. PySide2, PyQt5/6).
Has no code reference to PySide2 or PyQt5 plugin's source code True if the plugin does not directly import from Pyside or PyQt anywhere in the .py files.

Plugin is designed for npe2

Output Source Description
Is NPE2 plugin Yaml NPE2 file True if the plugin contains a NPE2 yaml manifest referenced in the plugin's configuration files.
Is not hybrid (is NPE1 or NPE2, not both) plugin's source code True if the plugin doesn't contain NPE1 hooks and a NPE2 manifest.
Has no NPE1 hook plugin's source code True if the plugin does not contain NPE1 hooks in the source code.