| .. _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.') |