xref: /aosp_15_r20/external/pigweed/pw_cli/api.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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