Добавлены импорты для тайп хинтов. В каждом конструкторе указан Client, сигнатура de_json и de_list, возвращаемый тип конструтора.

Добавлена опциональность аргументов в методах Client'a
このコミットが含まれているのは:
Marshal 2019-12-27 12:14:51 +03:00
コミット 7575445403
66個のファイルの変更650行の追加322行の削除

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -28,8 +33,8 @@ class Album(YandexMusicObject):
type_=None, type_=None,
track_position=None, track_position=None,
regions=None, regions=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.title = title self.title = title
self.track_count = track_count self.track_count = track_count
@ -106,7 +111,7 @@ class Album(YandexMusicObject):
return self.client.users_likes_albums_remove(self.id, self.client.me.account.uid, *args, **kwargs) return self.client.users_likes_albums_remove(self.id, self.client.me.account.uid, *args, **kwargs)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -121,7 +126,7 @@ class Album(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -19,8 +24,8 @@ class Label(YandexMusicObject):
def __init__(self, def __init__(self,
id_, id_,
name, name,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.name = name self.name = name
@ -28,7 +33,7 @@ class Label(YandexMusicObject):
self._id_attrs = (self.id, self.name) self._id_attrs = (self.id, self.name)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:
@ -46,7 +51,7 @@ class Label(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
"""Десериализация списка объектов. """Десериализация списка объектов.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class TrackPosition(YandexMusicObject):
def __init__(self, def __init__(self,
volume, volume,
index, index,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.volume = volume self.volume = volume
self.index = index self.index = index
@ -14,7 +19,7 @@ class TrackPosition(YandexMusicObject):
self._id_attrs = (self.volume, self.index) self._id_attrs = (self.volume, self.index)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -28,8 +33,8 @@ class Artist(YandexMusicObject):
aliases=None, aliases=None,
init_date=None, init_date=None,
end_date=None, end_date=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.name = name self.name = name
self.cover = cover self.cover = cover
@ -103,7 +108,7 @@ class Artist(YandexMusicObject):
return self.client.artists_direct_albums(self.id, page, page_size, sort_by, *args, **kwargs) return self.client.artists_direct_albums(self.id, page, page_size, sort_by, *args, **kwargs)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -120,7 +125,7 @@ class Artist(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -21,8 +26,8 @@ class ArtistAlbums(YandexMusicObject):
def __init__(self, def __init__(self,
albums, albums,
pager, pager,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.albums = albums self.albums = albums
self.pager = pager self.pager = pager
@ -30,7 +35,7 @@ class ArtistAlbums(YandexMusicObject):
self._id_attrs = (self.pager, self.albums) self._id_attrs = (self.pager, self.albums)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -21,8 +26,8 @@ class ArtistTracks(YandexMusicObject):
def __init__(self, def __init__(self,
tracks, tracks,
pager, pager,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.tracks = tracks self.tracks = tracks
self.pager = pager self.pager = pager
@ -30,7 +35,7 @@ class ArtistTracks(YandexMusicObject):
self._id_attrs = (self.pager, self.tracks) self._id_attrs = (self.pager, self.tracks)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -16,8 +21,8 @@ class BriefInfo(YandexMusicObject):
has_promotions, has_promotions,
playlist_ids, playlist_ids,
tracks_in_chart=None, tracks_in_chart=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.artist = artist self.artist = artist
self.albums = albums self.albums = albums
self.also_albums = also_albums self.also_albums = also_albums
@ -39,7 +44,7 @@ class BriefInfo(YandexMusicObject):
self.has_promotions, self.playlist_ids) self.has_promotions, self.playlist_ids)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class Counts(YandexMusicObject):
direct_albums, direct_albums,
also_albums, also_albums,
also_tracks, also_tracks,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.tracks = tracks self.tracks = tracks
self.direct_albums = direct_albums self.direct_albums = direct_albums
self.also_albums = also_albums self.also_albums = also_albums
@ -18,7 +23,7 @@ class Counts(YandexMusicObject):
self._id_attrs = (self.tracks, self.direct_albums, self.also_albums, self.also_tracks) self._id_attrs = (self.tracks, self.direct_albums, self.also_albums, self.also_tracks)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Description(YandexMusicObject):
def __init__(self, def __init__(self,
text, text,
url, url,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.text = text self.text = text
self.url = url self.url = url
@ -14,7 +19,7 @@ class Description(YandexMusicObject):
self._id_attrs = (self.text, self.url) self._id_attrs = (self.text, self.url)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class Link(YandexMusicObject):
href, href,
type_, type_,
social_network=None, social_network=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.title = title self.title = title
self.href = href self.href = href
self.type = type_ self.type = type_
@ -19,7 +24,7 @@ class Link(YandexMusicObject):
self._id_attrs = (self.title, self.href, self.type) self._id_attrs = (self.title, self.href, self.type)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -28,7 +33,7 @@ class Link(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class Ratings(YandexMusicObject):
week, week,
month, month,
day=None, day=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.week = week self.week = week
self.month = month self.month = month
@ -17,7 +22,7 @@ class Ratings(YandexMusicObject):
self._id_attrs = (self.week, self.month) self._id_attrs = (self.week, self.month)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -9,8 +14,8 @@ class Vinyl(YandexMusicObject):
year, year,
price, price,
media, media,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.url = url self.url = url
self.picture = picture self.picture = picture
self.title = title self.title = title
@ -22,7 +27,7 @@ class Vinyl(YandexMusicObject):
self._id_attrs = (self.title, self.price, self.year, self.url, self.price, self.media) self._id_attrs = (self.title, self.price, self.year, self.url, self.price, self.media)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:
@ -42,7 +47,7 @@ class Vinyl(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
"""Десериализация списка объектов. """Десериализация списка объектов.
Args: Args:

ファイルの表示

@ -1,7 +1,7 @@
import logging import logging
import functools import functools
from datetime import datetime from datetime import datetime
from typing import Callable, Union, List from typing import Callable, Union, List, Optional
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \ from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \ TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
@ -70,8 +70,8 @@ class Client(YandexMusicObject):
:class:`yandex_music.utils.request.Request`. :class:`yandex_music.utils.request.Request`.
""" """
def __init__(self, token: str = None, fetch_account_status: bool = True, base_url: str = None, def __init__(self, token: Optional[str] = None, fetch_account_status: bool = True, base_url: Optional[str] = None,
oauth_url: str = None, request: Request = None) -> None: oauth_url: Optional[str] = None, request: Request = None) -> None:
self.logger = logging.getLogger(__name__) self.logger = logging.getLogger(__name__)
self.token = token self.token = token
@ -94,7 +94,7 @@ class Client(YandexMusicObject):
self.me = self.account_status() self.me = self.account_status()
@classmethod @classmethod
def from_credentials(cls, username: str, password: str, x_captcha_answer: str = None, x_captcha_key: str = None, def from_credentials(cls, username: str, password: str, x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None,
captcha_callback: Callable[[Captcha], str] = None, *args, **kwargs) -> 'Client': captcha_callback: Callable[[Captcha], str] = None, *args, **kwargs) -> 'Client':
"""Инициализция клиента по логину и паролю. """Инициализция клиента по логину и паролю.
@ -151,8 +151,8 @@ class Client(YandexMusicObject):
@log @log
def generate_token_by_username_and_password(self, username: str, password: str, grant_type: str = 'password', def generate_token_by_username_and_password(self, username: str, password: str, grant_type: str = 'password',
x_captcha_answer: str = None, x_captcha_key: str = None, x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> str: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> str:
"""Метод получения OAuth токена по логину и паролю. """Метод получения OAuth токена по логину и паролю.
Args: Args:
@ -217,7 +217,7 @@ class Client(YandexMusicObject):
return self._request return self._request
@log @log
def account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Status: def account_status(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Status:
"""Получение статуса аккаунта. Нет обязательных параметров. """Получение статуса аккаунта. Нет обязательных параметров.
Args: Args:
@ -240,7 +240,7 @@ class Client(YandexMusicObject):
return Status.de_json(result, self) return Status.de_json(result, self)
@log @log
def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Settings: def settings(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Settings:
"""Получение предложений по покупке. Нет обязательных параметров. """Получение предложений по покупке. Нет обязательных параметров.
Args: Args:
@ -263,7 +263,7 @@ class Client(YandexMusicObject):
return Settings.de_json(result, self) return Settings.de_json(result, self)
@log @log
def permission_alerts(self, timeout: Union[int, float] = None, *args, **kwargs) -> PermissionAlerts: def permission_alerts(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> PermissionAlerts:
"""Получение оповещений. Нет обязательных параметров. """Получение оповещений. Нет обязательных параметров.
Args: Args:
@ -286,7 +286,7 @@ class Client(YandexMusicObject):
return PermissionAlerts.de_json(result, self) return PermissionAlerts.de_json(result, self)
@log @log
def account_experiments(self, timeout: Union[int, float] = None, *args, **kwargs) -> Experiments: def account_experiments(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Experiments:
"""Получение значений экспериментальных функций аккаунта. """Получение значений экспериментальных функций аккаунта.
Args: Args:
@ -309,7 +309,7 @@ class Client(YandexMusicObject):
return Experiments.de_json(result, self) return Experiments.de_json(result, self)
@log @log
def consume_promo_code(self, code: str, language: str = 'en', timeout: Union[int, float] = None, def consume_promo_code(self, code: str, language: str = 'en', timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> PromoCodeStatus: *args, **kwargs) -> PromoCodeStatus:
"""Активация промо-кода. """Активация промо-кода.
@ -335,7 +335,7 @@ class Client(YandexMusicObject):
return PromoCodeStatus.de_json(result, self) return PromoCodeStatus.de_json(result, self)
@log @log
def feed(self, timeout: Union[int, float] = None, *args, **kwargs) -> Feed: def feed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Feed:
"""Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты. """Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты.
Args: Args:
@ -358,7 +358,7 @@ class Client(YandexMusicObject):
return Feed.de_json(result, self) return Feed.de_json(result, self)
@log @log
def feed_wizard_is_passed(self, timeout: Union[int, float] = None, *args, **kwargs) -> bool: def feed_wizard_is_passed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
url = f'{self.base_url}/feed/wizard/is-passed' url = f'{self.base_url}/feed/wizard/is-passed'
result = self._request.get(url, timeout=timeout, *args, **kwargs) result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -366,7 +366,7 @@ class Client(YandexMusicObject):
return result.get('is_wizard_passed') or False return result.get('is_wizard_passed') or False
@log @log
def landing(self, blocks: Union[str, List[str]], timeout: Union[int, float] = None, *args, **kwargs) -> Landing: def landing(self, blocks: Union[str, List[str]], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Landing:
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д. """Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists, Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists,
@ -393,7 +393,7 @@ class Client(YandexMusicObject):
return Landing.de_json(result, self) return Landing.de_json(result, self)
@log @log
def genres(self, timeout: Union[int, float] = None, *args, **kwargs) -> List[Genre]: def genres(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Genre]:
"""Получение жанров музыки. """Получение жанров музыки.
Args: Args:
@ -417,7 +417,7 @@ class Client(YandexMusicObject):
@log @log
def tracks_download_info(self, track_id: Union[str, int], get_direct_links: bool = False, def tracks_download_info(self, track_id: Union[str, int], get_direct_links: bool = False,
timeout: Union[int, float] = None, *args, **kwargs) -> List[DownloadInfo]: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[DownloadInfo]:
"""Получение информации о доступных вариантах загрузки трека. """Получение информации о доступных вариантах загрузки трека.
Args: Args:
@ -442,7 +442,7 @@ class Client(YandexMusicObject):
return DownloadInfo.de_list(result, self, get_direct_links) return DownloadInfo.de_list(result, self, get_direct_links)
@log @log
def track_supplement(self, track_id: Union[str, int], timeout: Union[int, float] = None, def track_supplement(self, track_id: Union[str, int], timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Supplement: *args, **kwargs) -> Supplement:
"""Получение дополнительной информации о треке. """Получение дополнительной информации о треке.
@ -469,16 +469,16 @@ class Client(YandexMusicObject):
track_id: Union[str, int], track_id: Union[str, int],
from_: str, from_: str,
album_id: Union[str, int], album_id: Union[str, int],
playlist_id: str = None, playlist_id: Optional[str] = None,
from_cache: bool = False, from_cache: bool = False,
play_id: str = None, play_id: Optional[str] = None,
uid: int = None, uid: Optional[int] = None,
timestamp: str = None, timestamp: Optional[str] = None,
track_length_seconds: int = 0, track_length_seconds: Optional[int] = 0,
total_played_seconds: int = 0, total_played_seconds: Optional[int] = 0,
end_position_seconds: int = 0, end_position_seconds: Optional[int] = 0,
client_now: str = None, client_now: Optional[str] = None,
timeout: Union[int, float] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> bool: *args, **kwargs) -> bool:
"""Метод для отправки текущего состояния прослушиваемого трека. """Метод для отправки текущего состояния прослушиваемого трека.
@ -530,7 +530,7 @@ class Client(YandexMusicObject):
return result == 'ok' return result == 'ok'
def albums_with_tracks(self, album_id: Union[str, int], timeout: Union[int, float] = None, def albums_with_tracks(self, album_id: Union[str, int], timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Album: *args, **kwargs) -> Album:
"""Получение альбома по его уникальному идентификатору вместе с треками. """Получение альбома по его уникальному идентификатору вместе с треками.
@ -559,9 +559,9 @@ class Client(YandexMusicObject):
text: str, text: str,
nocorrect: bool = False, nocorrect: bool = False,
type_: str = 'all', type_: str = 'all',
page: int = 0, page: Optional[int] = 0,
playlist_in_best: bool = True, playlist_in_best: bool = True,
timeout: Union[int, float] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Search: *args, **kwargs) -> Search:
"""Осуществление поиска по запросу и типу, получение результатов. """Осуществление поиска по запросу и типу, получение результатов.
@ -598,7 +598,8 @@ class Client(YandexMusicObject):
return Search.de_json(result, self) return Search.de_json(result, self)
@log @log
def search_suggest(self, part: str, timeout: Union[int, float] = None, *args, **kwargs) -> Suggestions: def search_suggest(self, part: str, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Optional[Suggestions]:
"""Получение подсказок по введенной части поискового запроса. """Получение подсказок по введенной части поискового запроса.
Args: Args:
@ -622,8 +623,8 @@ class Client(YandexMusicObject):
return Suggestions.de_json(result, self) return Suggestions.de_json(result, self)
@log @log
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: str = None, def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]:
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам. """Получение плейлиста или списка плейлистов по уникальным идентификаторам.
Args: Args:
@ -656,8 +657,8 @@ class Client(YandexMusicObject):
return Playlist.de_list(result, self) return Playlist.de_list(result, self)
@log @log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None, def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
"""Создание плейлиста. """Создание плейлиста.
Args: Args:
@ -691,8 +692,8 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self) return Playlist.de_json(result, self)
@log @log
def users_playlists_delete(self, kind: Union[str, int], user_id: str = None, def users_playlists_delete(self, kind: Union[str, int], user_id: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
"""Удаление плейлиста. """Удаление плейлиста.
Args: Args:
@ -719,8 +720,8 @@ class Client(YandexMusicObject):
return result == 'ok' return result == 'ok'
@log @log
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None, def users_playlists_name(self, kind: Union[str, int], name: str, user_id: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
"""Изменение названия плейлиста. """Изменение названия плейлиста.
Args: Args:
@ -749,8 +750,8 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self) return Playlist.de_json(result, self)
@log @log
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: str = None, def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Optional[Playlist]:
"""Изменение плейлиста. """Изменение плейлиста.
Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`. Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`.
@ -790,8 +791,8 @@ class Client(YandexMusicObject):
@log @log
def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int], def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int],
at: int = 0, revision: int = 1, user_id: str = None, at: Optional[int] = 0, revision: int = 1, user_id: Optional[str] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
"""Добавление трека в плейлист. """Добавление трека в плейлист.
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at). Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at).
@ -824,7 +825,7 @@ class Client(YandexMusicObject):
@log @log
def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1, def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1,
user_id: str = None, timeout: Union[int, float] = None, user_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Playlist: *args, **kwargs) -> Playlist:
"""Удаление треков из плейлиста. """Удаление треков из плейлиста.
@ -856,7 +857,7 @@ class Client(YandexMusicObject):
return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs) return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs)
@log @log
def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Status: def rotor_account_status(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Status:
url = f'{self.base_url}/rotor/account/status' url = f'{self.base_url}/rotor/account/status'
result = self._request.get(url, timeout=timeout, *args, **kwargs) result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -864,7 +865,8 @@ class Client(YandexMusicObject):
return Status.de_json(result, self) return Status.de_json(result, self)
@log @log
def rotor_stations_dashboard(self, timeout: Union[int, float] = None, *args, **kwargs) -> Dashboard: def rotor_stations_dashboard(self, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Optional[Dashboard]:
url = f'{self.base_url}/rotor/stations/dashboard' url = f'{self.base_url}/rotor/stations/dashboard'
result = self._request.get(url, timeout=timeout, *args, **kwargs) result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -872,7 +874,7 @@ class Client(YandexMusicObject):
return Dashboard.de_json(result, self) return Dashboard.de_json(result, self)
@log @log
def rotor_stations_list(self, language: str = 'en', timeout: Union[int, float] = None, def rotor_stations_list(self, language: str = 'en', timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[StationResult]: *args, **kwargs) -> List[StationResult]:
url = f'{self.base_url}/rotor/stations/list' url = f'{self.base_url}/rotor/stations/list'
@ -881,9 +883,10 @@ class Client(YandexMusicObject):
return StationResult.de_list(result, self) return StationResult.de_list(result, self)
@log @log
def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: int = None, from_: str = None, def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: Optional[int] = None,
batch_id: Union[str, int] = None, track_id: str = None, from_: Optional[str] = None, batch_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: track_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> bool:
if timestamp is None: if timestamp is None:
timestamp = datetime.now().timestamp() timestamp = datetime.now().timestamp()
@ -907,19 +910,19 @@ class Client(YandexMusicObject):
return result == 'ok' return result == 'ok'
@log @log
def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: int = None, def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: Optional[int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs) return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs)
@log @log
def rotor_station_genre_feedback_track_started(self, genre: str, track_id: str, batch_id: Union[str, int], def rotor_station_genre_feedback_track_started(self, genre: str, track_id: str, batch_id: Union[str, int],
timestamp: int = None, timeout: Union[int, float] = None, timestamp: Optional[int] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> bool: *args, **kwargs) -> bool:
return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id, return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
timeout=timeout, *args, **kwargs) timeout=timeout, *args, **kwargs)
@log @log
def rotor_station_genre_info(self, genre: str, timeout: Union[int, float] = None, def rotor_station_genre_info(self, genre: str, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[StationResult]: *args, **kwargs) -> List[StationResult]:
url = f'{self.base_url}/rotor/station/genre:{genre}/info' url = f'{self.base_url}/rotor/station/genre:{genre}/info'
@ -928,8 +931,8 @@ class Client(YandexMusicObject):
return StationResult.de_list(result, self) return StationResult.de_list(result, self)
@log @log
def rotor_station_genre_tracks(self, genre: str, timeout: Union[int, float] = None, def rotor_station_genre_tracks(self, genre: str, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> StationTracksResult: *args, **kwargs) -> Optional[StationTracksResult]:
url = f'{self.base_url}/rotor/station/genre:{genre}/tracks' url = f'{self.base_url}/rotor/station/genre:{genre}/tracks'
result = self._request.get(url, timeout=timeout, *args, **kwargs) result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -937,7 +940,7 @@ class Client(YandexMusicObject):
return StationTracksResult.de_json(result, self) return StationTracksResult.de_json(result, self)
@log @log
def artists_brief_info(self, artist_id: Union[str, int], timeout: Union[int, float] = None, def artists_brief_info(self, artist_id: Union[str, int], timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> BriefInfo: *args, **kwargs) -> BriefInfo:
url = f'{self.base_url}/artists/{artist_id}/brief-info' url = f'{self.base_url}/artists/{artist_id}/brief-info'
@ -946,8 +949,8 @@ class Client(YandexMusicObject):
return BriefInfo.de_json(result, self) return BriefInfo.de_json(result, self)
@log @log
def artists_tracks(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20, def artists_tracks(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20,
timeout: Union[int, float] = None, *args, **kwargs) -> ArtistTracks: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> ArtistTracks:
"""Получение треков артиста. """Получение треков артиста.
Args: Args:
@ -978,8 +981,8 @@ class Client(YandexMusicObject):
return ArtistTracks.de_json(result, self) return ArtistTracks.de_json(result, self)
@log @log
def artists_direct_albums(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20, def artists_direct_albums(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20,
sort_by: str = 'year', timeout: Union[int, float] = None, sort_by: str = 'year', timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> ArtistAlbums: *args, **kwargs) -> ArtistAlbums:
"""Получение альбомов артиста. """Получение альбомов артиста.
@ -1015,7 +1018,7 @@ class Client(YandexMusicObject):
return ArtistAlbums.de_json(result, self) return ArtistAlbums.de_json(result, self)
def _like_action(self, object_type: str, ids: Union[List[Union[str, int]], str, int], remove: bool = False, def _like_action(self, object_type: str, ids: Union[List[Union[str, int]], str, int], remove: bool = False,
user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
if user_id is None and self.me is not None: if user_id is None and self.me is not None:
user_id = self.me.account.uid user_id = self.me.account.uid
@ -1031,51 +1034,51 @@ class Client(YandexMusicObject):
@log @log
def users_likes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, def users_likes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs) return self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs)
@log @log
def users_likes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int], def users_likes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs) return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs)
@log @log
def users_likes_artists_add(self, artist_ids: Union[List[Union[str, int]], str, int], def users_likes_artists_add(self, artist_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs) return self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs)
def users_likes_artists_remove(self, artist_ids: Union[List[Union[str, int]], str, int], def users_likes_artists_remove(self, artist_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs) return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs)
@log @log
def users_likes_playlists_add(self, playlist_ids: Union[List[Union[str, int]], str, int], def users_likes_playlists_add(self, playlist_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs) return self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs)
@log @log
def users_likes_playlists_remove(self, playlist_ids: Union[List[Union[str, int]], str, int], def users_likes_playlists_remove(self, playlist_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs) return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs)
@log @log
def users_likes_albums_add(self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, def users_likes_albums_add(self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs) return self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs)
@log @log
def users_likes_albums_remove(self, album_ids: Union[List[Union[str, int]], str, int], def users_likes_albums_remove(self, album_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs) return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs)
def _get_list(self, object_type: str, ids: Union[List[Union[str, int]], int, str], def _get_list(self, object_type: str, ids: Union[List[Union[str, int]], int, str],
params: dict = None, timeout: Union[int, float] = None, params: dict = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[Union[Artist, Album, Track, Playlist]]: *args, **kwargs) -> List[Union[Artist, Album, Track, Playlist]]:
if params is None: if params is None:
params = {} params = {}
@ -1088,27 +1091,27 @@ class Client(YandexMusicObject):
return de_list.get(object_type)(result, self) return de_list.get(object_type)(result, self)
@log @log
def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[Artist]: *args, **kwargs) -> List[Artist]:
return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs) return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs)
@log @log
def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[Album]: *args, **kwargs) -> List[Album]:
return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs) return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs)
@log @log
def tracks(self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True, def tracks(self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True,
timeout: Union[int, float] = None, *args, **kwargs) -> List[Track]: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Track]:
return self._get_list('track', track_ids, {'with-positions': with_positions}, timeout, *args, **kwargs) return self._get_list('track', track_ids, {'with-positions': with_positions}, timeout, *args, **kwargs)
@log @log
def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[Playlist]: *args, **kwargs) -> List[Playlist]:
return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs) return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs)
@log @log
def users_playlists_list(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, def users_playlists_list(self, user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[Playlist]: *args, **kwargs) -> List[Playlist]:
if user_id is None and self.me is not None: if user_id is None and self.me is not None:
user_id = self.me.account.uid user_id = self.me.account.uid
@ -1120,7 +1123,7 @@ class Client(YandexMusicObject):
return Playlist.de_list(result, self) return Playlist.de_list(result, self)
def _get_likes(self, object_type: str, user_id: Union[str, int] = None, params: dict = None, def _get_likes(self, object_type: str, user_id: Union[str, int] = None, params: dict = None,
timeout: Union[int, float] = None, *args, **kwargs) \ timeout: Optional[Union[int, float]] = None, *args, **kwargs) \
-> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], TracksList]: -> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], TracksList]:
if user_id is None and self.me is not None: if user_id is None and self.me is not None:
user_id = self.me.account.uid user_id = self.me.account.uid
@ -1135,29 +1138,29 @@ class Client(YandexMusicObject):
return de_list_likes.get(object_type)(result, self) return de_list_likes.get(object_type)(result, self)
@log @log
def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0,
timeout: Union[int, float] = None, *args, **kwargs) -> TracksList: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList:
return self._get_likes('track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout, return self._get_likes('track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout,
*args, **kwargs) *args, **kwargs)
@log @log
def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: Union[int, float] = None, def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[AlbumsLikes]: *args, **kwargs) -> List[AlbumsLikes]:
return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs) return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs)
@log @log
def users_likes_artists(self, user_id: Union[str, int] = None, with_timestamps: bool = True, def users_likes_artists(self, user_id: Union[str, int] = None, with_timestamps: bool = True,
timeout: Union[int, float] = None, *args, **kwargs) -> List[ArtistsLikes]: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[ArtistsLikes]:
return self._get_likes('artist', user_id, {'with-timestamps': with_timestamps}, timeout, *args, **kwargs) return self._get_likes('artist', user_id, {'with-timestamps': with_timestamps}, timeout, *args, **kwargs)
@log @log
def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> List[PlaylistsLikes]: *args, **kwargs) -> List[PlaylistsLikes]:
return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs) return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs)
@log @log
def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0,
timeout: Union[int, float] = None, *args, **kwargs) -> TracksList: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList:
if user_id is None and self.me is not None: if user_id is None and self.me is not None:
user_id = self.me.account.uid user_id = self.me.account.uid
@ -1169,7 +1172,7 @@ class Client(YandexMusicObject):
return TracksList.de_json(result.get('library'), self) return TracksList.de_json(result.get('library'), self)
def _dislike_action(self, ids: Union[List[Union[str, int]], str, int], remove: bool = False, def _dislike_action(self, ids: Union[List[Union[str, int]], str, int], remove: bool = False,
user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
if user_id is None and self.me is not None: if user_id is None and self.me is not None:
user_id = self.me.account.uid user_id = self.me.account.uid
@ -1183,13 +1186,13 @@ class Client(YandexMusicObject):
@log @log
def users_dislikes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], def users_dislikes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs) return self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs)
@log @log
def users_dislikes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int], def users_dislikes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int],
user_id: Union[str, int] = None, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool: timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs) return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs)
# camelCase псевдонимы # camelCase псевдонимы

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class AlbumEvent(YandexMusicObject):
def __init__(self, def __init__(self,
album, album,
tracks, tracks,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.album = album self.album = album
self.tracks = tracks self.tracks = tracks
@ -14,7 +19,7 @@ class AlbumEvent(YandexMusicObject):
self._id_attrs = (self.album, self.tracks) self._id_attrs = (self.album, self.tracks)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -26,7 +31,7 @@ class AlbumEvent(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class ArtistEvent(YandexMusicObject):
artist, artist,
tracks, tracks,
similar_to_artists_from_history, similar_to_artists_from_history,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.artist = artist self.artist = artist
self.tracks = tracks self.tracks = tracks
self.similar_to_artists_from_history = similar_to_artists_from_history self.similar_to_artists_from_history = similar_to_artists_from_history
@ -16,7 +21,7 @@ class ArtistEvent(YandexMusicObject):
self._id_attrs = (self.artist, self.tracks, self.similar_to_artists_from_history) self._id_attrs = (self.artist, self.tracks, self.similar_to_artists_from_history)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -29,7 +34,7 @@ class ArtistEvent(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class Day(YandexMusicObject):
events, events,
tracks_to_play_with_ads, tracks_to_play_with_ads,
tracks_to_play, tracks_to_play,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.day = day self.day = day
self.events = events self.events = events
self.tracks_to_play_with_ads = tracks_to_play_with_ads self.tracks_to_play_with_ads = tracks_to_play_with_ads
@ -18,7 +23,7 @@ class Day(YandexMusicObject):
self._id_attrs = (self.day, self.events, self.tracks_to_play_with_ads, self.tracks_to_play) self._id_attrs = (self.day, self.events, self.tracks_to_play_with_ads, self.tracks_to_play)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -31,7 +36,7 @@ class Day(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -13,8 +18,8 @@ class Event(YandexMusicObject):
message=None, message=None,
device=None, device=None,
tracks_count=None, tracks_count=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.type = type_ self.type = type_
@ -31,7 +36,7 @@ class Event(YandexMusicObject):
self._id_attrs = (self.id, self.type) self._id_attrs = (self.id, self.type)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -44,7 +49,7 @@ class Event(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -11,8 +16,8 @@ class Feed(YandexMusicObject):
today, today,
days, days,
next_revision=None, next_revision=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.can_get_more_events = can_get_more_events self.can_get_more_events = can_get_more_events
self.pumpkin = pumpkin self.pumpkin = pumpkin
self.is_wizard_passed = is_wizard_passed self.is_wizard_passed = is_wizard_passed
@ -27,7 +32,7 @@ class Feed(YandexMusicObject):
self._id_attrs = (self.can_get_more_events, self.generated_playlists, self.headlines, self.today, self.days) self._id_attrs = (self.can_get_more_events, self.generated_playlists, self.headlines, self.today, self.days)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class GeneratedPlaylist(YandexMusicObject):
ready, ready,
notify, notify,
data, data,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.ready = ready self.ready = ready
self.notify = notify self.notify = notify
@ -18,7 +23,7 @@ class GeneratedPlaylist(YandexMusicObject):
self._id_attrs = (self.type, self.ready, self.notify, self.data) self._id_attrs = (self.type, self.ready, self.notify, self.data)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -29,7 +34,7 @@ class GeneratedPlaylist(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class TrackWithAds(YandexMusicObject):
def __init__(self, def __init__(self,
type_, type_,
track, track,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.track = track self.track = track
@ -14,7 +19,7 @@ class TrackWithAds(YandexMusicObject):
self._id_attrs = (self.type, self.track) self._id_attrs = (self.type, self.track)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -25,7 +30,7 @@ class TrackWithAds(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -16,8 +21,8 @@ class Genre(YandexMusicObject):
radio_icon=None, radio_icon=None,
sub_genres=None, sub_genres=None,
hide_in_regions=None, hide_in_regions=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.weight = weight self.weight = weight
self.composer_top = composer_top self.composer_top = composer_top
@ -37,7 +42,7 @@ class Genre(YandexMusicObject):
self._id_attrs = (self.id, self.weight, self.composer_top, self.title, self.images, self.show_in_menu) self._id_attrs = (self.id, self.weight, self.composer_top, self.title, self.images, self.show_in_menu)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -51,7 +56,7 @@ class Genre(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Images(YandexMusicObject):
def __init__(self, def __init__(self,
_208x208=None, _208x208=None,
_300x300=None, _300x300=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self._208x208 = _208x208 self._208x208 = _208x208
self._300x300 = _300x300 self._300x300 = _300x300
@ -31,7 +36,7 @@ class Images(YandexMusicObject):
self.client.request.download(self._300x300, filename) self.client.request.download(self._300x300, filename)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Title(YandexMusicObject):
def __init__(self, def __init__(self,
title, title,
full_title=None, full_title=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.title = title self.title = title
self.full_title = full_title self.full_title = full_title
@ -14,7 +19,7 @@ class Title(YandexMusicObject):
self._id_attrs = (self.title, self.full_title) self._id_attrs = (self.title, self.full_title)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -10,8 +15,8 @@ class Block(YandexMusicObject):
entities, entities,
description=None, description=None,
data=None, data=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.type = type_ self.type = type_
@ -29,7 +34,7 @@ class Block(YandexMusicObject):
return self.entities[item] return self.entities[item]
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -46,7 +51,7 @@ class Block(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject, Promotion, Album, Playlist, MixLink, PlayContext, ChartItem,\ from yandex_music import YandexMusicObject, Promotion, Album, Playlist, MixLink, PlayContext, ChartItem,\
GeneratedPlaylist GeneratedPlaylist
@ -18,8 +23,8 @@ class BlockEntity(YandexMusicObject):
id_, id_,
type_, type_,
data, data,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.type = type_ self.type = type_
@ -29,7 +34,7 @@ class BlockEntity(YandexMusicObject):
self._id_attrs = (self.id, self.type, self.data) self._id_attrs = (self.id, self.type, self.data)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -39,7 +44,7 @@ class BlockEntity(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -8,8 +13,8 @@ class Chart(YandexMusicObject):
listeners, listeners,
shift, shift,
track_id=None, track_id=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.position = position self.position = position
self.progress = progress self.progress = progress
self.listeners = listeners self.listeners = listeners
@ -21,7 +26,7 @@ class Chart(YandexMusicObject):
self._id_attrs = (self.position, self.progress, self.listeners, self.shift, self.track_id) self._id_attrs = (self.position, self.progress, self.listeners, self.shift, self.track_id)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:
@ -43,7 +48,7 @@ class Chart(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
"""Десериализация списка объектов. """Десериализация списка объектов.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class ChartItem(YandexMusicObject):
def __init__(self, def __init__(self,
track, track,
chart, chart,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.track = track self.track = track
self.chart = chart self.chart = chart
@ -14,7 +19,7 @@ class ChartItem(YandexMusicObject):
self._id_attrs = (self.track, self.chart) self._id_attrs = (self.track, self.chart)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -26,7 +31,7 @@ class ChartItem(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class Landing(YandexMusicObject):
pumpkin, pumpkin,
content_id, content_id,
blocks, blocks,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.pumpkin = pumpkin self.pumpkin = pumpkin
self.content_id = content_id self.content_id = content_id
@ -20,7 +25,7 @@ class Landing(YandexMusicObject):
return self.blocks[item] return self.blocks[item]
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -10,8 +15,8 @@ class MixLink(YandexMusicObject):
background_color, background_color,
background_image_uri, background_image_uri,
cover_white, cover_white,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.title = title self.title = title
self.url = url self.url = url
self.url_scheme = url_scheme self.url_scheme = url_scheme
@ -35,7 +40,7 @@ class MixLink(YandexMusicObject):
self.client.request.download(f'https://{self.background_image_uri.replace("%%", size)}', filename) self.client.request.download(f'https://{self.background_image_uri.replace("%%", size)}', filename)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -44,7 +49,7 @@ class MixLink(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,18 +1,23 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
class PersonalPlaylistsData(YandexMusicObject): class PersonalPlaylistsData(YandexMusicObject):
def __init__(self, def __init__(self,
is_wizard_passed, is_wizard_passed,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.is_wizard_passed = is_wizard_passed self.is_wizard_passed = is_wizard_passed
self.client = client self.client = client
self._id_attrs = (self.is_wizard_passed,) self._id_attrs = (self.is_wizard_passed,)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class PlayContext(YandexMusicObject):
context, context,
context_item, context_item,
tracks, tracks,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.client_ = client_ self.client_ = client_
self.context = context self.context = context
self.context_item = context_item self.context_item = context_item
@ -18,7 +23,7 @@ class PlayContext(YandexMusicObject):
self._id_attrs = (self.client_, self.context_item, self.context_item, self.tracks) self._id_attrs = (self.client_, self.context_item, self.context_item, self.tracks)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,18 +1,23 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
class PlayContextsData(YandexMusicObject): class PlayContextsData(YandexMusicObject):
def __init__(self, def __init__(self,
other_tracks, other_tracks,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.other_tracks = other_tracks self.other_tracks = other_tracks
self.client = client self.client = client
self._id_attrs = (self.other_tracks,) self._id_attrs = (self.other_tracks,)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -12,8 +17,8 @@ class Promotion(YandexMusicObject):
text_color, text_color,
gradient, gradient,
image, image,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.promo_id = promo_id self.promo_id = promo_id
self.title = title self.title = title
self.subtitle = subtitle self.subtitle = subtitle
@ -29,7 +34,7 @@ class Promotion(YandexMusicObject):
self.url, self.url_scheme, self.text_color, self.gradient, self.image) self.url, self.url_scheme, self.text_color, self.gradient, self.image)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -38,7 +43,7 @@ class Promotion(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class TrackId(YandexMusicObject):
def __init__(self, def __init__(self,
id_, id_,
album_id=None, album_id=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.album_id = album_id self.album_id = album_id
@ -14,7 +19,7 @@ class TrackId(YandexMusicObject):
self._id_attrs = (self.id, self.album_id) self._id_attrs = (self.id, self.album_id)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class TrackShortOld(YandexMusicObject):
def __init__(self, def __init__(self,
track_id, track_id,
timestamp, timestamp,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.track_id = track_id self.track_id = track_id
self.timestamp = timestamp self.timestamp = timestamp
@ -14,7 +19,7 @@ class TrackShortOld(YandexMusicObject):
self._id_attrs = (self.track_id,) self._id_attrs = (self.track_id,)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -25,7 +30,7 @@ class TrackShortOld(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class AlbumsLikes(YandexMusicObject):
timestamp, timestamp,
id_=None, id_=None,
album=None, album=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.album = album self.album = album
self.timestamp = timestamp self.timestamp = timestamp
@ -16,7 +21,7 @@ class AlbumsLikes(YandexMusicObject):
self._id_attrs = (self.id, self.album) self._id_attrs = (self.id, self.album)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -27,7 +32,7 @@ class AlbumsLikes(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class ArtistsLikes(YandexMusicObject):
id_=None, id_=None,
artist=None, artist=None,
timestamp=None, timestamp=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.artist = artist self.artist = artist
self.timestamp = timestamp self.timestamp = timestamp
@ -16,7 +21,7 @@ class ArtistsLikes(YandexMusicObject):
self._id_attrs = (self.id, self.artist) self._id_attrs = (self.id, self.artist)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -32,7 +37,7 @@ class ArtistsLikes(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class PlaylistsLikes(YandexMusicObject):
timestamp, timestamp,
id_=None, id_=None,
playlist=None, playlist=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.playlist = playlist self.playlist = playlist
self.timestamp = timestamp self.timestamp = timestamp
@ -16,7 +21,7 @@ class PlaylistsLikes(YandexMusicObject):
self._id_attrs = (self.id, self.playlist) self._id_attrs = (self.id, self.playlist)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -27,7 +32,7 @@ class PlaylistsLikes(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -9,8 +14,8 @@ class CaseForms(YandexMusicObject):
accusative, accusative,
instrumental, instrumental,
prepositional, prepositional,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.nominative = nominative self.nominative = nominative
self.genitive = genitive self.genitive = genitive
self.dative = dative self.dative = dative
@ -23,7 +28,7 @@ class CaseForms(YandexMusicObject):
self.accusative, self.instrumental, self.prepositional) self.accusative, self.instrumental, self.prepositional)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class MadeFor(YandexMusicObject):
def __init__(self, def __init__(self,
user_info, user_info,
case_forms, case_forms,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.user_info = user_info self.user_info = user_info
self.case_forms = case_forms self.case_forms = case_forms
@ -14,7 +19,7 @@ class MadeFor(YandexMusicObject):
self._id_attrs = (self.user_info, self.case_forms) self._id_attrs = (self.user_info, self.case_forms)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class PlayCounter(YandexMusicObject):
value, value,
description, description,
updated, updated,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.value = value self.value = value
self.description = description self.description = description
self.updated = updated self.updated = updated
@ -16,7 +21,7 @@ class PlayCounter(YandexMusicObject):
self._id_attrs = (self.value, self.description, self.updated) self._id_attrs = (self.value, self.description, self.updated)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,13 +1,18 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client, User, Cover, MadeFor, TrackShort, PlaylistAbsence, PlayCounter
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
class Playlist(YandexMusicObject): class Playlist(YandexMusicObject):
def __init__(self, def __init__(self,
owner, owner: Optional['User'],
cover, cover: Optional['Cover'],
made_for, made_for: Optional['MadeFor'],
play_counter, play_counter: Optional['PlayCounter'],
playlist_absence, playlist_absence: Optional['PlaylistAbsence'],
uid=None, uid=None,
kind=None, kind=None,
title=None, title=None,
@ -34,8 +39,8 @@ class Playlist(YandexMusicObject):
description_formatted=None, description_formatted=None,
is_for_from=None, is_for_from=None,
regions=None, regions=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.owner = owner self.owner = owner
self.cover = cover self.cover = cover
self.made_for = made_for self.made_for = made_for
@ -73,14 +78,14 @@ class Playlist(YandexMusicObject):
self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence) self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence)
@property @property
def is_mine(self): def is_mine(self) -> bool:
return self.owner.uid == self.client.me.account.uid return self.owner.uid == self.client.me.account.uid
@property @property
def playlist_id(self): def playlist_id(self) -> str:
return f'{self.owner.uid}:{self.kind}' return f'{self.owner.uid}:{self.kind}'
def download_animated_cover(self, filename, size='200x200'): def download_animated_cover(self, filename: str, size: Optional[str] = '200x200') -> None:
"""Загрузка анимированной обложки. """Загрузка анимированной обложки.
Args: Args:
@ -90,7 +95,7 @@ class Playlist(YandexMusicObject):
self.client.request.download(f'https://{self.animated_cover_uri.replace("%%", size)}', filename) self.client.request.download(f'https://{self.animated_cover_uri.replace("%%", size)}', filename)
def download_og_image(self, filename, size='200x200'): def download_og_image(self, filename: str, size: Optional[str] = '200x200') -> None:
"""Загрузка обложки. """Загрузка обложки.
Используйте это только когда нет self.cover! Используйте это только когда нет self.cover!
@ -102,20 +107,20 @@ class Playlist(YandexMusicObject):
self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename) self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename)
def rename(self, name): def rename(self, name: str) -> None:
client, kind = self.client, self.kind client, kind = self.client, self.kind
self.__dict__.clear() self.__dict__.clear()
self.__dict__.update(client.users_playlists_name(kind, name).__dict__) self.__dict__.update(client.users_playlists_name(kind, name).__dict__)
def like(self, *args, **kwargs): def like(self, *args, **kwargs) -> bool:
"""Сокращение для:: """Сокращение для::
client.users_likes_playlists_add(playlist.uid, user.id *args, **kwargs) client.users_likes_playlists_add(playlist.uid, user.id *args, **kwargs)
""" """
return self.client.users_likes_playlists_add(self.uid, self.client.me.account.uid, *args, **kwargs) return self.client.users_likes_playlists_add(self.uid, self.client.me.account.uid, *args, **kwargs)
def dislike(self, *args, **kwargs): def dislike(self, *args, **kwargs) -> bool:
"""Сокращение для:: """Сокращение для::
client.users_likes_playlists_remove(playlist.uid, user.id *args, **kwargs) client.users_likes_playlists_remove(playlist.uid, user.id *args, **kwargs)
@ -123,7 +128,7 @@ class Playlist(YandexMusicObject):
return self.client.users_likes_playlists_remove(self.uid, self.client.me.account.uid, *args, **kwargs) return self.client.users_likes_playlists_remove(self.uid, self.client.me.account.uid, *args, **kwargs)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client') -> Optional['Playlist']:
if not data: if not data:
return None return None
@ -143,7 +148,7 @@ class Playlist(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client') -> List['Playlist']:
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -21,8 +26,8 @@ class PlaylistAbsence(YandexMusicObject):
def __init__(self, def __init__(self,
kind, kind,
reason, reason,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.kind = kind self.kind = kind
self.reason = reason self.reason = reason
@ -30,7 +35,7 @@ class PlaylistAbsence(YandexMusicObject):
self._id_attrs = (self.kind, self.reason) self._id_attrs = (self.kind, self.reason)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class PlaylistId(YandexMusicObject):
def __init__(self, def __init__(self,
uid, uid,
kind, kind,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.uid = uid self.uid = uid
self.kind = kind self.kind = kind
@ -14,7 +19,7 @@ class PlaylistId(YandexMusicObject):
self._id_attrs = (self.uid, self.kind) self._id_attrs = (self.uid, self.kind)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:
@ -34,7 +39,7 @@ class PlaylistId(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
"""Десериализация списка объектов. """Десериализация списка объектов.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -28,8 +33,8 @@ class User(YandexMusicObject):
name, name,
sex, sex,
verified, verified,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.uid = uid self.uid = uid
self.login = login self.login = login
self.name = name self.name = name
@ -50,7 +55,7 @@ class User(YandexMusicObject):
self.client.request.download(f'https://upics.yandex.net/{self.uid}/{format_}', filename) self.client.request.download(f'https://upics.yandex.net/{self.uid}/{format_}', filename)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -11,8 +16,8 @@ class AdParams(YandexMusicObject):
ad_volume, ad_volume,
genre_id=None, genre_id=None,
genre_name=None, genre_name=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.partner_id = partner_id self.partner_id = partner_id
self.category_id = category_id self.category_id = category_id
self.page_ref = page_ref self.page_ref = page_ref
@ -28,7 +33,7 @@ class AdParams(YandexMusicObject):
self.target_ref, self.other_params, self.ad_volume) self.target_ref, self.other_params, self.ad_volume)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class Dashboard(YandexMusicObject):
dashboard_id, dashboard_id,
stations, stations,
pumpkin, pumpkin,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.dashboard_id = dashboard_id self.dashboard_id = dashboard_id
self.stations = stations self.stations = stations
self.pumpkin = pumpkin self.pumpkin = pumpkin
@ -16,7 +21,7 @@ class Dashboard(YandexMusicObject):
self._id_attrs = (self.dashboard_id, self.stations, self.pumpkin) self._id_attrs = (self.dashboard_id, self.stations, self.pumpkin)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client') -> Optional['Dashboard']:
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class DiscreteScale(YandexMusicObject):
name, name,
min_, min_,
max_, max_,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.name = name self.name = name
self.min = min_ self.min = min_
@ -18,7 +23,7 @@ class DiscreteScale(YandexMusicObject):
self._id_attrs = (self.type, self.name, self.min, self.max) self._id_attrs = (self.type, self.name, self.min, self.max)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class Enum(YandexMusicObject):
type_, type_,
name, name,
possible_values, possible_values,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.name = name self.name = name
self.possible_values = possible_values self.possible_values = possible_values
@ -16,7 +21,7 @@ class Enum(YandexMusicObject):
self._id_attrs = (self.type, self.name, self.possible_values) self._id_attrs = (self.type, self.name, self.possible_values)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Id(YandexMusicObject):
def __init__(self, def __init__(self,
type_, type_,
tag, tag,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.tag = tag self.tag = tag
@ -14,7 +19,7 @@ class Id(YandexMusicObject):
self._id_attrs = (self.type, self.tag) self._id_attrs = (self.type, self.tag)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject, Enum, DiscreteScale from yandex_music import YandexMusicObject, Enum, DiscreteScale
@ -14,8 +19,8 @@ class Restrictions(YandexMusicObject):
mood=None, mood=None,
energy=None, energy=None,
mood_energy=None, mood_energy=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.language = language self.language = language
self.diversity = diversity self.diversity = diversity
self.mood = mood self.mood = mood
@ -26,7 +31,7 @@ class Restrictions(YandexMusicObject):
self._id_attrs = (self.language, self.diversity) self._id_attrs = (self.language, self.diversity)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -8,8 +13,8 @@ class RotorSettings(YandexMusicObject):
mood=None, mood=None,
energy=None, energy=None,
mood_energy=None, mood_energy=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.language = language self.language = language
self.diversity = diversity self.diversity = diversity
@ -21,7 +26,7 @@ class RotorSettings(YandexMusicObject):
self._id_attrs = (self.language, self.diversity) self._id_attrs = (self.language, self.diversity)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -6,8 +11,8 @@ class Sequence(YandexMusicObject):
type_, type_,
track, track,
liked, liked,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.track = track self.track = track
self.liked = liked self.liked = liked
@ -16,7 +21,7 @@ class Sequence(YandexMusicObject):
self._id_attrs = (self.type, self.track, self.liked) self._id_attrs = (self.type, self.track, self.liked)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -27,7 +32,7 @@ class Sequence(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -12,8 +17,8 @@ class Station(YandexMusicObject):
restrictions, restrictions,
restrictions2, restrictions2,
parent_id=None, parent_id=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.name = name self.name = name
self.icon = icon self.icon = icon
@ -30,7 +35,7 @@ class Station(YandexMusicObject):
self.id_for_from, self.restrictions, self.restrictions2) self.id_for_from, self.restrictions, self.restrictions2)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -9,8 +14,8 @@ class StationResult(YandexMusicObject):
ad_params, ad_params,
explanation=None, explanation=None,
prerolls=None, prerolls=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.station = station self.station = station
self.settings = settings self.settings = settings
self.settings2 = settings2 self.settings2 = settings2
@ -22,7 +27,7 @@ class StationResult(YandexMusicObject):
self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params) self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -36,7 +41,7 @@ class StationResult(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,14 +1,19 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client, Id, Sequence
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
class StationTracksResult(YandexMusicObject): class StationTracksResult(YandexMusicObject):
def __init__(self, def __init__(self,
id_, id_: Optional['Id'],
sequence, sequence: List['Sequence'],
batch_id, batch_id,
pumpkin, pumpkin,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.sequence = sequence self.sequence = sequence
self.batch_id = batch_id self.batch_id = batch_id
@ -18,7 +23,7 @@ class StationTracksResult(YandexMusicObject):
self._id_attrs = (self.id, self.sequence, self.batch_id, self.pumpkin) self._id_attrs = (self.id, self.sequence, self.batch_id, self.pumpkin)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data, client) -> Optional['StationTracksResult']:
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Value(YandexMusicObject):
def __init__(self, def __init__(self,
value, value,
name, name,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.value = value self.value = value
self.name = name self.name = name
@ -14,7 +19,7 @@ class Value(YandexMusicObject):
self._id_attrs = (self.value, self.name) self._id_attrs = (self.value, self.name)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -23,7 +28,7 @@ class Value(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video
@ -15,8 +20,8 @@ class Best(YandexMusicObject):
type_, type_,
result, result,
text=None, text=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.type = type_ self.type = type_
self.result = result self.result = result
@ -26,7 +31,7 @@ class Best(YandexMusicObject):
self._id_attrs = (self.type, self.result) self._id_attrs = (self.type, self.result)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -45,8 +50,8 @@ class Search(YandexMusicObject):
videos, videos,
misspell_corrected=None, misspell_corrected=None,
nocorrect=None, nocorrect=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.search_request_id = search_request_id self.search_request_id = search_request_id
self.text = text self.text = text
self.best = best self.best = best
@ -64,7 +69,7 @@ class Search(YandexMusicObject):
self.artists, self.playlists, self.tracks, self.videos) self.artists, self.playlists, self.tracks, self.videos)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video
@ -16,8 +21,8 @@ class SearchResult(YandexMusicObject):
per_page, per_page,
order, order,
results, results,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.total = total self.total = total
self.per_page = per_page self.per_page = per_page
self.order = order self.order = order

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client, Best
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Suggestions(YandexMusicObject):
def __init__(self, def __init__(self,
best, best,
suggestions, suggestions,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.best = best self.best = best
self.suggestions = suggestions self.suggestions = suggestions
@ -20,7 +25,7 @@ class Suggestions(YandexMusicObject):
return iter(self.suggestions) return iter(self.suggestions)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client') -> Optional['Suggestions']:
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Major(YandexMusicObject):
def __init__(self, def __init__(self,
id_, id_,
name, name,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.name = name self.name = name
@ -14,7 +19,7 @@ class Major(YandexMusicObject):
self._id_attrs = (self.id, self.name) self._id_attrs = (self.id, self.name)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Normalization(YandexMusicObject):
def __init__(self, def __init__(self,
gain, gain,
peak, peak,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.gain = gain self.gain = gain
self.peak = peak self.peak = peak
@ -14,7 +19,7 @@ class Normalization(YandexMusicObject):
self._id_attrs = (self.gain, self.peak) self._id_attrs = (self.gain, self.peak)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional, List
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -26,8 +31,8 @@ class Track(YandexMusicObject):
explicit=None, explicit=None,
preview_duration_ms=None, preview_duration_ms=None,
available_full_without_permission=None, available_full_without_permission=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.id = id_ self.id = id_
self.title = title self.title = title
self.available = available self.available = available
@ -119,7 +124,7 @@ class Track(YandexMusicObject):
return f'{self.id}' return f'{self.id}'
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None
@ -133,7 +138,7 @@ class Track(YandexMusicObject):
return cls(client=client, **data) return cls(client=client, **data)
@classmethod @classmethod
def de_list(cls, data, client): def de_list(cls, data: dict, client: 'Client'):
if not data: if not data:
return [] return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -27,8 +32,8 @@ class CaptchaResponse(YandexMusicObject):
x_captcha_key, x_captcha_key,
error_description, error_description,
error, error,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.x_captcha_url = x_captcha_url self.x_captcha_url = x_captcha_url
self.x_captcha_key = x_captcha_key self.x_captcha_key = x_captcha_key
self.error_description = error_description self.error_description = error_description
@ -51,7 +56,7 @@ class CaptchaResponse(YandexMusicObject):
self.client.request.download(self.x_captcha_url, filename) self.client.request.download(self.x_captcha_url, filename)
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта. """Десериализация объекта.
Args: Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
@ -8,8 +13,8 @@ class Response(YandexMusicObject):
result=None, result=None,
error=None, error=None,
error_description=None, error_description=None,
client=None, client: Optional['Client'] = None,
**kwargs): **kwargs) -> None:
self.data = data self.data = data
self.invocation_info = invocation_info self.invocation_info = invocation_info
self._result = result self._result = result
@ -27,7 +32,7 @@ class Response(YandexMusicObject):
return self.data if self._result is None else self._result return self.data if self._result is None else self._result
@classmethod @classmethod
def de_json(cls, data, client): def de_json(cls, data: dict, client: 'Client'):
if not data: if not data:
return None return None