diff options
Diffstat (limited to 'pw_cli/py/pw_cli/plugins.py')
-rw-r--r-- | pw_cli/py/pw_cli/plugins.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/pw_cli/py/pw_cli/plugins.py b/pw_cli/py/pw_cli/plugins.py index b82b7f675..15a5dcd2d 100644 --- a/pw_cli/py/pw_cli/plugins.py +++ b/pw_cli/py/pw_cli/plugins.py @@ -318,6 +318,33 @@ class Registry(collections.abc.Mapping): return plugin + def register_config( + self, + config: Dict, + path: Optional[Path] = None, + ) -> None: + """Registers plugins from a Pigweed config. + + Any exceptions raised from parsing the file are caught and logged. + """ + plugins = config.get('pw', {}).get('pw_cli', {}).get('plugins', {}) + for name, location in plugins.items(): + module = location.pop('module') + function = location.pop('function') + if location: + raise ValueError(f'unrecognized plugin options: {location}') + + try: + self.register_by_name(name, module, function, path) + except Error as err: + self._errors[name].append(err) + _LOG.error( + '%s Failed to register plugin "%s": %s', + path, + name, + err, + ) + def register_file(self, path: Path) -> None: """Registers plugins from a plugins file. |