# `mopidy.ext` – Extension API

If you want to learn how to make Mopidy extensions, read Extension development.

class mopidy.ext.Extension

  Base class for Mopidy extensions.

  classmethod check_attr() → None

    Check if ext_name exist.

    Return type:

      `None`

  dist_name: `str`

    The extension’s distribution name, as registered on PyPI

    Example: `Mopidy-Soundspot`

  ext_name: `str`

    The extension’s short name, as used in setup.py and as config section name

    Example: `soundspot`

  classmethod get_cache_dir(config) → Path

    Get or create cache directory for the extension.

    Use this directory to cache data that can safely be thrown away.

    Parameters:

      config (`dict`[`str`, `dict`[`str`, `Any`]]) – the Mopidy config object

    Return type:

      `Path`

    Returns:

      pathlib.Path

  get_command() → Command | None

    Command to expose to command line users running `mopidy`.

    Return type:

      `Command` | `None`

    Returns:

      Instance of a `Command` class.

  classmethod get_config_dir(config) → Path

    Get or create configuration directory for the extension.

    Parameters:

      config (`dict`[`str`, `dict`[`str`, `Any`]]) – the Mopidy config object

    Return type:

      `Path`

    Returns:

      pathlib.Path

  get_config_schema() → ConfigSchema

    The extension’s config validation schema.

    Return type:

      `ConfigSchema`

    Returns:

      `ConfigSchema`

  classmethod get_data_dir(config) → Path

    Get or create data directory for the extension.

    Use this directory to store data that should be persistent.

    Parameters:

      config (`dict`[`str`, `dict`[`str`, `Any`]]) – the Mopidy config object

    Return type:

      `Path`

    Returns:

      pathlib.Path

  get_default_config() → str

    The extension’s default config as a text string.

    Return type:

      `str`

    Returns:

      str

  setup(registry) → None

    Register the extension’s components in the extension `Registry`.

    For example, to register a backend:

        def setup(self, registry):
            from .backend import SoundspotBackend
            registry.add('backend', SoundspotBackend)

    See `Registry` for a list of registry keys with a special meaning. Mopidy will instantiate and start any classes registered under the `frontend` and `backend` registry keys.

    This method can also be used for other setup tasks not involving the extension registry.

    Parameters:

      registry (`Registry`) – the extension registry

    Return type:

      `None`

  validate_environment() → None

    Checks if the extension can run in the current environment.

    Dependencies described by `setup.py` are checked by Mopidy, so you should not check their presence here.

    If a problem is found, raise `ExtensionError` with a message explaining the issue.

    Raises:

      `ExtensionError`

    Return type:

      `None`

    Returns:

      `None`

  version: `str`

    The extension’s version

    Should match the `__version__` attribute on the extension’s main Python module and the version registered on PyPI.

class mopidy.ext.ExtensionData(extension, entry_point, config_schema, config_defaults, command)
  command: `Command` | `None`

    Alias for field number 4

  config_defaults: `Any`

    Alias for field number 3

  config_schema: `ConfigSchema`

    Alias for field number 2

  entry_point: `Any`

    Alias for field number 1

  extension: `Extension`

    Alias for field number 0

class mopidy.ext.Registry → None

  Registry of components provided by Mopidy extensions.

  Passed to the `setup()` method of all extensions. The registry can be used like a dict of string keys and lists.

  Some keys have a special meaning, including, but not limited to:

  - `backend` is used for Mopidy backend classes.

  - `frontend` is used for Mopidy frontend classes.

  Extensions can use the registry for allow other to extend the extension itself. For example the `Mopidy-Local` historically used the `local:library` key to allow other extensions to register library providers for `Mopidy-Local` to use. Extensions should namespace custom keys with the extension’s `ext_name`, e.g. `local:foo` or `http:bar`.

  add(name, entry) → None

    Add a component to the registry.

    Multiple classes can be registered to the same name.

    Return type:

      `None`

mopidy.ext.load_extensions() → list[ExtensionData]

  Find all installed extensions.

  Return type:

    `list`[`ExtensionData`]

  Returns:

    list of installed extensions

mopidy.ext.validate_extension_data(data) → bool

  Verify extension’s dependencies and environment.

  Parameters:

    extensions – an extension to check

  Return type:

    `bool`

  Returns:

    if extension should be run