images.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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 ClientType
  6. @model
  7. class Images(YandexMusicModel):
  8. """Класс, представляющий изображение жанра.
  9. Attributes:
  10. _208x208 (:obj:`str`, optional): Ссылка на изображение размером 208 на 208.
  11. _300x300 (:obj:`str`, optional): Ссылка на изображение размером 300 на 300.
  12. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
  13. """
  14. _208x208: Optional[str] = None
  15. _300x300: Optional[str] = None
  16. client: Optional['ClientType'] = None
  17. def __post_init__(self) -> None:
  18. self._id_attrs = (self._208x208, self._300x300)
  19. def download_208x208(self, filename: str) -> None:
  20. """Загрузка изображения 208x208.
  21. Args:
  22. filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
  23. """
  24. assert isinstance(self._208x208, str)
  25. assert self.valid_client(self.client)
  26. self.client.request.download(self._208x208, filename)
  27. async def download_208x208_async(self, filename: str) -> None:
  28. """Загрузка изображения 208x208.
  29. Args:
  30. filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
  31. """
  32. assert isinstance(self._208x208, str)
  33. assert self.valid_async_client(self.client)
  34. await self.client.request.download(self._208x208, filename)
  35. def download_300x300(self, filename: str) -> None:
  36. """Загрузка изображения 300x300.
  37. Args:
  38. filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
  39. """
  40. assert isinstance(self._300x300, str)
  41. assert self.valid_client(self.client)
  42. self.client.request.download(self._300x300, filename)
  43. async def download_300x300_async(self, filename: str) -> None:
  44. """Загрузка изображения 300x300.
  45. Args:
  46. filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
  47. """
  48. assert isinstance(self._300x300, str)
  49. assert self.valid_async_client(self.client)
  50. await self.client.request.download(self._300x300, filename)
  51. def download_208x208_bytes(self) -> bytes:
  52. """Загрузка изображения 208x208 и возврат в виде байтов.
  53. Returns:
  54. :obj:`bytes`: Изображение в виде байтов.
  55. """
  56. assert isinstance(self._208x208, str)
  57. assert self.valid_client(self.client)
  58. return self.client.request.retrieve(self._208x208)
  59. async def download_208x208_bytes_async(self) -> bytes:
  60. """Загрузка изображения 208x208 и возврат в виде байтов.
  61. Returns:
  62. :obj:`bytes`: Изображение в виде байтов.
  63. """
  64. assert isinstance(self._208x208, str)
  65. assert self.valid_async_client(self.client)
  66. return await self.client.request.retrieve(self._208x208)
  67. def download_300x300_bytes(self) -> bytes:
  68. """Загрузка изображения 300x300 и возврат в виде байтов.
  69. Returns:
  70. :obj:`bytes`: Изображение в виде байтов.
  71. """
  72. assert isinstance(self._300x300, str)
  73. assert self.valid_client(self.client)
  74. return self.client.request.retrieve(self._300x300)
  75. async def download_300x300_bytes_async(self) -> bytes:
  76. """Загрузка изображения 300x300 и возврат в виде байтов.
  77. Returns:
  78. :obj:`bytes`: Изображение в виде байтов.
  79. """
  80. assert isinstance(self._300x300, str)
  81. assert self.valid_async_client(self.client)
  82. return await self.client.request.retrieve(self._300x300)
  83. # camelCase псевдонимы
  84. #: Псевдоним для :attr:`download_208x208`
  85. download208X208 = download_208x208
  86. #: Псевдоним для :attr:`download_208x208_async`
  87. download208X208Async = download_208x208_async
  88. #: Псевдоним для :attr:`download_300x300`
  89. download300X300 = download_300x300
  90. #: Псевдоним для :attr:`download_300x300_async`
  91. download300X300Async = download_300x300_async
  92. #: Псевдоним для :attr:`download_208x208_bytes`
  93. download208X208Bytes = download_208x208_bytes
  94. #: Псевдоним для :attr:`download_208x208_bytes_async`
  95. download208X208BytesAsync = download_208x208_bytes_async
  96. #: Псевдоним для :attr:`download_300x300_bytes`
  97. download300X300Bytes = download_300x300_bytes
  98. #: Псевдоним для :attr:`download_300x300_bytes_async`
  99. download300X300BytesAsync = download_300x300_bytes_async