Добавлены импорты для тайп хинтов. В каждом конструкторе указан 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
@ -28,8 +33,8 @@ class Album(YandexMusicObject):
type_=None,
track_position=None,
regions=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.title = title
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -121,7 +126,7 @@ class Album(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -19,8 +24,8 @@ class Label(YandexMusicObject):
def __init__(self,
id_,
name,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.name = name
@ -28,7 +33,7 @@ class Label(YandexMusicObject):
self._id_attrs = (self.id, self.name)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
Args:
@ -46,7 +51,7 @@ class Label(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
"""Десериализация списка объектов.
Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class TrackPosition(YandexMusicObject):
def __init__(self,
volume,
index,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.volume = volume
self.index = index
@ -14,7 +19,7 @@ class TrackPosition(YandexMusicObject):
self._id_attrs = (self.volume, self.index)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -28,8 +33,8 @@ class Artist(YandexMusicObject):
aliases=None,
init_date=None,
end_date=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.name = name
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -120,7 +125,7 @@ class Artist(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -21,8 +26,8 @@ class ArtistAlbums(YandexMusicObject):
def __init__(self,
albums,
pager,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.albums = albums
self.pager = pager
@ -30,7 +35,7 @@ class ArtistAlbums(YandexMusicObject):
self._id_attrs = (self.pager, self.albums)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
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
@ -21,8 +26,8 @@ class ArtistTracks(YandexMusicObject):
def __init__(self,
tracks,
pager,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.tracks = tracks
self.pager = pager
@ -30,7 +35,7 @@ class ArtistTracks(YandexMusicObject):
self._id_attrs = (self.pager, self.tracks)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
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
@ -16,8 +21,8 @@ class BriefInfo(YandexMusicObject):
has_promotions,
playlist_ids,
tracks_in_chart=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.artist = artist
self.albums = albums
self.also_albums = also_albums
@ -39,7 +44,7 @@ class BriefInfo(YandexMusicObject):
self.has_promotions, self.playlist_ids)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
Args:

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -7,8 +12,8 @@ class Counts(YandexMusicObject):
direct_albums,
also_albums,
also_tracks,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.tracks = tracks
self.direct_albums = direct_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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class Description(YandexMusicObject):
def __init__(self,
text,
url,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.text = text
self.url = url
@ -14,7 +19,7 @@ class Description(YandexMusicObject):
self._id_attrs = (self.text, self.url)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
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
@ -7,8 +12,8 @@ class Link(YandexMusicObject):
href,
type_,
social_network=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.title = title
self.href = href
self.type = type_
@ -19,7 +24,7 @@ class Link(YandexMusicObject):
self._id_attrs = (self.title, self.href, self.type)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -28,7 +33,7 @@ class Link(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

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

ファイルの表示

@ -1,7 +1,7 @@
import logging
import functools
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, \
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
@ -70,8 +70,8 @@ class Client(YandexMusicObject):
:class:`yandex_music.utils.request.Request`.
"""
def __init__(self, token: str = None, fetch_account_status: bool = True, base_url: str = None,
oauth_url: str = None, request: Request = None) -> None:
def __init__(self, token: Optional[str] = None, fetch_account_status: bool = True, base_url: Optional[str] = None,
oauth_url: Optional[str] = None, request: Request = None) -> None:
self.logger = logging.getLogger(__name__)
self.token = token
@ -94,7 +94,7 @@ class Client(YandexMusicObject):
self.me = self.account_status()
@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':
"""Инициализция клиента по логину и паролю.
@ -151,8 +151,8 @@ class Client(YandexMusicObject):
@log
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,
timeout: Union[int, float] = None, *args, **kwargs) -> str:
x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> str:
"""Метод получения OAuth токена по логину и паролю.
Args:
@ -217,7 +217,7 @@ class Client(YandexMusicObject):
return self._request
@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:
@ -240,7 +240,7 @@ class Client(YandexMusicObject):
return Status.de_json(result, self)
@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:
@ -263,7 +263,7 @@ class Client(YandexMusicObject):
return Settings.de_json(result, self)
@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:
@ -286,7 +286,7 @@ class Client(YandexMusicObject):
return PermissionAlerts.de_json(result, self)
@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:
@ -309,7 +309,7 @@ class Client(YandexMusicObject):
return Experiments.de_json(result, self)
@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:
"""Активация промо-кода.
@ -335,7 +335,7 @@ class Client(YandexMusicObject):
return PromoCodeStatus.de_json(result, self)
@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:
@ -358,7 +358,7 @@ class Client(YandexMusicObject):
return Feed.de_json(result, self)
@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'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -366,7 +366,7 @@ class Client(YandexMusicObject):
return result.get('is_wizard_passed') or False
@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,
@ -393,7 +393,7 @@ class Client(YandexMusicObject):
return Landing.de_json(result, self)
@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:
@ -417,7 +417,7 @@ class Client(YandexMusicObject):
@log
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:
@ -442,7 +442,7 @@ class Client(YandexMusicObject):
return DownloadInfo.de_list(result, self, get_direct_links)
@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:
"""Получение дополнительной информации о треке.
@ -469,16 +469,16 @@ class Client(YandexMusicObject):
track_id: Union[str, int],
from_: str,
album_id: Union[str, int],
playlist_id: str = None,
playlist_id: Optional[str] = None,
from_cache: bool = False,
play_id: str = None,
uid: int = None,
timestamp: str = None,
track_length_seconds: int = 0,
total_played_seconds: int = 0,
end_position_seconds: int = 0,
client_now: str = None,
timeout: Union[int, float] = None,
play_id: Optional[str] = None,
uid: Optional[int] = None,
timestamp: Optional[str] = None,
track_length_seconds: Optional[int] = 0,
total_played_seconds: Optional[int] = 0,
end_position_seconds: Optional[int] = 0,
client_now: Optional[str] = None,
timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> bool:
"""Метод для отправки текущего состояния прослушиваемого трека.
@ -530,7 +530,7 @@ class Client(YandexMusicObject):
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:
"""Получение альбома по его уникальному идентификатору вместе с треками.
@ -559,9 +559,9 @@ class Client(YandexMusicObject):
text: str,
nocorrect: bool = False,
type_: str = 'all',
page: int = 0,
page: Optional[int] = 0,
playlist_in_best: bool = True,
timeout: Union[int, float] = None,
timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Search:
"""Осуществление поиска по запросу и типу, получение результатов.
@ -598,7 +598,8 @@ class Client(YandexMusicObject):
return Search.de_json(result, self)
@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:
@ -622,8 +623,8 @@ class Client(YandexMusicObject):
return Suggestions.de_json(result, self)
@log
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]:
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]:
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
Args:
@ -656,8 +657,8 @@ class Client(YandexMusicObject):
return Playlist.de_list(result, self)
@log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
"""Создание плейлиста.
Args:
@ -691,8 +692,8 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_delete(self, kind: Union[str, int], user_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
def users_playlists_delete(self, kind: Union[str, int], user_id: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
"""Удаление плейлиста.
Args:
@ -719,8 +720,8 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
"""Изменение названия плейлиста.
Args:
@ -749,8 +750,8 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Optional[Playlist]:
"""Изменение плейлиста.
Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`.
@ -790,8 +791,8 @@ class Client(YandexMusicObject):
@log
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,
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
at: Optional[int] = 0, revision: int = 1, user_id: Optional[str] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
"""Добавление трека в плейлист.
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at).
@ -824,7 +825,7 @@ class Client(YandexMusicObject):
@log
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:
"""Удаление треков из плейлиста.
@ -856,7 +857,7 @@ class Client(YandexMusicObject):
return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs)
@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'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -864,7 +865,8 @@ class Client(YandexMusicObject):
return Status.de_json(result, self)
@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'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -872,7 +874,7 @@ class Client(YandexMusicObject):
return Dashboard.de_json(result, self)
@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]:
url = f'{self.base_url}/rotor/stations/list'
@ -881,9 +883,10 @@ class Client(YandexMusicObject):
return StationResult.de_list(result, self)
@log
def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: int = None, from_: str = None,
batch_id: Union[str, int] = None, track_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: Optional[int] = None,
from_: Optional[str] = None, batch_id: Union[str, int] = None,
track_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> bool:
if timestamp is None:
timestamp = datetime.now().timestamp()
@ -907,19 +910,19 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: int = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: Optional[int] = None,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs)
@log
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:
return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
timeout=timeout, *args, **kwargs)
@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]:
url = f'{self.base_url}/rotor/station/genre:{genre}/info'
@ -928,8 +931,8 @@ class Client(YandexMusicObject):
return StationResult.de_list(result, self)
@log
def rotor_station_genre_tracks(self, genre: str, timeout: Union[int, float] = None,
*args, **kwargs) -> StationTracksResult:
def rotor_station_genre_tracks(self, genre: str, timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> Optional[StationTracksResult]:
url = f'{self.base_url}/rotor/station/genre:{genre}/tracks'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
@ -937,7 +940,7 @@ class Client(YandexMusicObject):
return StationTracksResult.de_json(result, self)
@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:
url = f'{self.base_url}/artists/{artist_id}/brief-info'
@ -946,8 +949,8 @@ class Client(YandexMusicObject):
return BriefInfo.de_json(result, self)
@log
def artists_tracks(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20,
timeout: Union[int, float] = None, *args, **kwargs) -> ArtistTracks:
def artists_tracks(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> ArtistTracks:
"""Получение треков артиста.
Args:
@ -978,8 +981,8 @@ class Client(YandexMusicObject):
return ArtistTracks.de_json(result, self)
@log
def artists_direct_albums(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20,
sort_by: str = 'year', timeout: Union[int, float] = None,
def artists_direct_albums(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20,
sort_by: str = 'year', timeout: Optional[Union[int, float]] = None,
*args, **kwargs) -> ArtistAlbums:
"""Получение альбомов артиста.
@ -1015,7 +1018,7 @@ class Client(YandexMusicObject):
return ArtistAlbums.de_json(result, self)
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:
user_id = self.me.account.uid
@ -1031,51 +1034,51 @@ class Client(YandexMusicObject):
@log
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)
@log
def users_likes_tracks_remove(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, True, user_id, timeout, *args, **kwargs)
@log
def users_likes_artists_add(self, artist_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('artist', artist_ids, False, user_id, timeout, *args, **kwargs)
def users_likes_artists_remove(self, artist_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('artist', artist_ids, True, user_id, timeout, *args, **kwargs)
@log
def users_likes_playlists_add(self, playlist_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('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs)
@log
def users_likes_playlists_remove(self, playlist_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('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs)
@log
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)
@log
def users_likes_albums_remove(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, True, user_id, timeout, *args, **kwargs)
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]]:
if params is None:
params = {}
@ -1088,27 +1091,27 @@ class Client(YandexMusicObject):
return de_list.get(object_type)(result, self)
@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]:
return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs)
@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]:
return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs)
@log
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)
@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]:
return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs)
@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]:
if user_id is None and self.me is not None:
user_id = self.me.account.uid
@ -1120,7 +1123,7 @@ class Client(YandexMusicObject):
return Playlist.de_list(result, self)
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]:
if user_id is None and self.me is not None:
user_id = self.me.account.uid
@ -1135,29 +1138,29 @@ class Client(YandexMusicObject):
return de_list_likes.get(object_type)(result, self)
@log
def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0,
timeout: Union[int, float] = None, *args, **kwargs) -> TracksList:
def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0,
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,
*args, **kwargs)
@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]:
return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs)
@log
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)
@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]:
return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs)
@log
def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0,
timeout: Union[int, float] = None, *args, **kwargs) -> TracksList:
def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0,
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList:
if user_id is None and self.me is not None:
user_id = self.me.account.uid
@ -1169,7 +1172,7 @@ class Client(YandexMusicObject):
return TracksList.de_json(result.get('library'), self)
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:
user_id = self.me.account.uid
@ -1183,13 +1186,13 @@ class Client(YandexMusicObject):
@log
def users_dislikes_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._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs)
@log
def users_dislikes_tracks_remove(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._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs)
# 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
@ -5,8 +10,8 @@ class AlbumEvent(YandexMusicObject):
def __init__(self,
album,
tracks,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.album = album
self.tracks = tracks
@ -14,7 +19,7 @@ class AlbumEvent(YandexMusicObject):
self._id_attrs = (self.album, self.tracks)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -26,7 +31,7 @@ class AlbumEvent(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class ArtistEvent(YandexMusicObject):
artist,
tracks,
similar_to_artists_from_history,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.artist = artist
self.tracks = tracks
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -29,7 +34,7 @@ class ArtistEvent(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -7,8 +12,8 @@ class Day(YandexMusicObject):
events,
tracks_to_play_with_ads,
tracks_to_play,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.day = day
self.events = events
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -31,7 +36,7 @@ class Day(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -13,8 +18,8 @@ class Event(YandexMusicObject):
message=None,
device=None,
tracks_count=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.type = type_
@ -31,7 +36,7 @@ class Event(YandexMusicObject):
self._id_attrs = (self.id, self.type)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -44,7 +49,7 @@ class Event(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -11,8 +16,8 @@ class Feed(YandexMusicObject):
today,
days,
next_revision=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.can_get_more_events = can_get_more_events
self.pumpkin = pumpkin
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -7,8 +12,8 @@ class GeneratedPlaylist(YandexMusicObject):
ready,
notify,
data,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.ready = ready
self.notify = notify
@ -18,7 +23,7 @@ class GeneratedPlaylist(YandexMusicObject):
self._id_attrs = (self.type, self.ready, self.notify, self.data)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -29,7 +34,7 @@ class GeneratedPlaylist(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class TrackWithAds(YandexMusicObject):
def __init__(self,
type_,
track,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.track = track
@ -14,7 +19,7 @@ class TrackWithAds(YandexMusicObject):
self._id_attrs = (self.type, self.track)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -25,7 +30,7 @@ class TrackWithAds(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -16,8 +21,8 @@ class Genre(YandexMusicObject):
radio_icon=None,
sub_genres=None,
hide_in_regions=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.weight = weight
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -51,7 +56,7 @@ class Genre(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class Images(YandexMusicObject):
def __init__(self,
_208x208=None,
_300x300=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self._208x208 = _208x208
self._300x300 = _300x300
@ -31,7 +36,7 @@ class Images(YandexMusicObject):
self.client.request.download(self._300x300, filename)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class Title(YandexMusicObject):
def __init__(self,
title,
full_title=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.title = title
self.full_title = full_title
@ -14,7 +19,7 @@ class Title(YandexMusicObject):
self._id_attrs = (self.title, self.full_title)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -10,8 +15,8 @@ class Block(YandexMusicObject):
entities,
description=None,
data=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.type = type_
@ -29,7 +34,7 @@ class Block(YandexMusicObject):
return self.entities[item]
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -46,7 +51,7 @@ class Block(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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,\
GeneratedPlaylist
@ -18,8 +23,8 @@ class BlockEntity(YandexMusicObject):
id_,
type_,
data,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.type = type_
@ -29,7 +34,7 @@ class BlockEntity(YandexMusicObject):
self._id_attrs = (self.id, self.type, self.data)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -39,7 +44,7 @@ class BlockEntity(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -8,8 +13,8 @@ class Chart(YandexMusicObject):
listeners,
shift,
track_id=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.position = position
self.progress = progress
self.listeners = listeners
@ -21,7 +26,7 @@ class Chart(YandexMusicObject):
self._id_attrs = (self.position, self.progress, self.listeners, self.shift, self.track_id)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
Args:
@ -43,7 +48,7 @@ class Chart(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
"""Десериализация списка объектов.
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
@ -5,8 +10,8 @@ class ChartItem(YandexMusicObject):
def __init__(self,
track,
chart,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.track = track
self.chart = chart
@ -14,7 +19,7 @@ class ChartItem(YandexMusicObject):
self._id_attrs = (self.track, self.chart)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -26,7 +31,7 @@ class ChartItem(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class Landing(YandexMusicObject):
pumpkin,
content_id,
blocks,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.pumpkin = pumpkin
self.content_id = content_id
@ -20,7 +25,7 @@ class Landing(YandexMusicObject):
return self.blocks[item]
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -10,8 +15,8 @@ class MixLink(YandexMusicObject):
background_color,
background_image_uri,
cover_white,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.title = title
self.url = url
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -44,7 +49,7 @@ class MixLink(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

@ -1,18 +1,23 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
class PersonalPlaylistsData(YandexMusicObject):
def __init__(self,
is_wizard_passed,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.is_wizard_passed = is_wizard_passed
self.client = client
self._id_attrs = (self.is_wizard_passed,)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -7,8 +12,8 @@ class PlayContext(YandexMusicObject):
context,
context_item,
tracks,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.client_ = client_
self.context = context
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)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
class PlayContextsData(YandexMusicObject):
def __init__(self,
other_tracks,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.other_tracks = other_tracks
self.client = client
self._id_attrs = (self.other_tracks,)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -12,8 +17,8 @@ class Promotion(YandexMusicObject):
text_color,
gradient,
image,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.promo_id = promo_id
self.title = title
self.subtitle = subtitle
@ -29,7 +34,7 @@ class Promotion(YandexMusicObject):
self.url, self.url_scheme, self.text_color, self.gradient, self.image)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -38,7 +43,7 @@ class Promotion(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -5,8 +10,8 @@ class TrackId(YandexMusicObject):
def __init__(self,
id_,
album_id=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.album_id = album_id
@ -14,7 +19,7 @@ class TrackId(YandexMusicObject):
self._id_attrs = (self.id, self.album_id)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class TrackShortOld(YandexMusicObject):
def __init__(self,
track_id,
timestamp,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.track_id = track_id
self.timestamp = timestamp
@ -14,7 +19,7 @@ class TrackShortOld(YandexMusicObject):
self._id_attrs = (self.track_id,)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -25,7 +30,7 @@ class TrackShortOld(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class AlbumsLikes(YandexMusicObject):
timestamp,
id_=None,
album=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.album = album
self.timestamp = timestamp
@ -16,7 +21,7 @@ class AlbumsLikes(YandexMusicObject):
self._id_attrs = (self.id, self.album)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -27,7 +32,7 @@ class AlbumsLikes(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class ArtistsLikes(YandexMusicObject):
id_=None,
artist=None,
timestamp=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.artist = artist
self.timestamp = timestamp
@ -16,7 +21,7 @@ class ArtistsLikes(YandexMusicObject):
self._id_attrs = (self.id, self.artist)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -32,7 +37,7 @@ class ArtistsLikes(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class PlaylistsLikes(YandexMusicObject):
timestamp,
id_=None,
playlist=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.playlist = playlist
self.timestamp = timestamp
@ -16,7 +21,7 @@ class PlaylistsLikes(YandexMusicObject):
self._id_attrs = (self.id, self.playlist)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -27,7 +32,7 @@ class PlaylistsLikes(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -9,8 +14,8 @@ class CaseForms(YandexMusicObject):
accusative,
instrumental,
prepositional,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.nominative = nominative
self.genitive = genitive
self.dative = dative
@ -23,7 +28,7 @@ class CaseForms(YandexMusicObject):
self.accusative, self.instrumental, self.prepositional)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class MadeFor(YandexMusicObject):
def __init__(self,
user_info,
case_forms,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.user_info = user_info
self.case_forms = case_forms
@ -14,7 +19,7 @@ class MadeFor(YandexMusicObject):
self._id_attrs = (self.user_info, self.case_forms)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class PlayCounter(YandexMusicObject):
value,
description,
updated,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.value = value
self.description = description
self.updated = updated
@ -16,7 +21,7 @@ class PlayCounter(YandexMusicObject):
self._id_attrs = (self.value, self.description, self.updated)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
class Playlist(YandexMusicObject):
def __init__(self,
owner,
cover,
made_for,
play_counter,
playlist_absence,
owner: Optional['User'],
cover: Optional['Cover'],
made_for: Optional['MadeFor'],
play_counter: Optional['PlayCounter'],
playlist_absence: Optional['PlaylistAbsence'],
uid=None,
kind=None,
title=None,
@ -34,8 +39,8 @@ class Playlist(YandexMusicObject):
description_formatted=None,
is_for_from=None,
regions=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.owner = owner
self.cover = cover
self.made_for = made_for
@ -73,14 +78,14 @@ class Playlist(YandexMusicObject):
self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence)
@property
def is_mine(self):
def is_mine(self) -> bool:
return self.owner.uid == self.client.me.account.uid
@property
def playlist_id(self):
def playlist_id(self) -> str:
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:
@ -90,7 +95,7 @@ class Playlist(YandexMusicObject):
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!
@ -102,20 +107,20 @@ class Playlist(YandexMusicObject):
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
self.__dict__.clear()
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)
"""
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)
@ -123,7 +128,7 @@ class Playlist(YandexMusicObject):
return self.client.users_likes_playlists_remove(self.uid, self.client.me.account.uid, *args, **kwargs)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client') -> Optional['Playlist']:
if not data:
return None
@ -143,7 +148,7 @@ class Playlist(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client') -> List['Playlist']:
if not data:
return []

ファイルの表示

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

ファイルの表示

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

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -11,8 +16,8 @@ class AdParams(YandexMusicObject):
ad_volume,
genre_id=None,
genre_name=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.partner_id = partner_id
self.category_id = category_id
self.page_ref = page_ref
@ -28,7 +33,7 @@ class AdParams(YandexMusicObject):
self.target_ref, self.other_params, self.ad_volume)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class Dashboard(YandexMusicObject):
dashboard_id,
stations,
pumpkin,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.dashboard_id = dashboard_id
self.stations = stations
self.pumpkin = pumpkin
@ -16,7 +21,7 @@ class Dashboard(YandexMusicObject):
self._id_attrs = (self.dashboard_id, self.stations, self.pumpkin)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client') -> Optional['Dashboard']:
if not data:
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
@ -7,8 +12,8 @@ class DiscreteScale(YandexMusicObject):
name,
min_,
max_,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.name = name
self.min = min_
@ -18,7 +23,7 @@ class DiscreteScale(YandexMusicObject):
self._id_attrs = (self.type, self.name, self.min, self.max)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class Enum(YandexMusicObject):
type_,
name,
possible_values,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.name = name
self.possible_values = possible_values
@ -16,7 +21,7 @@ class Enum(YandexMusicObject):
self._id_attrs = (self.type, self.name, self.possible_values)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class Id(YandexMusicObject):
def __init__(self,
type_,
tag,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.tag = tag
@ -14,7 +19,7 @@ class Id(YandexMusicObject):
self._id_attrs = (self.type, self.tag)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -14,8 +19,8 @@ class Restrictions(YandexMusicObject):
mood=None,
energy=None,
mood_energy=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.language = language
self.diversity = diversity
self.mood = mood
@ -26,7 +31,7 @@ class Restrictions(YandexMusicObject):
self._id_attrs = (self.language, self.diversity)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -8,8 +13,8 @@ class RotorSettings(YandexMusicObject):
mood=None,
energy=None,
mood_energy=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.language = language
self.diversity = diversity
@ -21,7 +26,7 @@ class RotorSettings(YandexMusicObject):
self._id_attrs = (self.language, self.diversity)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -6,8 +11,8 @@ class Sequence(YandexMusicObject):
type_,
track,
liked,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.track = track
self.liked = liked
@ -16,7 +21,7 @@ class Sequence(YandexMusicObject):
self._id_attrs = (self.type, self.track, self.liked)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -27,7 +32,7 @@ class Sequence(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

@ -1,3 +1,8 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
@ -12,8 +17,8 @@ class Station(YandexMusicObject):
restrictions,
restrictions2,
parent_id=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.name = name
self.icon = icon
@ -30,7 +35,7 @@ class Station(YandexMusicObject):
self.id_for_from, self.restrictions, self.restrictions2)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -9,8 +14,8 @@ class StationResult(YandexMusicObject):
ad_params,
explanation=None,
prerolls=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.station = station
self.settings = settings
self.settings2 = settings2
@ -22,7 +27,7 @@ class StationResult(YandexMusicObject):
self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -36,7 +41,7 @@ class StationResult(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
class StationTracksResult(YandexMusicObject):
def __init__(self,
id_,
sequence,
id_: Optional['Id'],
sequence: List['Sequence'],
batch_id,
pumpkin,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.sequence = sequence
self.batch_id = batch_id
@ -18,7 +23,7 @@ class StationTracksResult(YandexMusicObject):
self._id_attrs = (self.id, self.sequence, self.batch_id, self.pumpkin)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data, client) -> Optional['StationTracksResult']:
if not data:
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
@ -5,8 +10,8 @@ class Value(YandexMusicObject):
def __init__(self,
value,
name,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.value = value
self.name = name
@ -14,7 +19,7 @@ class Value(YandexMusicObject):
self._id_attrs = (self.value, self.name)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -23,7 +28,7 @@ class Value(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
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
@ -15,8 +20,8 @@ class Best(YandexMusicObject):
type_,
result,
text=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.type = type_
self.result = result
@ -26,7 +31,7 @@ class Best(YandexMusicObject):
self._id_attrs = (self.type, self.result)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -45,8 +50,8 @@ class Search(YandexMusicObject):
videos,
misspell_corrected=None,
nocorrect=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.search_request_id = search_request_id
self.text = text
self.best = best
@ -64,7 +69,7 @@ class Search(YandexMusicObject):
self.artists, self.playlists, self.tracks, self.videos)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
"""Десериализация объекта.
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
@ -16,8 +21,8 @@ class SearchResult(YandexMusicObject):
per_page,
order,
results,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.total = total
self.per_page = per_page
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
@ -5,8 +10,8 @@ class Suggestions(YandexMusicObject):
def __init__(self,
best,
suggestions,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.best = best
self.suggestions = suggestions
@ -20,7 +25,7 @@ class Suggestions(YandexMusicObject):
return iter(self.suggestions)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client') -> Optional['Suggestions']:
if not data:
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
@ -5,8 +10,8 @@ class Major(YandexMusicObject):
def __init__(self,
id_,
name,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.name = name
@ -14,7 +19,7 @@ class Major(YandexMusicObject):
self._id_attrs = (self.id, self.name)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -5,8 +10,8 @@ class Normalization(YandexMusicObject):
def __init__(self,
gain,
peak,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.gain = gain
self.peak = peak
@ -14,7 +19,7 @@ class Normalization(YandexMusicObject):
self._id_attrs = (self.gain, self.peak)
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
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
@ -26,8 +31,8 @@ class Track(YandexMusicObject):
explicit=None,
preview_duration_ms=None,
available_full_without_permission=None,
client=None,
**kwargs):
client: Optional['Client'] = None,
**kwargs) -> None:
self.id = id_
self.title = title
self.available = available
@ -119,7 +124,7 @@ class Track(YandexMusicObject):
return f'{self.id}'
@classmethod
def de_json(cls, data, client):
def de_json(cls, data: dict, client: 'Client'):
if not data:
return None
@ -133,7 +138,7 @@ class Track(YandexMusicObject):
return cls(client=client, **data)
@classmethod
def de_list(cls, data, client):
def de_list(cls, data: dict, client: 'Client'):
if not data:
return []

ファイルの表示

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

ファイルの表示

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