Plugin system#
Note
This page explains how to contribute to the plugin system in aiida-core
.
For instrucions on how to develop plugins, see How to package plugins.
Design Principles#
Only restrict plugin developers when really necessary;
Avoid database schema changes whenever reasonably possible;
Finding and loading plugins must be as fast as the plugin allows, especially for command line interface (CLI) commands. In other words, directly importing a plugin class should not be noticeably faster than using the plugin loader/factory;
Implement as a drop-in replacement, provide backwards compatibility to pre-0.9 plugin system;
Plugin management should be as user friendly from the verdi shell as from the CLI.
Mini-Spec#
Nomenclature#
plugin_name
A unique name identifying the plugin. Suggested naming scheme is
aiida-<plugin-name>
for pypi distribution / source code repositoryaiida_<plugin_name>
for python package (import aiida_<plugin_name>
; dashes replaced by underscores)<plugin_name>.ep_name
for entry points
category
A name given to each aspect of AiiDA that can be extended via plugins, such as
calculations
,schedulers
, … (see output ofverdi plugin list
for a complete list).Each category maps to an entry point group
aiida.<category>
.
Interfaces#
Pluginloader#
The plugin loading functionality is defined in aiida.plugins.entry_point
.
Registry Tools#
See the API documentation in aiida.plugins
.