title.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from typing import TYPE_CHECKING, Dict, Optional
  2. from yandex_music import YandexMusicModel
  3. from yandex_music.utils import model
  4. if TYPE_CHECKING:
  5. from yandex_music import ClientType, JSONType
  6. @model
  7. class Title(YandexMusicModel):
  8. """Класс, представляющий заголовок жанра.
  9. Attributes:
  10. title (:obj:`str`): Заголовок.
  11. full_title (:obj:`str`, optional): Полный заголовок.
  12. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  13. """
  14. title: str
  15. full_title: Optional[str] = None
  16. client: Optional['ClientType'] = None
  17. def __post_init__(self) -> None:
  18. self._id_attrs = (self.title, self.full_title)
  19. @classmethod
  20. def de_dict(cls, data: 'JSONType', client: 'ClientType') -> Dict[str, 'Title']:
  21. """Десериализация списка объектов.
  22. Args:
  23. data (:obj:`dict`): Словарь с полями и значениями десериализуемого объекта.
  24. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  25. Returns:
  26. :obj:`dict` где ключ это язык :obj:`str`, а значение :obj:`yandex_music.Title`: Заголовки жанров.
  27. """
  28. if not cls.is_dict_model_data(data):
  29. return {}
  30. titles: Dict[str, 'Title'] = {}
  31. for lang, raw_title in data.items():
  32. title = cls.de_json(raw_title, client)
  33. if title:
  34. titles.update({lang: title})
  35. return titles