Добавлены импорты для тайп хинтов. В каждом конструкторе указан 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
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,8 +33,8 @@ class Album(YandexMusicObject):
|
||||||
type_=None,
|
type_=None,
|
||||||
track_position=None,
|
track_position=None,
|
||||||
regions=None,
|
regions=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.title = title
|
self.title = title
|
||||||
self.track_count = track_count
|
self.track_count = track_count
|
||||||
|
@ -106,7 +111,7 @@ class Album(YandexMusicObject):
|
||||||
return self.client.users_likes_albums_remove(self.id, self.client.me.account.uid, *args, **kwargs)
|
return self.client.users_likes_albums_remove(self.id, self.client.me.account.uid, *args, **kwargs)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -121,7 +126,7 @@ class Album(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,8 +24,8 @@ class Label(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
id_,
|
id_,
|
||||||
name,
|
name,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
|
@ -28,7 +33,7 @@ class Label(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.name)
|
self._id_attrs = (self.id, self.name)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -46,7 +51,7 @@ class Label(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация списка объектов.
|
"""Десериализация списка объектов.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class TrackPosition(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
volume,
|
volume,
|
||||||
index,
|
index,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.volume = volume
|
self.volume = volume
|
||||||
self.index = index
|
self.index = index
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class TrackPosition(YandexMusicObject):
|
||||||
self._id_attrs = (self.volume, self.index)
|
self._id_attrs = (self.volume, self.index)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,8 +33,8 @@ class Artist(YandexMusicObject):
|
||||||
aliases=None,
|
aliases=None,
|
||||||
init_date=None,
|
init_date=None,
|
||||||
end_date=None,
|
end_date=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.name = name
|
self.name = name
|
||||||
self.cover = cover
|
self.cover = cover
|
||||||
|
@ -103,7 +108,7 @@ class Artist(YandexMusicObject):
|
||||||
return self.client.artists_direct_albums(self.id, page, page_size, sort_by, *args, **kwargs)
|
return self.client.artists_direct_albums(self.id, page, page_size, sort_by, *args, **kwargs)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -120,7 +125,7 @@ class Artist(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,8 +26,8 @@ class ArtistAlbums(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
albums,
|
albums,
|
||||||
pager,
|
pager,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.albums = albums
|
self.albums = albums
|
||||||
self.pager = pager
|
self.pager = pager
|
||||||
|
|
||||||
|
@ -30,7 +35,7 @@ class ArtistAlbums(YandexMusicObject):
|
||||||
self._id_attrs = (self.pager, self.albums)
|
self._id_attrs = (self.pager, self.albums)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,8 +26,8 @@ class ArtistTracks(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
tracks,
|
tracks,
|
||||||
pager,
|
pager,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.tracks = tracks
|
self.tracks = tracks
|
||||||
self.pager = pager
|
self.pager = pager
|
||||||
|
|
||||||
|
@ -30,7 +35,7 @@ class ArtistTracks(YandexMusicObject):
|
||||||
self._id_attrs = (self.pager, self.tracks)
|
self._id_attrs = (self.pager, self.tracks)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,8 +21,8 @@ class BriefInfo(YandexMusicObject):
|
||||||
has_promotions,
|
has_promotions,
|
||||||
playlist_ids,
|
playlist_ids,
|
||||||
tracks_in_chart=None,
|
tracks_in_chart=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.artist = artist
|
self.artist = artist
|
||||||
self.albums = albums
|
self.albums = albums
|
||||||
self.also_albums = also_albums
|
self.also_albums = also_albums
|
||||||
|
@ -39,7 +44,7 @@ class BriefInfo(YandexMusicObject):
|
||||||
self.has_promotions, self.playlist_ids)
|
self.has_promotions, self.playlist_ids)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +12,8 @@ class Counts(YandexMusicObject):
|
||||||
direct_albums,
|
direct_albums,
|
||||||
also_albums,
|
also_albums,
|
||||||
also_tracks,
|
also_tracks,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.tracks = tracks
|
self.tracks = tracks
|
||||||
self.direct_albums = direct_albums
|
self.direct_albums = direct_albums
|
||||||
self.also_albums = also_albums
|
self.also_albums = also_albums
|
||||||
|
@ -18,7 +23,7 @@ class Counts(YandexMusicObject):
|
||||||
self._id_attrs = (self.tracks, self.direct_albums, self.also_albums, self.also_tracks)
|
self._id_attrs = (self.tracks, self.direct_albums, self.also_albums, self.also_tracks)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Description(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
text,
|
text,
|
||||||
url,
|
url,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.text = text
|
self.text = text
|
||||||
self.url = url
|
self.url = url
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class Description(YandexMusicObject):
|
||||||
self._id_attrs = (self.text, self.url)
|
self._id_attrs = (self.text, self.url)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +12,8 @@ class Link(YandexMusicObject):
|
||||||
href,
|
href,
|
||||||
type_,
|
type_,
|
||||||
social_network=None,
|
social_network=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.title = title
|
self.title = title
|
||||||
self.href = href
|
self.href = href
|
||||||
self.type = type_
|
self.type = type_
|
||||||
|
@ -19,7 +24,7 @@ class Link(YandexMusicObject):
|
||||||
self._id_attrs = (self.title, self.href, self.type)
|
self._id_attrs = (self.title, self.href, self.type)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -28,7 +33,7 @@ class Link(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class Ratings(YandexMusicObject):
|
||||||
week,
|
week,
|
||||||
month,
|
month,
|
||||||
day=None,
|
day=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.week = week
|
self.week = week
|
||||||
self.month = month
|
self.month = month
|
||||||
|
|
||||||
|
@ -17,7 +22,7 @@ class Ratings(YandexMusicObject):
|
||||||
self._id_attrs = (self.week, self.month)
|
self._id_attrs = (self.week, self.month)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,8 +14,8 @@ class Vinyl(YandexMusicObject):
|
||||||
year,
|
year,
|
||||||
price,
|
price,
|
||||||
media,
|
media,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.url = url
|
self.url = url
|
||||||
self.picture = picture
|
self.picture = picture
|
||||||
self.title = title
|
self.title = title
|
||||||
|
@ -22,7 +27,7 @@ class Vinyl(YandexMusicObject):
|
||||||
self._id_attrs = (self.title, self.price, self.year, self.url, self.price, self.media)
|
self._id_attrs = (self.title, self.price, self.year, self.url, self.price, self.media)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -42,7 +47,7 @@ class Vinyl(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация списка объектов.
|
"""Десериализация списка объектов.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
import functools
|
import functools
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Callable, Union, List
|
from typing import Callable, Union, List, Optional
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
|
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
|
||||||
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
|
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
|
||||||
|
@ -70,8 +70,8 @@ class Client(YandexMusicObject):
|
||||||
:class:`yandex_music.utils.request.Request`.
|
:class:`yandex_music.utils.request.Request`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, token: str = None, fetch_account_status: bool = True, base_url: str = None,
|
def __init__(self, token: Optional[str] = None, fetch_account_status: bool = True, base_url: Optional[str] = None,
|
||||||
oauth_url: str = None, request: Request = None) -> None:
|
oauth_url: Optional[str] = None, request: Request = None) -> None:
|
||||||
self.logger = logging.getLogger(__name__)
|
self.logger = logging.getLogger(__name__)
|
||||||
self.token = token
|
self.token = token
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class Client(YandexMusicObject):
|
||||||
self.me = self.account_status()
|
self.me = self.account_status()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_credentials(cls, username: str, password: str, x_captcha_answer: str = None, x_captcha_key: str = None,
|
def from_credentials(cls, username: str, password: str, x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None,
|
||||||
captcha_callback: Callable[[Captcha], str] = None, *args, **kwargs) -> 'Client':
|
captcha_callback: Callable[[Captcha], str] = None, *args, **kwargs) -> 'Client':
|
||||||
"""Инициализция клиента по логину и паролю.
|
"""Инициализция клиента по логину и паролю.
|
||||||
|
|
||||||
|
@ -151,8 +151,8 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def generate_token_by_username_and_password(self, username: str, password: str, grant_type: str = 'password',
|
def generate_token_by_username_and_password(self, username: str, password: str, grant_type: str = 'password',
|
||||||
x_captcha_answer: str = None, x_captcha_key: str = None,
|
x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> str:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> str:
|
||||||
"""Метод получения OAuth токена по логину и паролю.
|
"""Метод получения OAuth токена по логину и паролю.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -217,7 +217,7 @@ class Client(YandexMusicObject):
|
||||||
return self._request
|
return self._request
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Status:
|
def account_status(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Status:
|
||||||
"""Получение статуса аккаунта. Нет обязательных параметров.
|
"""Получение статуса аккаунта. Нет обязательных параметров.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -240,7 +240,7 @@ class Client(YandexMusicObject):
|
||||||
return Status.de_json(result, self)
|
return Status.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Settings:
|
def settings(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Settings:
|
||||||
"""Получение предложений по покупке. Нет обязательных параметров.
|
"""Получение предложений по покупке. Нет обязательных параметров.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -263,7 +263,7 @@ class Client(YandexMusicObject):
|
||||||
return Settings.de_json(result, self)
|
return Settings.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def permission_alerts(self, timeout: Union[int, float] = None, *args, **kwargs) -> PermissionAlerts:
|
def permission_alerts(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> PermissionAlerts:
|
||||||
"""Получение оповещений. Нет обязательных параметров.
|
"""Получение оповещений. Нет обязательных параметров.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -286,7 +286,7 @@ class Client(YandexMusicObject):
|
||||||
return PermissionAlerts.de_json(result, self)
|
return PermissionAlerts.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def account_experiments(self, timeout: Union[int, float] = None, *args, **kwargs) -> Experiments:
|
def account_experiments(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Experiments:
|
||||||
"""Получение значений экспериментальных функций аккаунта.
|
"""Получение значений экспериментальных функций аккаунта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -309,7 +309,7 @@ class Client(YandexMusicObject):
|
||||||
return Experiments.de_json(result, self)
|
return Experiments.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def consume_promo_code(self, code: str, language: str = 'en', timeout: Union[int, float] = None,
|
def consume_promo_code(self, code: str, language: str = 'en', timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> PromoCodeStatus:
|
*args, **kwargs) -> PromoCodeStatus:
|
||||||
"""Активация промо-кода.
|
"""Активация промо-кода.
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ class Client(YandexMusicObject):
|
||||||
return PromoCodeStatus.de_json(result, self)
|
return PromoCodeStatus.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def feed(self, timeout: Union[int, float] = None, *args, **kwargs) -> Feed:
|
def feed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Feed:
|
||||||
"""Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты.
|
"""Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -358,7 +358,7 @@ class Client(YandexMusicObject):
|
||||||
return Feed.de_json(result, self)
|
return Feed.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def feed_wizard_is_passed(self, timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
def feed_wizard_is_passed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
url = f'{self.base_url}/feed/wizard/is-passed'
|
url = f'{self.base_url}/feed/wizard/is-passed'
|
||||||
|
|
||||||
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
||||||
|
@ -366,7 +366,7 @@ class Client(YandexMusicObject):
|
||||||
return result.get('is_wizard_passed') or False
|
return result.get('is_wizard_passed') or False
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def landing(self, blocks: Union[str, List[str]], timeout: Union[int, float] = None, *args, **kwargs) -> Landing:
|
def landing(self, blocks: Union[str, List[str]], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Landing:
|
||||||
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
|
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
|
||||||
|
|
||||||
Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists,
|
Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists,
|
||||||
|
@ -393,7 +393,7 @@ class Client(YandexMusicObject):
|
||||||
return Landing.de_json(result, self)
|
return Landing.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def genres(self, timeout: Union[int, float] = None, *args, **kwargs) -> List[Genre]:
|
def genres(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Genre]:
|
||||||
"""Получение жанров музыки.
|
"""Получение жанров музыки.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -417,7 +417,7 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def tracks_download_info(self, track_id: Union[str, int], get_direct_links: bool = False,
|
def tracks_download_info(self, track_id: Union[str, int], get_direct_links: bool = False,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> List[DownloadInfo]:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[DownloadInfo]:
|
||||||
"""Получение информации о доступных вариантах загрузки трека.
|
"""Получение информации о доступных вариантах загрузки трека.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -442,7 +442,7 @@ class Client(YandexMusicObject):
|
||||||
return DownloadInfo.de_list(result, self, get_direct_links)
|
return DownloadInfo.de_list(result, self, get_direct_links)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def track_supplement(self, track_id: Union[str, int], timeout: Union[int, float] = None,
|
def track_supplement(self, track_id: Union[str, int], timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> Supplement:
|
*args, **kwargs) -> Supplement:
|
||||||
"""Получение дополнительной информации о треке.
|
"""Получение дополнительной информации о треке.
|
||||||
|
|
||||||
|
@ -469,16 +469,16 @@ class Client(YandexMusicObject):
|
||||||
track_id: Union[str, int],
|
track_id: Union[str, int],
|
||||||
from_: str,
|
from_: str,
|
||||||
album_id: Union[str, int],
|
album_id: Union[str, int],
|
||||||
playlist_id: str = None,
|
playlist_id: Optional[str] = None,
|
||||||
from_cache: bool = False,
|
from_cache: bool = False,
|
||||||
play_id: str = None,
|
play_id: Optional[str] = None,
|
||||||
uid: int = None,
|
uid: Optional[int] = None,
|
||||||
timestamp: str = None,
|
timestamp: Optional[str] = None,
|
||||||
track_length_seconds: int = 0,
|
track_length_seconds: Optional[int] = 0,
|
||||||
total_played_seconds: int = 0,
|
total_played_seconds: Optional[int] = 0,
|
||||||
end_position_seconds: int = 0,
|
end_position_seconds: Optional[int] = 0,
|
||||||
client_now: str = None,
|
client_now: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None,
|
timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> bool:
|
*args, **kwargs) -> bool:
|
||||||
"""Метод для отправки текущего состояния прослушиваемого трека.
|
"""Метод для отправки текущего состояния прослушиваемого трека.
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
return result == 'ok'
|
return result == 'ok'
|
||||||
|
|
||||||
def albums_with_tracks(self, album_id: Union[str, int], timeout: Union[int, float] = None,
|
def albums_with_tracks(self, album_id: Union[str, int], timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> Album:
|
*args, **kwargs) -> Album:
|
||||||
"""Получение альбома по его уникальному идентификатору вместе с треками.
|
"""Получение альбома по его уникальному идентификатору вместе с треками.
|
||||||
|
|
||||||
|
@ -559,9 +559,9 @@ class Client(YandexMusicObject):
|
||||||
text: str,
|
text: str,
|
||||||
nocorrect: bool = False,
|
nocorrect: bool = False,
|
||||||
type_: str = 'all',
|
type_: str = 'all',
|
||||||
page: int = 0,
|
page: Optional[int] = 0,
|
||||||
playlist_in_best: bool = True,
|
playlist_in_best: bool = True,
|
||||||
timeout: Union[int, float] = None,
|
timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> Search:
|
*args, **kwargs) -> Search:
|
||||||
"""Осуществление поиска по запросу и типу, получение результатов.
|
"""Осуществление поиска по запросу и типу, получение результатов.
|
||||||
|
|
||||||
|
@ -598,7 +598,8 @@ class Client(YandexMusicObject):
|
||||||
return Search.de_json(result, self)
|
return Search.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def search_suggest(self, part: str, timeout: Union[int, float] = None, *args, **kwargs) -> Suggestions:
|
def search_suggest(self, part: str, timeout: Optional[Union[int, float]] = None,
|
||||||
|
*args, **kwargs) -> Optional[Suggestions]:
|
||||||
"""Получение подсказок по введенной части поискового запроса.
|
"""Получение подсказок по введенной части поискового запроса.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -622,8 +623,8 @@ class Client(YandexMusicObject):
|
||||||
return Suggestions.de_json(result, self)
|
return Suggestions.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: str = None,
|
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]:
|
||||||
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
|
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -656,8 +657,8 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_list(result, self)
|
return Playlist.de_list(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None,
|
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
|
||||||
"""Создание плейлиста.
|
"""Создание плейлиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -691,8 +692,8 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_json(result, self)
|
return Playlist.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_delete(self, kind: Union[str, int], user_id: str = None,
|
def users_playlists_delete(self, kind: Union[str, int], user_id: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
"""Удаление плейлиста.
|
"""Удаление плейлиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -719,8 +720,8 @@ class Client(YandexMusicObject):
|
||||||
return result == 'ok'
|
return result == 'ok'
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None,
|
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
|
||||||
"""Изменение названия плейлиста.
|
"""Изменение названия плейлиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -749,8 +750,8 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_json(result, self)
|
return Playlist.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: str = None,
|
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Optional[Playlist]:
|
||||||
"""Изменение плейлиста.
|
"""Изменение плейлиста.
|
||||||
|
|
||||||
Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`.
|
Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`.
|
||||||
|
@ -790,8 +791,8 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int],
|
def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int],
|
||||||
at: int = 0, revision: int = 1, user_id: str = None,
|
at: Optional[int] = 0, revision: int = 1, user_id: Optional[str] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> Playlist:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist:
|
||||||
"""Добавление трека в плейлист.
|
"""Добавление трека в плейлист.
|
||||||
|
|
||||||
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at).
|
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at).
|
||||||
|
@ -824,7 +825,7 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1,
|
def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1,
|
||||||
user_id: str = None, timeout: Union[int, float] = None,
|
user_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> Playlist:
|
*args, **kwargs) -> Playlist:
|
||||||
"""Удаление треков из плейлиста.
|
"""Удаление треков из плейлиста.
|
||||||
|
|
||||||
|
@ -856,7 +857,7 @@ class Client(YandexMusicObject):
|
||||||
return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs)
|
return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Status:
|
def rotor_account_status(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Status:
|
||||||
url = f'{self.base_url}/rotor/account/status'
|
url = f'{self.base_url}/rotor/account/status'
|
||||||
|
|
||||||
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
||||||
|
@ -864,7 +865,8 @@ class Client(YandexMusicObject):
|
||||||
return Status.de_json(result, self)
|
return Status.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_stations_dashboard(self, timeout: Union[int, float] = None, *args, **kwargs) -> Dashboard:
|
def rotor_stations_dashboard(self, timeout: Optional[Union[int, float]] = None,
|
||||||
|
*args, **kwargs) -> Optional[Dashboard]:
|
||||||
url = f'{self.base_url}/rotor/stations/dashboard'
|
url = f'{self.base_url}/rotor/stations/dashboard'
|
||||||
|
|
||||||
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
||||||
|
@ -872,7 +874,7 @@ class Client(YandexMusicObject):
|
||||||
return Dashboard.de_json(result, self)
|
return Dashboard.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_stations_list(self, language: str = 'en', timeout: Union[int, float] = None,
|
def rotor_stations_list(self, language: str = 'en', timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[StationResult]:
|
*args, **kwargs) -> List[StationResult]:
|
||||||
url = f'{self.base_url}/rotor/stations/list'
|
url = f'{self.base_url}/rotor/stations/list'
|
||||||
|
|
||||||
|
@ -881,9 +883,10 @@ class Client(YandexMusicObject):
|
||||||
return StationResult.de_list(result, self)
|
return StationResult.de_list(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: int = None, from_: str = None,
|
def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: Optional[int] = None,
|
||||||
batch_id: Union[str, int] = None, track_id: str = None,
|
from_: Optional[str] = None, batch_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
track_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None,
|
||||||
|
*args, **kwargs) -> bool:
|
||||||
if timestamp is None:
|
if timestamp is None:
|
||||||
timestamp = datetime.now().timestamp()
|
timestamp = datetime.now().timestamp()
|
||||||
|
|
||||||
|
@ -907,19 +910,19 @@ class Client(YandexMusicObject):
|
||||||
return result == 'ok'
|
return result == 'ok'
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: int = None,
|
def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: Optional[int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs)
|
return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_station_genre_feedback_track_started(self, genre: str, track_id: str, batch_id: Union[str, int],
|
def rotor_station_genre_feedback_track_started(self, genre: str, track_id: str, batch_id: Union[str, int],
|
||||||
timestamp: int = None, timeout: Union[int, float] = None,
|
timestamp: Optional[int] = None, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> bool:
|
*args, **kwargs) -> bool:
|
||||||
return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
|
return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
|
||||||
timeout=timeout, *args, **kwargs)
|
timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_station_genre_info(self, genre: str, timeout: Union[int, float] = None,
|
def rotor_station_genre_info(self, genre: str, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[StationResult]:
|
*args, **kwargs) -> List[StationResult]:
|
||||||
url = f'{self.base_url}/rotor/station/genre:{genre}/info'
|
url = f'{self.base_url}/rotor/station/genre:{genre}/info'
|
||||||
|
|
||||||
|
@ -928,8 +931,8 @@ class Client(YandexMusicObject):
|
||||||
return StationResult.de_list(result, self)
|
return StationResult.de_list(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def rotor_station_genre_tracks(self, genre: str, timeout: Union[int, float] = None,
|
def rotor_station_genre_tracks(self, genre: str, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> StationTracksResult:
|
*args, **kwargs) -> Optional[StationTracksResult]:
|
||||||
url = f'{self.base_url}/rotor/station/genre:{genre}/tracks'
|
url = f'{self.base_url}/rotor/station/genre:{genre}/tracks'
|
||||||
|
|
||||||
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
result = self._request.get(url, timeout=timeout, *args, **kwargs)
|
||||||
|
@ -937,7 +940,7 @@ class Client(YandexMusicObject):
|
||||||
return StationTracksResult.de_json(result, self)
|
return StationTracksResult.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def artists_brief_info(self, artist_id: Union[str, int], timeout: Union[int, float] = None,
|
def artists_brief_info(self, artist_id: Union[str, int], timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> BriefInfo:
|
*args, **kwargs) -> BriefInfo:
|
||||||
url = f'{self.base_url}/artists/{artist_id}/brief-info'
|
url = f'{self.base_url}/artists/{artist_id}/brief-info'
|
||||||
|
|
||||||
|
@ -946,8 +949,8 @@ class Client(YandexMusicObject):
|
||||||
return BriefInfo.de_json(result, self)
|
return BriefInfo.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def artists_tracks(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20,
|
def artists_tracks(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> ArtistTracks:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> ArtistTracks:
|
||||||
"""Получение треков артиста.
|
"""Получение треков артиста.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -978,8 +981,8 @@ class Client(YandexMusicObject):
|
||||||
return ArtistTracks.de_json(result, self)
|
return ArtistTracks.de_json(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def artists_direct_albums(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20,
|
def artists_direct_albums(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20,
|
||||||
sort_by: str = 'year', timeout: Union[int, float] = None,
|
sort_by: str = 'year', timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> ArtistAlbums:
|
*args, **kwargs) -> ArtistAlbums:
|
||||||
"""Получение альбомов артиста.
|
"""Получение альбомов артиста.
|
||||||
|
|
||||||
|
@ -1015,7 +1018,7 @@ class Client(YandexMusicObject):
|
||||||
return ArtistAlbums.de_json(result, self)
|
return ArtistAlbums.de_json(result, self)
|
||||||
|
|
||||||
def _like_action(self, object_type: str, ids: Union[List[Union[str, int]], str, int], remove: bool = False,
|
def _like_action(self, object_type: str, ids: Union[List[Union[str, int]], str, int], remove: bool = False,
|
||||||
user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
if user_id is None and self.me is not None:
|
if user_id is None and self.me is not None:
|
||||||
user_id = self.me.account.uid
|
user_id = self.me.account.uid
|
||||||
|
|
||||||
|
@ -1031,51 +1034,51 @@ class Client(YandexMusicObject):
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
|
def users_likes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs)
|
return self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int],
|
def users_likes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs)
|
return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_artists_add(self, artist_ids: Union[List[Union[str, int]], str, int],
|
def users_likes_artists_add(self, artist_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs)
|
return self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
def users_likes_artists_remove(self, artist_ids: Union[List[Union[str, int]], str, int],
|
def users_likes_artists_remove(self, artist_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs)
|
return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_playlists_add(self, playlist_ids: Union[List[Union[str, int]], str, int],
|
def users_likes_playlists_add(self, playlist_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs)
|
return self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_playlists_remove(self, playlist_ids: Union[List[Union[str, int]], str, int],
|
def users_likes_playlists_remove(self, playlist_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs)
|
return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_albums_add(self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
|
def users_likes_albums_add(self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs)
|
return self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_albums_remove(self, album_ids: Union[List[Union[str, int]], str, int],
|
def users_likes_albums_remove(self, album_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs)
|
return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
def _get_list(self, object_type: str, ids: Union[List[Union[str, int]], int, str],
|
def _get_list(self, object_type: str, ids: Union[List[Union[str, int]], int, str],
|
||||||
params: dict = None, timeout: Union[int, float] = None,
|
params: dict = None, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[Union[Artist, Album, Track, Playlist]]:
|
*args, **kwargs) -> List[Union[Artist, Album, Track, Playlist]]:
|
||||||
if params is None:
|
if params is None:
|
||||||
params = {}
|
params = {}
|
||||||
|
@ -1088,27 +1091,27 @@ class Client(YandexMusicObject):
|
||||||
return de_list.get(object_type)(result, self)
|
return de_list.get(object_type)(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None,
|
def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[Artist]:
|
*args, **kwargs) -> List[Artist]:
|
||||||
return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs)
|
return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None,
|
def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[Album]:
|
*args, **kwargs) -> List[Album]:
|
||||||
return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs)
|
return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def tracks(self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True,
|
def tracks(self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> List[Track]:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Track]:
|
||||||
return self._get_list('track', track_ids, {'with-positions': with_positions}, timeout, *args, **kwargs)
|
return self._get_list('track', track_ids, {'with-positions': with_positions}, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None,
|
def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[Playlist]:
|
*args, **kwargs) -> List[Playlist]:
|
||||||
return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs)
|
return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_playlists_list(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None,
|
def users_playlists_list(self, user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[Playlist]:
|
*args, **kwargs) -> List[Playlist]:
|
||||||
if user_id is None and self.me is not None:
|
if user_id is None and self.me is not None:
|
||||||
user_id = self.me.account.uid
|
user_id = self.me.account.uid
|
||||||
|
@ -1120,7 +1123,7 @@ class Client(YandexMusicObject):
|
||||||
return Playlist.de_list(result, self)
|
return Playlist.de_list(result, self)
|
||||||
|
|
||||||
def _get_likes(self, object_type: str, user_id: Union[str, int] = None, params: dict = None,
|
def _get_likes(self, object_type: str, user_id: Union[str, int] = None, params: dict = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) \
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) \
|
||||||
-> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], TracksList]:
|
-> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], TracksList]:
|
||||||
if user_id is None and self.me is not None:
|
if user_id is None and self.me is not None:
|
||||||
user_id = self.me.account.uid
|
user_id = self.me.account.uid
|
||||||
|
@ -1135,29 +1138,29 @@ class Client(YandexMusicObject):
|
||||||
return de_list_likes.get(object_type)(result, self)
|
return de_list_likes.get(object_type)(result, self)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0,
|
def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> TracksList:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList:
|
||||||
return self._get_likes('track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout,
|
return self._get_likes('track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout,
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: Union[int, float] = None,
|
def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[AlbumsLikes]:
|
*args, **kwargs) -> List[AlbumsLikes]:
|
||||||
return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs)
|
return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_artists(self, user_id: Union[str, int] = None, with_timestamps: bool = True,
|
def users_likes_artists(self, user_id: Union[str, int] = None, with_timestamps: bool = True,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> List[ArtistsLikes]:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[ArtistsLikes]:
|
||||||
return self._get_likes('artist', user_id, {'with-timestamps': with_timestamps}, timeout, *args, **kwargs)
|
return self._get_likes('artist', user_id, {'with-timestamps': with_timestamps}, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None,
|
def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None,
|
||||||
*args, **kwargs) -> List[PlaylistsLikes]:
|
*args, **kwargs) -> List[PlaylistsLikes]:
|
||||||
return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs)
|
return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0,
|
def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> TracksList:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList:
|
||||||
if user_id is None and self.me is not None:
|
if user_id is None and self.me is not None:
|
||||||
user_id = self.me.account.uid
|
user_id = self.me.account.uid
|
||||||
|
|
||||||
|
@ -1169,7 +1172,7 @@ class Client(YandexMusicObject):
|
||||||
return TracksList.de_json(result.get('library'), self)
|
return TracksList.de_json(result.get('library'), self)
|
||||||
|
|
||||||
def _dislike_action(self, ids: Union[List[Union[str, int]], str, int], remove: bool = False,
|
def _dislike_action(self, ids: Union[List[Union[str, int]], str, int], remove: bool = False,
|
||||||
user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
if user_id is None and self.me is not None:
|
if user_id is None and self.me is not None:
|
||||||
user_id = self.me.account.uid
|
user_id = self.me.account.uid
|
||||||
|
|
||||||
|
@ -1183,13 +1186,13 @@ class Client(YandexMusicObject):
|
||||||
@log
|
@log
|
||||||
def users_dislikes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int],
|
def users_dislikes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs)
|
return self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
@log
|
@log
|
||||||
def users_dislikes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int],
|
def users_dislikes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int],
|
||||||
user_id: Union[str, int] = None,
|
user_id: Union[str, int] = None,
|
||||||
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
|
timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool:
|
||||||
return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs)
|
return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs)
|
||||||
|
|
||||||
# camelCase псевдонимы
|
# camelCase псевдонимы
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class AlbumEvent(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
album,
|
album,
|
||||||
tracks,
|
tracks,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.album = album
|
self.album = album
|
||||||
self.tracks = tracks
|
self.tracks = tracks
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class AlbumEvent(YandexMusicObject):
|
||||||
self._id_attrs = (self.album, self.tracks)
|
self._id_attrs = (self.album, self.tracks)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -26,7 +31,7 @@ class AlbumEvent(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class ArtistEvent(YandexMusicObject):
|
||||||
artist,
|
artist,
|
||||||
tracks,
|
tracks,
|
||||||
similar_to_artists_from_history,
|
similar_to_artists_from_history,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.artist = artist
|
self.artist = artist
|
||||||
self.tracks = tracks
|
self.tracks = tracks
|
||||||
self.similar_to_artists_from_history = similar_to_artists_from_history
|
self.similar_to_artists_from_history = similar_to_artists_from_history
|
||||||
|
@ -16,7 +21,7 @@ class ArtistEvent(YandexMusicObject):
|
||||||
self._id_attrs = (self.artist, self.tracks, self.similar_to_artists_from_history)
|
self._id_attrs = (self.artist, self.tracks, self.similar_to_artists_from_history)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -29,7 +34,7 @@ class ArtistEvent(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +12,8 @@ class Day(YandexMusicObject):
|
||||||
events,
|
events,
|
||||||
tracks_to_play_with_ads,
|
tracks_to_play_with_ads,
|
||||||
tracks_to_play,
|
tracks_to_play,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.day = day
|
self.day = day
|
||||||
self.events = events
|
self.events = events
|
||||||
self.tracks_to_play_with_ads = tracks_to_play_with_ads
|
self.tracks_to_play_with_ads = tracks_to_play_with_ads
|
||||||
|
@ -18,7 +23,7 @@ class Day(YandexMusicObject):
|
||||||
self._id_attrs = (self.day, self.events, self.tracks_to_play_with_ads, self.tracks_to_play)
|
self._id_attrs = (self.day, self.events, self.tracks_to_play_with_ads, self.tracks_to_play)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -31,7 +36,7 @@ class Day(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,8 +18,8 @@ class Event(YandexMusicObject):
|
||||||
message=None,
|
message=None,
|
||||||
device=None,
|
device=None,
|
||||||
tracks_count=None,
|
tracks_count=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.type = type_
|
self.type = type_
|
||||||
|
|
||||||
|
@ -31,7 +36,7 @@ class Event(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.type)
|
self._id_attrs = (self.id, self.type)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -44,7 +49,7 @@ class Event(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,8 +16,8 @@ class Feed(YandexMusicObject):
|
||||||
today,
|
today,
|
||||||
days,
|
days,
|
||||||
next_revision=None,
|
next_revision=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.can_get_more_events = can_get_more_events
|
self.can_get_more_events = can_get_more_events
|
||||||
self.pumpkin = pumpkin
|
self.pumpkin = pumpkin
|
||||||
self.is_wizard_passed = is_wizard_passed
|
self.is_wizard_passed = is_wizard_passed
|
||||||
|
@ -27,7 +32,7 @@ class Feed(YandexMusicObject):
|
||||||
self._id_attrs = (self.can_get_more_events, self.generated_playlists, self.headlines, self.today, self.days)
|
self._id_attrs = (self.can_get_more_events, self.generated_playlists, self.headlines, self.today, self.days)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +12,8 @@ class GeneratedPlaylist(YandexMusicObject):
|
||||||
ready,
|
ready,
|
||||||
notify,
|
notify,
|
||||||
data,
|
data,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.ready = ready
|
self.ready = ready
|
||||||
self.notify = notify
|
self.notify = notify
|
||||||
|
@ -18,7 +23,7 @@ class GeneratedPlaylist(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.ready, self.notify, self.data)
|
self._id_attrs = (self.type, self.ready, self.notify, self.data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -29,7 +34,7 @@ class GeneratedPlaylist(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class TrackWithAds(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
type_,
|
type_,
|
||||||
track,
|
track,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.track = track
|
self.track = track
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class TrackWithAds(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.track)
|
self._id_attrs = (self.type, self.track)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -25,7 +30,7 @@ class TrackWithAds(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,8 +21,8 @@ class Genre(YandexMusicObject):
|
||||||
radio_icon=None,
|
radio_icon=None,
|
||||||
sub_genres=None,
|
sub_genres=None,
|
||||||
hide_in_regions=None,
|
hide_in_regions=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.weight = weight
|
self.weight = weight
|
||||||
self.composer_top = composer_top
|
self.composer_top = composer_top
|
||||||
|
@ -37,7 +42,7 @@ class Genre(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.weight, self.composer_top, self.title, self.images, self.show_in_menu)
|
self._id_attrs = (self.id, self.weight, self.composer_top, self.title, self.images, self.show_in_menu)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -51,7 +56,7 @@ class Genre(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Images(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
_208x208=None,
|
_208x208=None,
|
||||||
_300x300=None,
|
_300x300=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self._208x208 = _208x208
|
self._208x208 = _208x208
|
||||||
self._300x300 = _300x300
|
self._300x300 = _300x300
|
||||||
|
|
||||||
|
@ -31,7 +36,7 @@ class Images(YandexMusicObject):
|
||||||
self.client.request.download(self._300x300, filename)
|
self.client.request.download(self._300x300, filename)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Title(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
title,
|
title,
|
||||||
full_title=None,
|
full_title=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.title = title
|
self.title = title
|
||||||
self.full_title = full_title
|
self.full_title = full_title
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class Title(YandexMusicObject):
|
||||||
self._id_attrs = (self.title, self.full_title)
|
self._id_attrs = (self.title, self.full_title)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +15,8 @@ class Block(YandexMusicObject):
|
||||||
entities,
|
entities,
|
||||||
description=None,
|
description=None,
|
||||||
data=None,
|
data=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
|
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.type = type_
|
self.type = type_
|
||||||
|
@ -29,7 +34,7 @@ class Block(YandexMusicObject):
|
||||||
return self.entities[item]
|
return self.entities[item]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -46,7 +51,7 @@ class Block(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject, Promotion, Album, Playlist, MixLink, PlayContext, ChartItem,\
|
from yandex_music import YandexMusicObject, Promotion, Album, Playlist, MixLink, PlayContext, ChartItem,\
|
||||||
GeneratedPlaylist
|
GeneratedPlaylist
|
||||||
|
|
||||||
|
@ -18,8 +23,8 @@ class BlockEntity(YandexMusicObject):
|
||||||
id_,
|
id_,
|
||||||
type_,
|
type_,
|
||||||
data,
|
data,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
|
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.type = type_
|
self.type = type_
|
||||||
|
@ -29,7 +34,7 @@ class BlockEntity(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.type, self.data)
|
self._id_attrs = (self.id, self.type, self.data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -39,7 +44,7 @@ class BlockEntity(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,8 +13,8 @@ class Chart(YandexMusicObject):
|
||||||
listeners,
|
listeners,
|
||||||
shift,
|
shift,
|
||||||
track_id=None,
|
track_id=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.position = position
|
self.position = position
|
||||||
self.progress = progress
|
self.progress = progress
|
||||||
self.listeners = listeners
|
self.listeners = listeners
|
||||||
|
@ -21,7 +26,7 @@ class Chart(YandexMusicObject):
|
||||||
self._id_attrs = (self.position, self.progress, self.listeners, self.shift, self.track_id)
|
self._id_attrs = (self.position, self.progress, self.listeners, self.shift, self.track_id)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -43,7 +48,7 @@ class Chart(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация списка объектов.
|
"""Десериализация списка объектов.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class ChartItem(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
track,
|
track,
|
||||||
chart,
|
chart,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.track = track
|
self.track = track
|
||||||
self.chart = chart
|
self.chart = chart
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class ChartItem(YandexMusicObject):
|
||||||
self._id_attrs = (self.track, self.chart)
|
self._id_attrs = (self.track, self.chart)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -26,7 +31,7 @@ class ChartItem(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class Landing(YandexMusicObject):
|
||||||
pumpkin,
|
pumpkin,
|
||||||
content_id,
|
content_id,
|
||||||
blocks,
|
blocks,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
|
|
||||||
self.pumpkin = pumpkin
|
self.pumpkin = pumpkin
|
||||||
self.content_id = content_id
|
self.content_id = content_id
|
||||||
|
@ -20,7 +25,7 @@ class Landing(YandexMusicObject):
|
||||||
return self.blocks[item]
|
return self.blocks[item]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +15,8 @@ class MixLink(YandexMusicObject):
|
||||||
background_color,
|
background_color,
|
||||||
background_image_uri,
|
background_image_uri,
|
||||||
cover_white,
|
cover_white,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.title = title
|
self.title = title
|
||||||
self.url = url
|
self.url = url
|
||||||
self.url_scheme = url_scheme
|
self.url_scheme = url_scheme
|
||||||
|
@ -35,7 +40,7 @@ class MixLink(YandexMusicObject):
|
||||||
self.client.request.download(f'https://{self.background_image_uri.replace("%%", size)}', filename)
|
self.client.request.download(f'https://{self.background_image_uri.replace("%%", size)}', filename)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -44,7 +49,7 @@ class MixLink(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class PersonalPlaylistsData(YandexMusicObject):
|
class PersonalPlaylistsData(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
is_wizard_passed,
|
is_wizard_passed,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.is_wizard_passed = is_wizard_passed
|
self.is_wizard_passed = is_wizard_passed
|
||||||
|
|
||||||
self.client = client
|
self.client = client
|
||||||
self._id_attrs = (self.is_wizard_passed,)
|
self._id_attrs = (self.is_wizard_passed,)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +12,8 @@ class PlayContext(YandexMusicObject):
|
||||||
context,
|
context,
|
||||||
context_item,
|
context_item,
|
||||||
tracks,
|
tracks,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.client_ = client_
|
self.client_ = client_
|
||||||
self.context = context
|
self.context = context
|
||||||
self.context_item = context_item
|
self.context_item = context_item
|
||||||
|
@ -18,7 +23,7 @@ class PlayContext(YandexMusicObject):
|
||||||
self._id_attrs = (self.client_, self.context_item, self.context_item, self.tracks)
|
self._id_attrs = (self.client_, self.context_item, self.context_item, self.tracks)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class PlayContextsData(YandexMusicObject):
|
class PlayContextsData(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
other_tracks,
|
other_tracks,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.other_tracks = other_tracks
|
self.other_tracks = other_tracks
|
||||||
|
|
||||||
self.client = client
|
self.client = client
|
||||||
self._id_attrs = (self.other_tracks,)
|
self._id_attrs = (self.other_tracks,)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,8 +17,8 @@ class Promotion(YandexMusicObject):
|
||||||
text_color,
|
text_color,
|
||||||
gradient,
|
gradient,
|
||||||
image,
|
image,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.promo_id = promo_id
|
self.promo_id = promo_id
|
||||||
self.title = title
|
self.title = title
|
||||||
self.subtitle = subtitle
|
self.subtitle = subtitle
|
||||||
|
@ -29,7 +34,7 @@ class Promotion(YandexMusicObject):
|
||||||
self.url, self.url_scheme, self.text_color, self.gradient, self.image)
|
self.url, self.url_scheme, self.text_color, self.gradient, self.image)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -38,7 +43,7 @@ class Promotion(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class TrackId(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
id_,
|
id_,
|
||||||
album_id=None,
|
album_id=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
|
|
||||||
self.album_id = album_id
|
self.album_id = album_id
|
||||||
|
@ -14,7 +19,7 @@ class TrackId(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.album_id)
|
self._id_attrs = (self.id, self.album_id)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class TrackShortOld(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
track_id,
|
track_id,
|
||||||
timestamp,
|
timestamp,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.track_id = track_id
|
self.track_id = track_id
|
||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class TrackShortOld(YandexMusicObject):
|
||||||
self._id_attrs = (self.track_id,)
|
self._id_attrs = (self.track_id,)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -25,7 +30,7 @@ class TrackShortOld(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class AlbumsLikes(YandexMusicObject):
|
||||||
timestamp,
|
timestamp,
|
||||||
id_=None,
|
id_=None,
|
||||||
album=None,
|
album=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.album = album
|
self.album = album
|
||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
|
@ -16,7 +21,7 @@ class AlbumsLikes(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.album)
|
self._id_attrs = (self.id, self.album)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -27,7 +32,7 @@ class AlbumsLikes(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class ArtistsLikes(YandexMusicObject):
|
||||||
id_=None,
|
id_=None,
|
||||||
artist=None,
|
artist=None,
|
||||||
timestamp=None,
|
timestamp=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.artist = artist
|
self.artist = artist
|
||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
|
@ -16,7 +21,7 @@ class ArtistsLikes(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.artist)
|
self._id_attrs = (self.id, self.artist)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -32,7 +37,7 @@ class ArtistsLikes(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class PlaylistsLikes(YandexMusicObject):
|
||||||
timestamp,
|
timestamp,
|
||||||
id_=None,
|
id_=None,
|
||||||
playlist=None,
|
playlist=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.playlist = playlist
|
self.playlist = playlist
|
||||||
self.timestamp = timestamp
|
self.timestamp = timestamp
|
||||||
|
@ -16,7 +21,7 @@ class PlaylistsLikes(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.playlist)
|
self._id_attrs = (self.id, self.playlist)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -27,7 +32,7 @@ class PlaylistsLikes(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,8 +14,8 @@ class CaseForms(YandexMusicObject):
|
||||||
accusative,
|
accusative,
|
||||||
instrumental,
|
instrumental,
|
||||||
prepositional,
|
prepositional,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.nominative = nominative
|
self.nominative = nominative
|
||||||
self.genitive = genitive
|
self.genitive = genitive
|
||||||
self.dative = dative
|
self.dative = dative
|
||||||
|
@ -23,7 +28,7 @@ class CaseForms(YandexMusicObject):
|
||||||
self.accusative, self.instrumental, self.prepositional)
|
self.accusative, self.instrumental, self.prepositional)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class MadeFor(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
user_info,
|
user_info,
|
||||||
case_forms,
|
case_forms,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.user_info = user_info
|
self.user_info = user_info
|
||||||
self.case_forms = case_forms
|
self.case_forms = case_forms
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class MadeFor(YandexMusicObject):
|
||||||
self._id_attrs = (self.user_info, self.case_forms)
|
self._id_attrs = (self.user_info, self.case_forms)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class PlayCounter(YandexMusicObject):
|
||||||
value,
|
value,
|
||||||
description,
|
description,
|
||||||
updated,
|
updated,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.value = value
|
self.value = value
|
||||||
self.description = description
|
self.description = description
|
||||||
self.updated = updated
|
self.updated = updated
|
||||||
|
@ -16,7 +21,7 @@ class PlayCounter(YandexMusicObject):
|
||||||
self._id_attrs = (self.value, self.description, self.updated)
|
self._id_attrs = (self.value, self.description, self.updated)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,18 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client, User, Cover, MadeFor, TrackShort, PlaylistAbsence, PlayCounter
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class Playlist(YandexMusicObject):
|
class Playlist(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
owner,
|
owner: Optional['User'],
|
||||||
cover,
|
cover: Optional['Cover'],
|
||||||
made_for,
|
made_for: Optional['MadeFor'],
|
||||||
play_counter,
|
play_counter: Optional['PlayCounter'],
|
||||||
playlist_absence,
|
playlist_absence: Optional['PlaylistAbsence'],
|
||||||
uid=None,
|
uid=None,
|
||||||
kind=None,
|
kind=None,
|
||||||
title=None,
|
title=None,
|
||||||
|
@ -34,8 +39,8 @@ class Playlist(YandexMusicObject):
|
||||||
description_formatted=None,
|
description_formatted=None,
|
||||||
is_for_from=None,
|
is_for_from=None,
|
||||||
regions=None,
|
regions=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
self.cover = cover
|
self.cover = cover
|
||||||
self.made_for = made_for
|
self.made_for = made_for
|
||||||
|
@ -73,14 +78,14 @@ class Playlist(YandexMusicObject):
|
||||||
self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence)
|
self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_mine(self):
|
def is_mine(self) -> bool:
|
||||||
return self.owner.uid == self.client.me.account.uid
|
return self.owner.uid == self.client.me.account.uid
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def playlist_id(self):
|
def playlist_id(self) -> str:
|
||||||
return f'{self.owner.uid}:{self.kind}'
|
return f'{self.owner.uid}:{self.kind}'
|
||||||
|
|
||||||
def download_animated_cover(self, filename, size='200x200'):
|
def download_animated_cover(self, filename: str, size: Optional[str] = '200x200') -> None:
|
||||||
"""Загрузка анимированной обложки.
|
"""Загрузка анимированной обложки.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -90,7 +95,7 @@ class Playlist(YandexMusicObject):
|
||||||
|
|
||||||
self.client.request.download(f'https://{self.animated_cover_uri.replace("%%", size)}', filename)
|
self.client.request.download(f'https://{self.animated_cover_uri.replace("%%", size)}', filename)
|
||||||
|
|
||||||
def download_og_image(self, filename, size='200x200'):
|
def download_og_image(self, filename: str, size: Optional[str] = '200x200') -> None:
|
||||||
"""Загрузка обложки.
|
"""Загрузка обложки.
|
||||||
|
|
||||||
Используйте это только когда нет self.cover!
|
Используйте это только когда нет self.cover!
|
||||||
|
@ -102,20 +107,20 @@ class Playlist(YandexMusicObject):
|
||||||
|
|
||||||
self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename)
|
self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename)
|
||||||
|
|
||||||
def rename(self, name):
|
def rename(self, name: str) -> None:
|
||||||
client, kind = self.client, self.kind
|
client, kind = self.client, self.kind
|
||||||
|
|
||||||
self.__dict__.clear()
|
self.__dict__.clear()
|
||||||
self.__dict__.update(client.users_playlists_name(kind, name).__dict__)
|
self.__dict__.update(client.users_playlists_name(kind, name).__dict__)
|
||||||
|
|
||||||
def like(self, *args, **kwargs):
|
def like(self, *args, **kwargs) -> bool:
|
||||||
"""Сокращение для::
|
"""Сокращение для::
|
||||||
|
|
||||||
client.users_likes_playlists_add(playlist.uid, user.id *args, **kwargs)
|
client.users_likes_playlists_add(playlist.uid, user.id *args, **kwargs)
|
||||||
"""
|
"""
|
||||||
return self.client.users_likes_playlists_add(self.uid, self.client.me.account.uid, *args, **kwargs)
|
return self.client.users_likes_playlists_add(self.uid, self.client.me.account.uid, *args, **kwargs)
|
||||||
|
|
||||||
def dislike(self, *args, **kwargs):
|
def dislike(self, *args, **kwargs) -> bool:
|
||||||
"""Сокращение для::
|
"""Сокращение для::
|
||||||
|
|
||||||
client.users_likes_playlists_remove(playlist.uid, user.id *args, **kwargs)
|
client.users_likes_playlists_remove(playlist.uid, user.id *args, **kwargs)
|
||||||
|
@ -123,7 +128,7 @@ class Playlist(YandexMusicObject):
|
||||||
return self.client.users_likes_playlists_remove(self.uid, self.client.me.account.uid, *args, **kwargs)
|
return self.client.users_likes_playlists_remove(self.uid, self.client.me.account.uid, *args, **kwargs)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client') -> Optional['Playlist']:
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -143,7 +148,7 @@ class Playlist(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client') -> List['Playlist']:
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,8 +26,8 @@ class PlaylistAbsence(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
kind,
|
kind,
|
||||||
reason,
|
reason,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.kind = kind
|
self.kind = kind
|
||||||
self.reason = reason
|
self.reason = reason
|
||||||
|
|
||||||
|
@ -30,7 +35,7 @@ class PlaylistAbsence(YandexMusicObject):
|
||||||
self._id_attrs = (self.kind, self.reason)
|
self._id_attrs = (self.kind, self.reason)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class PlaylistId(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
uid,
|
uid,
|
||||||
kind,
|
kind,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.uid = uid
|
self.uid = uid
|
||||||
self.kind = kind
|
self.kind = kind
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class PlaylistId(YandexMusicObject):
|
||||||
self._id_attrs = (self.uid, self.kind)
|
self._id_attrs = (self.uid, self.kind)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -34,7 +39,7 @@ class PlaylistId(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация списка объектов.
|
"""Десериализация списка объектов.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,8 +33,8 @@ class User(YandexMusicObject):
|
||||||
name,
|
name,
|
||||||
sex,
|
sex,
|
||||||
verified,
|
verified,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.uid = uid
|
self.uid = uid
|
||||||
self.login = login
|
self.login = login
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -50,7 +55,7 @@ class User(YandexMusicObject):
|
||||||
self.client.request.download(f'https://upics.yandex.net/{self.uid}/{format_}', filename)
|
self.client.request.download(f'https://upics.yandex.net/{self.uid}/{format_}', filename)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,8 +16,8 @@ class AdParams(YandexMusicObject):
|
||||||
ad_volume,
|
ad_volume,
|
||||||
genre_id=None,
|
genre_id=None,
|
||||||
genre_name=None,
|
genre_name=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.partner_id = partner_id
|
self.partner_id = partner_id
|
||||||
self.category_id = category_id
|
self.category_id = category_id
|
||||||
self.page_ref = page_ref
|
self.page_ref = page_ref
|
||||||
|
@ -28,7 +33,7 @@ class AdParams(YandexMusicObject):
|
||||||
self.target_ref, self.other_params, self.ad_volume)
|
self.target_ref, self.other_params, self.ad_volume)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class Dashboard(YandexMusicObject):
|
||||||
dashboard_id,
|
dashboard_id,
|
||||||
stations,
|
stations,
|
||||||
pumpkin,
|
pumpkin,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.dashboard_id = dashboard_id
|
self.dashboard_id = dashboard_id
|
||||||
self.stations = stations
|
self.stations = stations
|
||||||
self.pumpkin = pumpkin
|
self.pumpkin = pumpkin
|
||||||
|
@ -16,7 +21,7 @@ class Dashboard(YandexMusicObject):
|
||||||
self._id_attrs = (self.dashboard_id, self.stations, self.pumpkin)
|
self._id_attrs = (self.dashboard_id, self.stations, self.pumpkin)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client') -> Optional['Dashboard']:
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,8 +12,8 @@ class DiscreteScale(YandexMusicObject):
|
||||||
name,
|
name,
|
||||||
min_,
|
min_,
|
||||||
max_,
|
max_,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.name = name
|
self.name = name
|
||||||
self.min = min_
|
self.min = min_
|
||||||
|
@ -18,7 +23,7 @@ class DiscreteScale(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.name, self.min, self.max)
|
self._id_attrs = (self.type, self.name, self.min, self.max)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class Enum(YandexMusicObject):
|
||||||
type_,
|
type_,
|
||||||
name,
|
name,
|
||||||
possible_values,
|
possible_values,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.name = name
|
self.name = name
|
||||||
self.possible_values = possible_values
|
self.possible_values = possible_values
|
||||||
|
@ -16,7 +21,7 @@ class Enum(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.name, self.possible_values)
|
self._id_attrs = (self.type, self.name, self.possible_values)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Id(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
type_,
|
type_,
|
||||||
tag,
|
tag,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.tag = tag
|
self.tag = tag
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class Id(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.tag)
|
self._id_attrs = (self.type, self.tag)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject, Enum, DiscreteScale
|
from yandex_music import YandexMusicObject, Enum, DiscreteScale
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,8 +19,8 @@ class Restrictions(YandexMusicObject):
|
||||||
mood=None,
|
mood=None,
|
||||||
energy=None,
|
energy=None,
|
||||||
mood_energy=None,
|
mood_energy=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.language = language
|
self.language = language
|
||||||
self.diversity = diversity
|
self.diversity = diversity
|
||||||
self.mood = mood
|
self.mood = mood
|
||||||
|
@ -26,7 +31,7 @@ class Restrictions(YandexMusicObject):
|
||||||
self._id_attrs = (self.language, self.diversity)
|
self._id_attrs = (self.language, self.diversity)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,8 +13,8 @@ class RotorSettings(YandexMusicObject):
|
||||||
mood=None,
|
mood=None,
|
||||||
energy=None,
|
energy=None,
|
||||||
mood_energy=None,
|
mood_energy=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.language = language
|
self.language = language
|
||||||
self.diversity = diversity
|
self.diversity = diversity
|
||||||
|
|
||||||
|
@ -21,7 +26,7 @@ class RotorSettings(YandexMusicObject):
|
||||||
self._id_attrs = (self.language, self.diversity)
|
self._id_attrs = (self.language, self.diversity)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +11,8 @@ class Sequence(YandexMusicObject):
|
||||||
type_,
|
type_,
|
||||||
track,
|
track,
|
||||||
liked,
|
liked,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.track = track
|
self.track = track
|
||||||
self.liked = liked
|
self.liked = liked
|
||||||
|
@ -16,7 +21,7 @@ class Sequence(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.track, self.liked)
|
self._id_attrs = (self.type, self.track, self.liked)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -27,7 +32,7 @@ class Sequence(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,8 +17,8 @@ class Station(YandexMusicObject):
|
||||||
restrictions,
|
restrictions,
|
||||||
restrictions2,
|
restrictions2,
|
||||||
parent_id=None,
|
parent_id=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.name = name
|
self.name = name
|
||||||
self.icon = icon
|
self.icon = icon
|
||||||
|
@ -30,7 +35,7 @@ class Station(YandexMusicObject):
|
||||||
self.id_for_from, self.restrictions, self.restrictions2)
|
self.id_for_from, self.restrictions, self.restrictions2)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,8 +14,8 @@ class StationResult(YandexMusicObject):
|
||||||
ad_params,
|
ad_params,
|
||||||
explanation=None,
|
explanation=None,
|
||||||
prerolls=None,
|
prerolls=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.station = station
|
self.station = station
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
self.settings2 = settings2
|
self.settings2 = settings2
|
||||||
|
@ -22,7 +27,7 @@ class StationResult(YandexMusicObject):
|
||||||
self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params)
|
self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -36,7 +41,7 @@ class StationResult(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client, Id, Sequence
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
class StationTracksResult(YandexMusicObject):
|
class StationTracksResult(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
id_,
|
id_: Optional['Id'],
|
||||||
sequence,
|
sequence: List['Sequence'],
|
||||||
batch_id,
|
batch_id,
|
||||||
pumpkin,
|
pumpkin,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.sequence = sequence
|
self.sequence = sequence
|
||||||
self.batch_id = batch_id
|
self.batch_id = batch_id
|
||||||
|
@ -18,7 +23,7 @@ class StationTracksResult(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.sequence, self.batch_id, self.pumpkin)
|
self._id_attrs = (self.id, self.sequence, self.batch_id, self.pumpkin)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data, client) -> Optional['StationTracksResult']:
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Value(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
value,
|
value,
|
||||||
name,
|
name,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.value = value
|
self.value = value
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class Value(YandexMusicObject):
|
||||||
self._id_attrs = (self.value, self.name)
|
self._id_attrs = (self.value, self.name)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -23,7 +28,7 @@ class Value(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video
|
from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,8 +20,8 @@ class Best(YandexMusicObject):
|
||||||
type_,
|
type_,
|
||||||
result,
|
result,
|
||||||
text=None,
|
text=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.type = type_
|
self.type = type_
|
||||||
self.result = result
|
self.result = result
|
||||||
|
|
||||||
|
@ -26,7 +31,7 @@ class Best(YandexMusicObject):
|
||||||
self._id_attrs = (self.type, self.result)
|
self._id_attrs = (self.type, self.result)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,8 +50,8 @@ class Search(YandexMusicObject):
|
||||||
videos,
|
videos,
|
||||||
misspell_corrected=None,
|
misspell_corrected=None,
|
||||||
nocorrect=None,
|
nocorrect=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.search_request_id = search_request_id
|
self.search_request_id = search_request_id
|
||||||
self.text = text
|
self.text = text
|
||||||
self.best = best
|
self.best = best
|
||||||
|
@ -64,7 +69,7 @@ class Search(YandexMusicObject):
|
||||||
self.artists, self.playlists, self.tracks, self.videos)
|
self.artists, self.playlists, self.tracks, self.videos)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video
|
from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,8 +21,8 @@ class SearchResult(YandexMusicObject):
|
||||||
per_page,
|
per_page,
|
||||||
order,
|
order,
|
||||||
results,
|
results,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.total = total
|
self.total = total
|
||||||
self.per_page = per_page
|
self.per_page = per_page
|
||||||
self.order = order
|
self.order = order
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client, Best
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Suggestions(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
best,
|
best,
|
||||||
suggestions,
|
suggestions,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.best = best
|
self.best = best
|
||||||
self.suggestions = suggestions
|
self.suggestions = suggestions
|
||||||
|
|
||||||
|
@ -20,7 +25,7 @@ class Suggestions(YandexMusicObject):
|
||||||
return iter(self.suggestions)
|
return iter(self.suggestions)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client') -> Optional['Suggestions']:
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Major(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
id_,
|
id_,
|
||||||
name,
|
name,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class Major(YandexMusicObject):
|
||||||
self._id_attrs = (self.id, self.name)
|
self._id_attrs = (self.id, self.name)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +10,8 @@ class Normalization(YandexMusicObject):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
gain,
|
gain,
|
||||||
peak,
|
peak,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.gain = gain
|
self.gain = gain
|
||||||
self.peak = peak
|
self.peak = peak
|
||||||
|
|
||||||
|
@ -14,7 +19,7 @@ class Normalization(YandexMusicObject):
|
||||||
self._id_attrs = (self.gain, self.peak)
|
self._id_attrs = (self.gain, self.peak)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional, List
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,8 +31,8 @@ class Track(YandexMusicObject):
|
||||||
explicit=None,
|
explicit=None,
|
||||||
preview_duration_ms=None,
|
preview_duration_ms=None,
|
||||||
available_full_without_permission=None,
|
available_full_without_permission=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.id = id_
|
self.id = id_
|
||||||
self.title = title
|
self.title = title
|
||||||
self.available = available
|
self.available = available
|
||||||
|
@ -119,7 +124,7 @@ class Track(YandexMusicObject):
|
||||||
return f'{self.id}'
|
return f'{self.id}'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -133,7 +138,7 @@ class Track(YandexMusicObject):
|
||||||
return cls(client=client, **data)
|
return cls(client=client, **data)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_list(cls, data, client):
|
def de_list(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,8 +32,8 @@ class CaptchaResponse(YandexMusicObject):
|
||||||
x_captcha_key,
|
x_captcha_key,
|
||||||
error_description,
|
error_description,
|
||||||
error,
|
error,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.x_captcha_url = x_captcha_url
|
self.x_captcha_url = x_captcha_url
|
||||||
self.x_captcha_key = x_captcha_key
|
self.x_captcha_key = x_captcha_key
|
||||||
self.error_description = error_description
|
self.error_description = error_description
|
||||||
|
@ -51,7 +56,7 @@ class CaptchaResponse(YandexMusicObject):
|
||||||
self.client.request.download(self.x_captcha_url, filename)
|
self.client.request.download(self.x_captcha_url, filename)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
"""Десериализация объекта.
|
"""Десериализация объекта.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from yandex_music import Client
|
||||||
|
|
||||||
from yandex_music import YandexMusicObject
|
from yandex_music import YandexMusicObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,8 +13,8 @@ class Response(YandexMusicObject):
|
||||||
result=None,
|
result=None,
|
||||||
error=None,
|
error=None,
|
||||||
error_description=None,
|
error_description=None,
|
||||||
client=None,
|
client: Optional['Client'] = None,
|
||||||
**kwargs):
|
**kwargs) -> None:
|
||||||
self.data = data
|
self.data = data
|
||||||
self.invocation_info = invocation_info
|
self.invocation_info = invocation_info
|
||||||
self._result = result
|
self._result = result
|
||||||
|
@ -27,7 +32,7 @@ class Response(YandexMusicObject):
|
||||||
return self.data if self._result is None else self._result
|
return self.data if self._result is None else self._result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def de_json(cls, data, client):
|
def de_json(cls, data: dict, client: 'Client'):
|
||||||
if not data:
|
if not data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
読み込み中…
新しいイシューから参照