alert.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 AlertButton, ClientType, JSONType
  6. @model
  7. class Alert(YandexMusicModel):
  8. """Класс, представляющий блок с предупреждением.
  9. Note:
  10. Данные предупреждения, скорее всего, только обкатываются. У них нет ID, вместо этого `xxx`, а еще присутствуют
  11. слова "тест" в тексте.
  12. Используют как предупреждение о конце подписки, так и о раздаче подарков.
  13. Attributes:
  14. alert_id (:obj:`str`): Уникальный идентификатор.
  15. text (:obj:`str`): Текст предупреждения.
  16. bg_color (:obj:`str`): Цвет заднего фона.
  17. text_color (:obj:`str`): Цвет текста.
  18. alert_type (:obj:`str`): Тип предупреждения.
  19. button (:obj:`yandex_music.AlertButton`): Кнопка с ссылкой.
  20. close_button (:obj:`bool`): Наличие кнопки "Закрыть".
  21. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  22. """
  23. alert_id: str
  24. text: str
  25. bg_color: str
  26. text_color: str
  27. alert_type: str
  28. button: 'AlertButton'
  29. close_button: bool
  30. client: Optional['ClientType'] = None
  31. def __post_init__(self) -> None:
  32. self._id_attrs = (self.alert_id,)
  33. @classmethod
  34. def de_json(cls, data: 'JSONType', client: 'ClientType') -> Optional['Alert']:
  35. """Десериализация объекта.
  36. Args:
  37. data (:obj:`dict`): Поля и значения десериализуемого объекта.
  38. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  39. Returns:
  40. :obj:`yandex_music.Alert`: Сообщение о статусе подписки.
  41. """
  42. if not cls.is_dict_model_data(data):
  43. return None
  44. from yandex_music import AlertButton
  45. cls_data = cls.cleanup_data(data, client)
  46. cls_data['button'] = AlertButton.de_json(data.get('button'), client)
  47. return cls(client=client, **cls_data) # type: ignore