/
/
/
1"""Model/base for a Metadata Provider implementation."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING
6
7from music_assistant_models.enums import ProviderFeature
8
9from .provider import Provider
10
11if TYPE_CHECKING:
12 from music_assistant_models.media_items import Album, Artist, MediaItemMetadata, Track
13
14
15class MetadataProvider(Provider):
16 """Base representation of a Metadata Provider (controller).
17
18 Metadata Provider implementations should inherit from this base model.
19 """
20
21 async def get_artist_metadata(self, artist: Artist) -> MediaItemMetadata | None:
22 """Retrieve metadata for an artist on this Metadata provider."""
23 if ProviderFeature.ARTIST_METADATA in self.supported_features:
24 raise NotImplementedError
25 return None
26
27 async def get_album_metadata(self, album: Album) -> MediaItemMetadata | None:
28 """Retrieve metadata for an album on this Metadata provider."""
29 if ProviderFeature.ALBUM_METADATA in self.supported_features:
30 raise NotImplementedError
31 return None
32
33 async def get_track_metadata(self, track: Track) -> MediaItemMetadata | None:
34 """Retrieve metadata for a track on this Metadata provider."""
35 if ProviderFeature.TRACK_METADATA in self.supported_features:
36 raise NotImplementedError
37 return None
38
39 async def resolve_image(self, path: str) -> str | bytes:
40 """
41 Resolve an image from an image path.
42
43 This either returns (a generator to get) raw bytes of the image or
44 a string with an http(s) URL or local path that is accessible from the server.
45 """
46 return path
47