queue_item.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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, Context, JSONType, Queue
  6. @model
  7. class QueueItem(YandexMusicModel):
  8. """Класс, представляющий очередь треков в списке очередей устройств.
  9. Attributes:
  10. id (:obj:`str`): Уникальный идентификатор очереди.
  11. context (:obj:`yandex_music.Context` | :obj:`None`): Объект по которому построена очередь.
  12. modified (:obj:`str`): Дата последнего изменения.
  13. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  14. """
  15. id: str
  16. context: Optional['Context']
  17. modified: str
  18. client: Optional['ClientType'] = None
  19. def __post_init__(self) -> None:
  20. self._id_attrs = (self.id,)
  21. def fetch_queue(self, *args: Any, **kwargs: Any) -> Optional['Queue']:
  22. """Сокращение для::
  23. client.queue(id, *args, **kwargs)
  24. """
  25. assert self.valid_client(self.client)
  26. return self.client.queue(self.id, *args, **kwargs)
  27. async def fetch_queue_async(self, *args: Any, **kwargs: Any) -> Optional['Queue']:
  28. """Сокращение для::
  29. await client.queue(id, *args, **kwargs)
  30. """
  31. assert self.valid_async_client(self.client)
  32. return await self.client.queue(self.id, *args, **kwargs)
  33. @classmethod
  34. def de_json(cls, data: 'JSONType', client: 'ClientType') -> Optional['QueueItem']:
  35. """Десериализация объекта.
  36. Args:
  37. data (:obj:`dict`): Поля и значения десериализуемого объекта.
  38. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  39. Returns:
  40. :obj:`yandex_music.QueueItem`: Очередь в списке.
  41. """
  42. if not cls.is_dict_model_data(data):
  43. return None
  44. from yandex_music import Context
  45. cls_data = cls.cleanup_data(data, client)
  46. cls_data['context'] = Context.de_json(data.get('context'), client)
  47. return cls(client=client, **cls_data) # type: ignore
  48. # camelCase псевдонимы
  49. #: Псевдоним для :attr:`fetch_queue`
  50. fetchQueue = fetch_queue
  51. #: Псевдоним для :attr:`fetch_queue_async`
  52. fetchQueueAsync = fetch_queue_async