/
/
/
1"""Server specific/only models."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING, Protocol
6
7from .audio_analysis_provider import AudioAnalysisProvider
8from .metadata_provider import MetadataProvider
9from .music_provider import MusicProvider
10from .player_provider import PlayerProvider
11from .plugin import PluginProvider
12
13if TYPE_CHECKING:
14 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType, ProviderConfig
15 from music_assistant_models.enums import ProviderFeature
16 from music_assistant_models.provider import ProviderManifest
17
18 from music_assistant.mass import MusicAssistant
19
20
21ProviderInstanceType = (
22 AudioAnalysisProvider | MetadataProvider | MusicProvider | PlayerProvider | PluginProvider
23)
24
25
26class ProviderModuleType(Protocol):
27 """Model for a provider module to support type hints."""
28
29 """Return the (base) features supported by this Provider."""
30 SUPPORTED_FEATURES: set[ProviderFeature]
31
32 @staticmethod
33 async def setup(
34 mass: MusicAssistant, manifest: ProviderManifest, config: ProviderConfig
35 ) -> ProviderInstanceType:
36 """Initialize provider(instance) with given configuration."""
37 raise NotImplementedError
38
39 @staticmethod
40 async def get_config_entries(
41 mass: MusicAssistant,
42 instance_id: str | None = None,
43 action: str | None = None,
44 values: dict[str, ConfigValueType] | None = None,
45 ) -> tuple[ConfigEntry, ...]:
46 """
47 Return Config entries to setup this provider.
48
49 instance_id: id of an existing provider instance (None if new instance setup).
50 action: [optional] action key called from config entries UI.
51 values: the (intermediate) raw values for config entries sent with the action.
52 """
53 raise NotImplementedError
54