Source code for amoorion.methods.plugins_method

"""Plugins: what is installed and what each can do."""

from typing import ClassVar

from amoorion.core import Model
from amoorion.methods.base import METHODS, Method
from amoorion.plugins import FAILED, Capability, load_plugins


[docs] class PluginInfo(Model): """One platform and what it can do; `error` when its package failed to load.""" name: str description: str capabilities: list[Capability] error: str | None = None
[docs] @METHODS.register class Plugins(Method): """What is installed. Loads every plugin, and also reports those that failed.""" name: ClassVar[str] = "plugins" description: ClassVar[str] = ( "List the platform plugins and what they can do" ) read_only: ClassVar[bool] = True
[docs] def run( self, params: Model, ) -> list[PluginInfo]: """Working plugins by name, then the failed ones.""" plugins = load_plugins() return [ PluginInfo( name=plugin.name, description=plugin.description, capabilities=sorted(plugin.capabilities), ) for plugin in map(plugins.get, plugins.names()) ] + [ PluginInfo( name=name, description="failed to load", capabilities=[], error=error, ) for name, error in sorted(FAILED.items()) ]
[docs] def plugsFlagsToList(flags: dict[str, bool]) -> list[str]: # noqa: N802 - the author's name for it """The names of the flags that are on, e.g. of `Plugins["x"].infoflags`.""" return [name for name, on in flags.items() if on]