account.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from dataclasses import field
  2. from typing import TYPE_CHECKING, List, Optional
  3. from yandex_music import YandexMusicModel
  4. from yandex_music.utils import model
  5. if TYPE_CHECKING:
  6. from yandex_music import ClientType, JSONType, PassportPhone
  7. @model
  8. class Account(YandexMusicModel):
  9. """Класс, представляющий основную информацию об аккаунте пользователя.
  10. Attributes:
  11. now (:obj:`str`): Текущая дата и время.
  12. uid (:obj:`int`, optional): Уникальный идентификатор.
  13. login (:obj:`str`, optional): Виртуальное имя (обычно e-mail).
  14. full_name (:obj:`str`, optional): Полное имя (имя и фамилия).
  15. second_name (:obj:`str`, optional): Фамилия.
  16. first_name (:obj:`str`, optional): Имя.
  17. display_name (:obj:`str`, optional): Отображаемое имя.
  18. service_available (:obj:`bool`): Доступен ли сервис.
  19. hosted_user (:obj:`bool`, optional): Является ли пользователем чьим-то другим.
  20. birthday (:obj:`str`, optional): Дата рождения.
  21. region (:obj:`int`, optional): Регион.
  22. passport_phones (:obj:`list` из :obj:`yandex_music.PassportPhone`): Мобильные номера.
  23. registered_at (:obj:`str`, optional): Дата создания учётной записи.
  24. has_info_for_app_metrica (:obj:`bool`, optional): Наличие информации для App Metrica.
  25. child (:obj:`bool`): Дочерний / детский аккаунт (скорее детский, позволяет ограничить
  26. доступный контент ребенку на Кинопоиске).
  27. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  28. **kwargs: Произвольные ключевые аргументы полученные от API.
  29. """
  30. now: str
  31. service_available: bool
  32. region: Optional[int] = None
  33. uid: Optional[int] = None
  34. login: Optional[str] = None
  35. full_name: Optional[str] = None
  36. second_name: Optional[str] = None
  37. first_name: Optional[str] = None
  38. display_name: Optional[str] = None
  39. hosted_user: Optional[bool] = None
  40. birthday: Optional[str] = None
  41. passport_phones: List['PassportPhone'] = field(default_factory=list)
  42. registered_at: Optional[str] = None
  43. has_info_for_app_metrica: Optional[bool] = None
  44. child: Optional[bool] = None
  45. client: Optional['ClientType'] = None
  46. def __post_init__(self) -> None:
  47. if self.uid:
  48. self._id_attrs = (self.uid,)
  49. @classmethod
  50. def de_json(cls, data: 'JSONType', client: 'ClientType') -> Optional['Account']:
  51. """Десериализация объекта.
  52. Args:
  53. data (:obj:`dict`): Поля и значения десериализуемого объекта.
  54. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  55. Returns:
  56. :obj:`yandex_music.Account`: Основная информация об аккаунте пользователя.
  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 PassportPhone
  62. cls_data['passport_phones'] = PassportPhone.de_list(data.get('passport_phones'), client)
  63. return cls(client=client, **cls_data) # type: ignore