This example repository contains the following code to help you get started with writing your own MultiQC plugin.
It should be used in addition to the main MultiQC documentation: http://multiqc.info/docs/#coding-with-multiqc
If you have any questions, please get in touch on Gitter: https://gitter.im/ewels/MultiQC
This example plugin contains both custom code and a MultiQC module for parsing content into reports.
MultiQC modules can either be written as part of the core MultiQC program, or in a stand-alone plugin. If your module is for a publicly available tool, please add it to the main program and contribute your code via a pull request (see the contributing instructions).
If your module is for something very niche, which no-one else can use, then it's best to write it as part of a custom plugin. The process is almost identical, though it keeps the code bases separate.
setup.py
- Where the
setuptools
plugin hooks are defined. This is where you tell MultiQC where to find your code. - This file also defines how your plugin should be installed, including required python packages.
- Where the
example_plugin/
- Installable Python packages are typically put into a directory with the same name.
example_plugin/__init__.py
- Python packages need an
__init__.py
file in every directory. Here, these are mostly empty (except the one in themy_example
folder, which contains a shortcut to make theimport
statement shorter). - If you prefer, you can put all code in these files and just reference the directory name only.
- Python packages need an
example_plugin/cli.py
- Additional command line parameters to add to MultiQC
example_plugin/custom_code.py
- File to hold custom functions that can tie into the main MultiQC execution flow.
- In this file, we define some new config defaults, including the search patterns used by the example module
example_plugin/modules/my_example/
- This folder contains a minimal MultiQC module which will execute along with all other MultiQC modules (as defined by the
setup.py
hook).
- This folder contains a minimal MultiQC module which will execute along with all other MultiQC modules (as defined by the
To use this code, you need to install MultiQC and then your code. For example:
pip install MultiQC
python setup.py install
Use python setup.py develop
if you're actively working on the code - then you don't need to rerun the installation every time you make an edit (though you still do if you change anything in setup.py
).
In this example plugin, I have defined a single additional command line flag - --disable-example-plugin
. When specified, it sets a new MultiQC config value to True
. This is checked in every plugin function; the function then returns early if it's True
.
In this way, we can effectively disable the plugin code and allow native MultiQC execution. Note that a similar approach could be used to enable a custom plugin or feature.