music-assistant-server

1.7 KBPY
__init__.py
1.7 KB50 lines • python
1"""
2Yandex Station Player Provider for Music Assistant.
3
4Play music on Yandex Station smart speakers via local Glagol WebSocket protocol.
5Adapted from AlexxIT/YandexStation (MIT license).
6"""
7
8from __future__ import annotations
9
10from typing import TYPE_CHECKING
11
12from music_assistant_models.errors import LoginFailed
13from ya_passport_auth.ma import BORROW_SOURCE_OWN
14
15from .constants import (
16    CONF_MUSIC_TOKEN,
17    CONF_X_TOKEN,
18    CONF_YM_INSTANCE,
19)
20from .provider import YandexStationProvider
21
22if TYPE_CHECKING:
23    from music_assistant_models.config_entries import ProviderConfig
24    from music_assistant_models.enums import ProviderFeature
25    from music_assistant_models.provider import ProviderManifest
26
27    from music_assistant.mass import MusicAssistant
28    from music_assistant.models import ProviderInstanceType
29
30SUPPORTED_FEATURES: set[ProviderFeature] = set()
31
32
33async def setup(
34    mass: MusicAssistant, manifest: ProviderManifest, config: ProviderConfig
35) -> ProviderInstanceType:
36    """Initialize provider(instance) with given configuration."""
37    provider = YandexStationProvider(mass, manifest, config, SUPPORTED_FEATURES)
38    # Credentials come from the setup flow (borrow a linked Yandex Music instance or
39    # this provider's own login). Fail fast when neither is present.
40    ym_instance = provider.get_setup_value(CONF_YM_INSTANCE)
41    borrowing = bool(ym_instance) and ym_instance != BORROW_SOURCE_OWN
42    if (
43        not borrowing
44        and not provider.get_setup_value(CONF_MUSIC_TOKEN)
45        and not provider.get_setup_value(CONF_X_TOKEN)
46    ):
47        msg = "Authentication required. Please login with your Yandex credentials."
48        raise LoginFailed(msg)
49    return provider
50