Добавлены импорты для тайп хинтов. В каждом конструкторе указан Client, сигнатура de_json и de_list, возвращаемый тип конструтора.
Добавлена опциональность аргументов в методах Client'a
このコミットが含まれているのは:
コミット
7575445403
|
@ -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
|
||||
|
||||
|
|
読み込み中…
新しいイシューから参照