summaryrefslogtreecommitdiff
path: root/doc/plugins.txt
blob: 61e4408c105404c856aaa320c8254cf9fd43f8ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
.. be in -*- rst -*- mode!

tox plugins
===========

.. versionadded:: 2.0

With tox-2.0 a few aspects of tox running can be experimentally modified
by writing hook functions.  We expect the list of hook function to grow
over time.

writing a setuptools entrypoints plugin
---------------------------------------

If you have a ``tox_MYPLUGIN.py`` module you could use the following
rough ``setup.py`` to make it into a package which you can upload to the
Python packaging index::

    # content of setup.py
    from setuptools import setup

    if __name__ == "__main__":
        setup(
            name='tox-MYPLUGIN',
            description='tox plugin decsription',
            license="MIT license",
            version='0.1',
            py_modules=['tox_MYPLUGIN'],
            entry_points={'tox': ['MYPLUGIN = tox_MYPLUGIN']},
            install_requires=['tox>=2.0'],
        )

You can then install the plugin to develop it via::

    pip install -e .

and later publish it.

The ``entry_points`` part allows tox to see your plugin during startup.


Writing hook implementations
----------------------------

A plugin module needs can define one or more hook implementation functions::

    from tox import hookimpl

    @hookimpl
    def tox_addoption(parser):
        # add your own command line options


    @hookimpl
    def tox_configure(config):
        # post process tox configuration after cmdline/ini file have
        # been parsed

If you put this into a module and make it pypi-installable with the ``tox``
entry point you'll get your code executed as part of a tox run.



tox hook specifications
----------------------------

.. automodule:: tox.hookspecs
    :members: