station_result.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from typing import TYPE_CHECKING, Optional
  2. from yandex_music import YandexMusicModel
  3. from yandex_music.utils import model
  4. if TYPE_CHECKING:
  5. from yandex_music import AdParams, ClientType, JSONType, RotorSettings, Station
  6. @model
  7. class StationResult(YandexMusicModel):
  8. """Класс, представляющий радиостанцию с настройками.
  9. Note:
  10. Известные значения `custom_name`: `Танцую`, `R'n'B`, `Отдыхаю`, `Просыпаюсь`,
  11. `Тренируюсь`, `В дороге`, `Работаю`, `Засыпаю`.
  12. Attributes:
  13. station (:obj:`yandex_music.Station` | :obj:`None`): Станция.
  14. settings (:obj:`yandex_music.RotorSettings` | :obj:`None`): Первый набор настроек.
  15. settings2 (:obj:`yandex_music.RotorSettings` | :obj:`None`): Второй набор настроек.
  16. ad_params (:obj:`yandex_music.AdParams` | :obj:`None`): Настройки рекламы.
  17. explanation (:obj:`str`, optional): TODO.
  18. prerolls (:obj:`list` из :obj:`str`, optional): Прероллы TODO.
  19. rup_title (:obj:`str`): Название станции / Моя волна TODO.
  20. rup_description (:obj:`str`): Описание станции.
  21. custom_name (:obj:`str`, optional): Название станции TODO.
  22. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  23. """
  24. station: Optional['Station']
  25. settings: Optional['RotorSettings']
  26. settings2: Optional['RotorSettings']
  27. ad_params: Optional['AdParams']
  28. explanation: Optional[str] = None
  29. prerolls: Optional[list] = None
  30. rup_title: Optional[str] = None
  31. rup_description: Optional[str] = None
  32. custom_name: Optional[str] = None
  33. client: Optional['ClientType'] = None
  34. def __post_init__(self) -> None:
  35. self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params)
  36. @classmethod
  37. def de_json(cls, data: 'JSONType', client: 'ClientType') -> Optional['StationResult']:
  38. """Десериализация объекта.
  39. Args:
  40. data (:obj:`dict`): Поля и значения десериализуемого объекта.
  41. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  42. Returns:
  43. :obj:`yandex_music.StationResult`: Радиостанция с настройками.
  44. """
  45. if not cls.is_dict_model_data(data):
  46. return None
  47. cls_data = cls.cleanup_data(data, client)
  48. from yandex_music import AdParams, RotorSettings, Station
  49. cls_data['station'] = Station.de_json(data.get('station'), client)
  50. cls_data['settings'] = RotorSettings.de_json(data.get('settings'), client)
  51. cls_data['settings2'] = RotorSettings.de_json(data.get('settings2'), client)
  52. cls_data['ad_params'] = AdParams.de_json(data.get('ad_params'), client)
  53. return cls(client=client, **cls_data) # type: ignore