status.py 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 Account, Alert, ClientType, JSONType, Permissions, Plus, StationData, Subscription
  6. @model
  7. class Status(YandexMusicModel):
  8. """Класс, представляющий подробную информацию об аккаунте пользователя.
  9. Attributes:
  10. account (:obj:`yandex_music.Account`): Основная информация об аккаунте
  11. permissions (:obj:`yandex_music.Permissions`): Информация о правах пользователя.
  12. advertisement (:obj:`str`, optional): Рекламное объявление.
  13. subscription (:obj:`yandex_music.Subscription`, optional): Информация о подписках.
  14. cache_limit (:obj:`int`, optional): Максимальное количество загруженных треков.
  15. subeditor (:obj:`bool`, optional): Наличие статуса модератора проверки корректности информации.
  16. subeditor_level (:obj:`int`, optional): Уровень статуса модератора.
  17. plus (:obj:`yandex_music.Plus`, optional): Информация о Plus подписке.
  18. default_email (:obj:`str`, optional): Основной e-mail адрес аккаунта.
  19. skips_per_hour (:obj:`int`, optional): Количество переключение треков на радио в час.
  20. station_exists (:obj:`bool`, optional): Наличие личной станции.
  21. station_data (:obj:`yandex_music.StationData`, optional): Информация о личной станции.
  22. bar_below (:obj:`yandex_music.Alert`, optional): Блок с предупреждениями о конце подписке и подарках.
  23. premium_region (:obj:`int`, optional): Регион TODO.
  24. experiment (:obj:`int`, optional): Включенная новая фича на аккаунте (её ID) TODO.
  25. pretrial_active (:obj:`bool`, optional): TODO.
  26. userhash (:obj:`str`, optional): Хэш-код идентификатора пользователя.
  27. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  28. """
  29. account: Optional['Account']
  30. permissions: Optional['Permissions']
  31. advertisement: Optional[str] = None
  32. subscription: Optional['Subscription'] = None
  33. cache_limit: Optional[int] = None
  34. subeditor: Optional[bool] = None
  35. subeditor_level: Optional[int] = None
  36. plus: Optional['Plus'] = None
  37. default_email: Optional[str] = None
  38. skips_per_hour: Optional[int] = None
  39. station_exists: Optional[bool] = None
  40. station_data: Optional['StationData'] = None
  41. bar_below: Optional['Alert'] = None
  42. premium_region: Optional[int] = None
  43. experiment: Optional[int] = None
  44. pretrial_active: Optional[bool] = None
  45. userhash: Optional[str] = None
  46. client: Optional['ClientType'] = None
  47. def __post_init__(self) -> None:
  48. self._id_attrs = (self.account, self.permissions)
  49. @classmethod
  50. def de_json(cls, data: 'JSONType', client: 'ClientType') -> Optional['Status']:
  51. """Десериализация объекта.
  52. Args:
  53. data (:obj:`dict`): Поля и значения десериализуемого объекта.
  54. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  55. Returns:
  56. :obj:`yandex_music.Status`: Информация об аккаунте пользователя.
  57. """
  58. if not cls.is_dict_model_data(data):
  59. return None
  60. cls_data = cls.cleanup_data(data, client)
  61. from yandex_music import Account, Alert, Permissions, Plus, StationData, Subscription
  62. cls_data['account'] = Account.de_json(data.get('account'), client)
  63. cls_data['permissions'] = Permissions.de_json(data.get('permissions'), client)
  64. cls_data['subscription'] = Subscription.de_json(data.get('subscription'), client)
  65. cls_data['plus'] = Plus.de_json(data.get('plus'), client)
  66. cls_data['station_data'] = StationData.de_json(data.get('station_data'), client)
  67. cls_data['bar_below'] = Alert.de_json(data.get('bar_below'), client)
  68. return cls(client=client, **cls_data) # type: ignore