track_id.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from typing import TYPE_CHECKING, Any, Optional
  2. from yandex_music import YandexMusicModel
  3. from yandex_music.utils import model
  4. if TYPE_CHECKING:
  5. from yandex_music import ClientType, Track
  6. @model
  7. class TrackId(YandexMusicModel):
  8. """Класс, представляющий уникальный идентификатор трека.
  9. Note:
  10. Поле `track_id` используется только у объектах полученных через очередь треков. В остальные случаях `id`.
  11. Поле `from_` есть только у объект, которые используются в очереди треков.
  12. Attributes:
  13. id (:obj:`int`): Уникальный идентификатор трека.
  14. track_id (:obj:`int`): Уникальный идентификатор трека.
  15. album_id (:obj:`int`, optional): Уникальный идентификатор альбома.
  16. from_ (:obj:`str`, optional): Откуда был получен этот объект.
  17. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  18. """
  19. id: Optional[int] = None
  20. track_id: Optional[int] = None
  21. album_id: Optional[int] = None
  22. from_: Optional[str] = None
  23. client: Optional['ClientType'] = None
  24. def __post_init__(self) -> None:
  25. self._id_attrs = (self.track_id, self.id, self.album_id)
  26. @property
  27. def track_full_id(self) -> str:
  28. """:obj:`str`: ID трека состоящий из его номера и номера альбома."""
  29. track_id = self.id
  30. if self.track_id:
  31. track_id = self.track_id
  32. return f'{track_id}:{self.album_id}'
  33. def fetch_track(self, *args: Any, **kwargs: Any) -> 'Track':
  34. """Получение полной версии трека.
  35. Returns:
  36. :obj:`yandex_music.Track`: Полная версия.
  37. """
  38. assert self.valid_client(self.client)
  39. return self.client.tracks(self.track_full_id, *args, **kwargs)[0]
  40. async def fetch_track_async(self, *args: Any, **kwargs: Any) -> 'Track':
  41. """Получение полной версии трека.
  42. Returns:
  43. :obj:`yandex_music.Track`: Полная версия.
  44. """
  45. assert self.valid_async_client(self.client)
  46. return (await self.client.tracks(self.track_full_id, *args, **kwargs))[0]
  47. # camelCase псевдонимы
  48. #: Псевдоним для :attr:`track_full_id`
  49. trackFullId = track_full_id
  50. #: Псевдоним для :attr:`fetch_track`
  51. fetchTrack = fetch_track
  52. #: Псевдоним для :attr:`fetch_track_async`
  53. fetchTrackAsync = fetch_track_async