1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_cli-api: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker============= 4*61c4878aSAndroid Build Coastguard WorkerAPI Reference 5*61c4878aSAndroid Build Coastguard Worker============= 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module-subpage:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_cli 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard Worker----------------- 10*61c4878aSAndroid Build Coastguard Workerpw_cli.decorators 11*61c4878aSAndroid Build Coastguard Worker----------------- 12*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.decorators 13*61c4878aSAndroid Build Coastguard Worker :members: 14*61c4878aSAndroid Build Coastguard Worker 15*61c4878aSAndroid Build Coastguard Worker------------------ 16*61c4878aSAndroid Build Coastguard Workerpw_cli.file_filter 17*61c4878aSAndroid Build Coastguard Worker------------------ 18*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.file_filter 19*61c4878aSAndroid Build Coastguard Worker :members: 20*61c4878aSAndroid Build Coastguard Worker 21*61c4878aSAndroid Build Coastguard Worker--------------- 22*61c4878aSAndroid Build Coastguard Workerpw_cli.git_repo 23*61c4878aSAndroid Build Coastguard Worker--------------- 24*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.git_repo 25*61c4878aSAndroid Build Coastguard Worker :members: 26*61c4878aSAndroid Build Coastguard Worker 27*61c4878aSAndroid Build Coastguard Worker---------- 28*61c4878aSAndroid Build Coastguard Workerpw_cli.log 29*61c4878aSAndroid Build Coastguard Worker---------- 30*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.log 31*61c4878aSAndroid Build Coastguard Worker :members: 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker-------------- 34*61c4878aSAndroid Build Coastguard Workerpw_cli.plugins 35*61c4878aSAndroid Build Coastguard Worker-------------- 36*61c4878aSAndroid Build Coastguard Worker:py:mod:`pw_cli.plugins` provides general purpose plugin functionality. The 37*61c4878aSAndroid Build Coastguard Workermodule can be used to create plugins for command line tools, interactive 38*61c4878aSAndroid Build Coastguard Workerconsoles, or anything else. Pigweed's ``pw`` command uses this module for its 39*61c4878aSAndroid Build Coastguard Workerplugins. 40*61c4878aSAndroid Build Coastguard Worker 41*61c4878aSAndroid Build Coastguard WorkerTo use plugins, create a :py:class:`pw_cli.plugins.Registry`. The registry may 42*61c4878aSAndroid Build Coastguard Workerhave an optional validator function that checks plugins before they are 43*61c4878aSAndroid Build Coastguard Workerregistered (see :py:meth:`pw_cli.plugins.Registry.__init__`). 44*61c4878aSAndroid Build Coastguard Worker 45*61c4878aSAndroid Build Coastguard WorkerPlugins may be registered in a few different ways. 46*61c4878aSAndroid Build Coastguard Worker 47*61c4878aSAndroid Build Coastguard Worker* **Direct function call.** Register plugins by calling 48*61c4878aSAndroid Build Coastguard Worker :py:meth:`pw_cli.plugins.Registry.register` or 49*61c4878aSAndroid Build Coastguard Worker :py:meth:`pw_cli.plugins.Registry.register_by_name`. 50*61c4878aSAndroid Build Coastguard Worker 51*61c4878aSAndroid Build Coastguard Worker .. code-block:: python 52*61c4878aSAndroid Build Coastguard Worker 53*61c4878aSAndroid Build Coastguard Worker import pw_cli 54*61c4878aSAndroid Build Coastguard Worker 55*61c4878aSAndroid Build Coastguard Worker _REGISTRY = pw_cli.plugins.Registry() 56*61c4878aSAndroid Build Coastguard Worker 57*61c4878aSAndroid Build Coastguard Worker _REGISTRY.register('plugin_name', my_plugin) 58*61c4878aSAndroid Build Coastguard Worker _REGISTRY.register_by_name('plugin_name', 'module_name', 'function_name') 59*61c4878aSAndroid Build Coastguard Worker 60*61c4878aSAndroid Build Coastguard Worker* **Decorator.** Register using the :py:meth:`pw_cli.plugins.Registry.plugin` 61*61c4878aSAndroid Build Coastguard Worker decorator. 62*61c4878aSAndroid Build Coastguard Worker 63*61c4878aSAndroid Build Coastguard Worker .. code-block:: python 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker import pw_cli 66*61c4878aSAndroid Build Coastguard Worker 67*61c4878aSAndroid Build Coastguard Worker _REGISTRY = pw_cli.plugins.Registry() 68*61c4878aSAndroid Build Coastguard Worker 69*61c4878aSAndroid Build Coastguard Worker # This function is registered as the "my_plugin" plugin. 70*61c4878aSAndroid Build Coastguard Worker @_REGISTRY.plugin 71*61c4878aSAndroid Build Coastguard Worker def my_plugin(): 72*61c4878aSAndroid Build Coastguard Worker pass 73*61c4878aSAndroid Build Coastguard Worker 74*61c4878aSAndroid Build Coastguard Worker # This function is registered as the "input" plugin. 75*61c4878aSAndroid Build Coastguard Worker @_REGISTRY.plugin(name='input') 76*61c4878aSAndroid Build Coastguard Worker def read_something(): 77*61c4878aSAndroid Build Coastguard Worker pass 78*61c4878aSAndroid Build Coastguard Worker 79*61c4878aSAndroid Build Coastguard Worker The decorator may be aliased to give a cleaner syntax (e.g. ``register = 80*61c4878aSAndroid Build Coastguard Worker my_registry.plugin``). 81*61c4878aSAndroid Build Coastguard Worker 82*61c4878aSAndroid Build Coastguard Worker* **Plugins files.** Plugins files use a simple format: 83*61c4878aSAndroid Build Coastguard Worker 84*61c4878aSAndroid Build Coastguard Worker .. code-block:: 85*61c4878aSAndroid Build Coastguard Worker 86*61c4878aSAndroid Build Coastguard Worker # Comments start with "#". Blank lines are ignored. 87*61c4878aSAndroid Build Coastguard Worker name_of_the_plugin module.name module_member 88*61c4878aSAndroid Build Coastguard Worker 89*61c4878aSAndroid Build Coastguard Worker another_plugin some_module some_function 90*61c4878aSAndroid Build Coastguard Worker 91*61c4878aSAndroid Build Coastguard Worker These files are placed in the file system and apply similarly to Git's 92*61c4878aSAndroid Build Coastguard Worker ``.gitignore`` files. From Python, these files are registered using 93*61c4878aSAndroid Build Coastguard Worker :py:meth:`pw_cli.plugins.Registry.register_file` and 94*61c4878aSAndroid Build Coastguard Worker :py:meth:`pw_cli.plugins.Registry.register_directory`. 95*61c4878aSAndroid Build Coastguard Worker 96*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.plugins 97*61c4878aSAndroid Build Coastguard Worker :members: 98*61c4878aSAndroid Build Coastguard Worker 99*61c4878aSAndroid Build Coastguard Worker------------- 100*61c4878aSAndroid Build Coastguard Workerpw_cli.plural 101*61c4878aSAndroid Build Coastguard Worker------------- 102*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.plural 103*61c4878aSAndroid Build Coastguard Worker :members: 104*61c4878aSAndroid Build Coastguard Worker 105*61c4878aSAndroid Build Coastguard Worker---------------------- 106*61c4878aSAndroid Build Coastguard Workerpw_cli.status_reporter 107*61c4878aSAndroid Build Coastguard Worker---------------------- 108*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.status_reporter 109*61c4878aSAndroid Build Coastguard Worker :members: 110*61c4878aSAndroid Build Coastguard Worker 111*61c4878aSAndroid Build Coastguard Worker------------------ 112*61c4878aSAndroid Build Coastguard Workerpw_cli.tool_runner 113*61c4878aSAndroid Build Coastguard Worker------------------ 114*61c4878aSAndroid Build Coastguard Worker.. automodule:: pw_cli.tool_runner 115*61c4878aSAndroid Build Coastguard Worker :members: 116*61c4878aSAndroid Build Coastguard Worker :exclude-members: ToolRunner 117*61c4878aSAndroid Build Coastguard Worker 118*61c4878aSAndroid Build Coastguard Worker .. autoclass:: pw_cli.tool_runner.ToolRunner 119*61c4878aSAndroid Build Coastguard Worker :special-members: +__call__ 120*61c4878aSAndroid Build Coastguard Worker :private-members: +_run_tool, _custom_args 121