summaryrefslogtreecommitdiffstats
path: root/python/mach/docs/driver.rst
blob: 022ebe65739a505f0daf22ebb41fbcbb01acf607 (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
.. _mach_driver:

=======
Drivers
=======

Entry Points
============

It is possible to use setuptools' entry points to load commands
directly from python packages. A mach entry point is a function which
returns a list of files or directories containing mach command
providers. e.g.:

.. code-block:: python

   def list_providers():
       providers = []
       here = os.path.abspath(os.path.dirname(__file__))
       for p in os.listdir(here):
           if p.endswith('.py'):
               providers.append(os.path.join(here, p))
       return providers

See http://pythonhosted.org/setuptools/setuptools.html#dynamic-discovery-of-services-and-plugins
for more information on creating an entry point. To search for entry
point plugins, you can call
:py:meth:`mach.main.Mach.load_commands_from_entry_point`. e.g.:

.. code-block:: python

   mach.load_commands_from_entry_point("mach.external.providers")

Adding Global Arguments
=======================

Arguments to mach commands are usually command-specific. However,
mach ships with a handful of global arguments that apply to all
commands.

It is possible to extend the list of global arguments. In your
*mach driver*, simply call
:py:meth:`mach.main.Mach.add_global_argument`. e.g.:

.. code-block:: python

   mach = mach.main.Mach(os.getcwd())

   # Will allow --example to be specified on every mach command.
   mach.add_global_argument('--example', action='store_true',
       help='Demonstrate an example global argument.')