Source code for minim.api.deezer._api.tracks

from __future__ import annotations
from typing import TYPE_CHECKING

from ..._shared import TTLCache, _copy_docstring
from ._shared import DeezerResourceAPI
from .charts import ChartsAPI
from .users import UsersAPI

if TYPE_CHECKING:
    from typing import Any

    from ...._types import Collection


[docs] class TracksAPI(DeezerResourceAPI): """ Tracks API endpoints for the Deezer API. .. important:: This class is managed by :class:`~minim.api.deezer.DeezerAPIClient` and should not be instantiated directly. """ __slot__ = ()
[docs] @TTLCache.cached_method(ttl="popularity") def get_track(self, track_id: int | str, /) -> dict[str, Any]: """ `Track <https://developers.deezer.com/api/track>`__: Get Deezer catalog information for a track. Parameters ---------- track_id : int or str; positional-only Deezer ID of the track. **Examples**: :code:`101602968`, :code:`"3541756661"`. Returns ------- track : dict[str, Any] Deezer metadata for the track. .. admonition:: Sample response :class: response dropdown .. code-block:: { "album": { "cover": <str>, "cover_big": <str>, "cover_medium": <str>, "cover_small": <str>, "cover_xl": <str>, "id": <int>, "link": <str>, "md5_image": <str>, "release_date": <str>, "title": <str>, "tracklist": <str>, "type": "album" }, "artist": { "id": <int>, "link": <str>, "name": <str>, "picture": <str>, "picture_big": <str>, "picture_medium": <str>, "picture_small": <str>, "picture_xl": <str>, "radio": <bool>, "share": <str>, "tracklist": <str>, "type": "artist" }, "available_countries": <list[str]>, "bpm": <int>, "contributors": [ { "id": <int>, "link": <str>, "name": <str>, "picture": <str>, "picture_big": <str>, "picture_medium": <str>, "picture_small": <str>, "picture_xl": <str>, "radio": <bool>, "role": <str>, "share": <str>, "tracklist": <str>, "type": "artist" } ], "disk_number": <int>, "duration": <int>, "explicit_content_cover": <int>, "explicit_content_lyrics": <int>, "explicit_lyrics": <bool>, "gain": <float>, "id": <int>, "isrc": <str>, "link": <str>, "md5_image": <str>, "preview": <str>, "rank": <int>, "readable": true, "release_date": <str>, "share": <str>, "title": <str>, "title_short": <str>, "title_version": <str>, "track_position": <int>, "track_token": <str>, "type": "track" } """ return self._request_resource_relationship("GET", "track", track_id)
[docs] @_copy_docstring(ChartsAPI.get_top_tracks) def get_top_tracks( self, *, limit: int | None = None, offset: int | None = None ) -> dict[str, Any]: return self._client.charts.get_top_tracks(limit=limit, offset=offset)
[docs] @_copy_docstring(UsersAPI.get_user_tracks) def get_user_tracks( self, user_id: int | str = "me", /, *, limit: int | None = None, offset: int | None = None, ) -> dict[str, Any]: return self._client.users.get_user_tracks( user_id, limit=limit, offset=offset )
[docs] @_copy_docstring(UsersAPI.update_track_metadata) def update_track_metadata( self, track_id: int | str, /, *, album: str | None = None, artist: str | None = None, title: str | None = None, ) -> bool: return self._client.users.update_track_metadata( track_id, album=album, artist=artist, title=title )
[docs] @_copy_docstring(UsersAPI.delete_track) def delete_track(self, track_id: int | str, /) -> bool: return self._client.users.delete_track(track_id)
[docs] @_copy_docstring(UsersAPI.get_user_saved_tracks) def get_user_saved_tracks( self, user_id: int | str = "me", /, *, limit: int | None = None, offset: int | None = None, ) -> dict[str, Any]: self._client.users.get_user_saved_tracks( user_id, limit=limit, offset=offset )
[docs] @_copy_docstring(UsersAPI.save_tracks) def save_tracks( self, track_ids: int | str | Collection[int | str], /, *, user_id: int | str = "me", ) -> bool: return self._client.users.save_tracks(track_ids, user_id=user_id)
[docs] @_copy_docstring(UsersAPI.remove_saved_track) def remove_saved_track( self, track_id: int | str, /, *, user_id: int | str = "me" ) -> bool: return self._client.users.remove_saved_track(track_id, user_id=user_id)
[docs] @_copy_docstring(UsersAPI.get_user_top_tracks) def get_user_top_tracks( self, user_id: int | str = "me", /, *, limit: int | None = None, offset: int | None = None, ) -> dict[str, Any]: return self._client.users.get_user_top_tracks( user_id, limit=limit, offset=offset )
[docs] @_copy_docstring(UsersAPI.get_user_track_recommendations) def get_user_track_recommendations( self, user_id: int | str = "me", / ) -> dict[str, Any]: return self._client.users.get_user_track_recommendations(user_id)