diff --git a/yandex_music/album/album.py b/yandex_music/album/album.py index 2dcab04..dcd0156 100644 --- a/yandex_music/album/album.py +++ b/yandex_music/album/album.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -28,8 +33,8 @@ class Album(YandexMusicObject): type_=None, track_position=None, regions=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.title = title self.track_count = track_count @@ -106,7 +111,7 @@ class Album(YandexMusicObject): return self.client.users_likes_albums_remove(self.id, self.client.me.account.uid, *args, **kwargs) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -121,7 +126,7 @@ class Album(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/album/label.py b/yandex_music/album/label.py index 9b19a28..f99f5f4 100644 --- a/yandex_music/album/label.py +++ b/yandex_music/album/label.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -19,8 +24,8 @@ class Label(YandexMusicObject): def __init__(self, id_, name, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.name = name @@ -28,7 +33,7 @@ class Label(YandexMusicObject): self._id_attrs = (self.id, self.name) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: @@ -46,7 +51,7 @@ class Label(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): """Десериализация списка объектов. Args: diff --git a/yandex_music/album/track_position.py b/yandex_music/album/track_position.py index 41c8001..361ae25 100644 --- a/yandex_music/album/track_position.py +++ b/yandex_music/album/track_position.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class TrackPosition(YandexMusicObject): def __init__(self, volume, index, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.volume = volume self.index = index @@ -14,7 +19,7 @@ class TrackPosition(YandexMusicObject): self._id_attrs = (self.volume, self.index) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/artist/artist.py b/yandex_music/artist/artist.py index 6405269..0a3b2e8 100644 --- a/yandex_music/artist/artist.py +++ b/yandex_music/artist/artist.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -28,8 +33,8 @@ class Artist(YandexMusicObject): aliases=None, init_date=None, end_date=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.name = name self.cover = cover @@ -103,7 +108,7 @@ class Artist(YandexMusicObject): return self.client.artists_direct_albums(self.id, page, page_size, sort_by, *args, **kwargs) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -120,7 +125,7 @@ class Artist(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/artist/artist_albums.py b/yandex_music/artist/artist_albums.py index be6c9c3..5b68f9d 100644 --- a/yandex_music/artist/artist_albums.py +++ b/yandex_music/artist/artist_albums.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -21,8 +26,8 @@ class ArtistAlbums(YandexMusicObject): def __init__(self, albums, pager, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.albums = albums self.pager = pager @@ -30,7 +35,7 @@ class ArtistAlbums(YandexMusicObject): self._id_attrs = (self.pager, self.albums) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/artist/artist_tracks.py b/yandex_music/artist/artist_tracks.py index 40ba151..b9b7e66 100644 --- a/yandex_music/artist/artist_tracks.py +++ b/yandex_music/artist/artist_tracks.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -21,8 +26,8 @@ class ArtistTracks(YandexMusicObject): def __init__(self, tracks, pager, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.tracks = tracks self.pager = pager @@ -30,7 +35,7 @@ class ArtistTracks(YandexMusicObject): self._id_attrs = (self.pager, self.tracks) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/artist/brief_info.py b/yandex_music/artist/brief_info.py index 8b6c759..da5a455 100644 --- a/yandex_music/artist/brief_info.py +++ b/yandex_music/artist/brief_info.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -16,8 +21,8 @@ class BriefInfo(YandexMusicObject): has_promotions, playlist_ids, tracks_in_chart=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.artist = artist self.albums = albums self.also_albums = also_albums @@ -39,7 +44,7 @@ class BriefInfo(YandexMusicObject): self.has_promotions, self.playlist_ids) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/artist/counts.py b/yandex_music/artist/counts.py index 310a243..098b789 100644 --- a/yandex_music/artist/counts.py +++ b/yandex_music/artist/counts.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -7,8 +12,8 @@ class Counts(YandexMusicObject): direct_albums, also_albums, also_tracks, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.tracks = tracks self.direct_albums = direct_albums self.also_albums = also_albums @@ -18,7 +23,7 @@ class Counts(YandexMusicObject): self._id_attrs = (self.tracks, self.direct_albums, self.also_albums, self.also_tracks) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/artist/description.py b/yandex_music/artist/description.py index 0e91170..deef362 100644 --- a/yandex_music/artist/description.py +++ b/yandex_music/artist/description.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Description(YandexMusicObject): def __init__(self, text, url, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.text = text self.url = url @@ -14,7 +19,7 @@ class Description(YandexMusicObject): self._id_attrs = (self.text, self.url) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/artist/link.py b/yandex_music/artist/link.py index 2e42a38..c2aec6c 100644 --- a/yandex_music/artist/link.py +++ b/yandex_music/artist/link.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -7,8 +12,8 @@ class Link(YandexMusicObject): href, type_, social_network=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.title = title self.href = href self.type = type_ @@ -19,7 +24,7 @@ class Link(YandexMusicObject): self._id_attrs = (self.title, self.href, self.type) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -28,7 +33,7 @@ class Link(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/artist/ratings.py b/yandex_music/artist/ratings.py index 4360175..4a37aea 100644 --- a/yandex_music/artist/ratings.py +++ b/yandex_music/artist/ratings.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class Ratings(YandexMusicObject): week, month, day=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.week = week self.month = month @@ -17,7 +22,7 @@ class Ratings(YandexMusicObject): self._id_attrs = (self.week, self.month) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/artist/vinyl.py b/yandex_music/artist/vinyl.py index 1e89b63..cfcf913 100644 --- a/yandex_music/artist/vinyl.py +++ b/yandex_music/artist/vinyl.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -9,8 +14,8 @@ class Vinyl(YandexMusicObject): year, price, media, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.url = url self.picture = picture self.title = title @@ -22,7 +27,7 @@ class Vinyl(YandexMusicObject): self._id_attrs = (self.title, self.price, self.year, self.url, self.price, self.media) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: @@ -42,7 +47,7 @@ class Vinyl(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): """Десериализация списка объектов. Args: diff --git a/yandex_music/client.py b/yandex_music/client.py index b7ee040..a2cd5a4 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -1,7 +1,7 @@ import logging import functools from datetime import datetime -from typing import Callable, Union, List +from typing import Callable, Union, List, Optional from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \ TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \ @@ -70,8 +70,8 @@ class Client(YandexMusicObject): :class:`yandex_music.utils.request.Request`. """ - def __init__(self, token: str = None, fetch_account_status: bool = True, base_url: str = None, - oauth_url: str = None, request: Request = None) -> None: + def __init__(self, token: Optional[str] = None, fetch_account_status: bool = True, base_url: Optional[str] = None, + oauth_url: Optional[str] = None, request: Request = None) -> None: self.logger = logging.getLogger(__name__) self.token = token @@ -94,7 +94,7 @@ class Client(YandexMusicObject): self.me = self.account_status() @classmethod - def from_credentials(cls, username: str, password: str, x_captcha_answer: str = None, x_captcha_key: str = None, + def from_credentials(cls, username: str, password: str, x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None, captcha_callback: Callable[[Captcha], str] = None, *args, **kwargs) -> 'Client': """Инициализция клиента по логину и паролю. @@ -151,8 +151,8 @@ class Client(YandexMusicObject): @log def generate_token_by_username_and_password(self, username: str, password: str, grant_type: str = 'password', - x_captcha_answer: str = None, x_captcha_key: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> str: + x_captcha_answer: Optional[str] = None, x_captcha_key: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> str: """Метод получения OAuth токена по логину и паролю. Args: @@ -217,7 +217,7 @@ class Client(YandexMusicObject): return self._request @log - def account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Status: + def account_status(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Status: """Получение статуса аккаунта. Нет обязательных параметров. Args: @@ -240,7 +240,7 @@ class Client(YandexMusicObject): return Status.de_json(result, self) @log - def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Settings: + def settings(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Settings: """Получение предложений по покупке. Нет обязательных параметров. Args: @@ -263,7 +263,7 @@ class Client(YandexMusicObject): return Settings.de_json(result, self) @log - def permission_alerts(self, timeout: Union[int, float] = None, *args, **kwargs) -> PermissionAlerts: + def permission_alerts(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> PermissionAlerts: """Получение оповещений. Нет обязательных параметров. Args: @@ -286,7 +286,7 @@ class Client(YandexMusicObject): return PermissionAlerts.de_json(result, self) @log - def account_experiments(self, timeout: Union[int, float] = None, *args, **kwargs) -> Experiments: + def account_experiments(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Experiments: """Получение значений экспериментальных функций аккаунта. Args: @@ -309,7 +309,7 @@ class Client(YandexMusicObject): return Experiments.de_json(result, self) @log - def consume_promo_code(self, code: str, language: str = 'en', timeout: Union[int, float] = None, + def consume_promo_code(self, code: str, language: str = 'en', timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> PromoCodeStatus: """Активация промо-кода. @@ -335,7 +335,7 @@ class Client(YandexMusicObject): return PromoCodeStatus.de_json(result, self) @log - def feed(self, timeout: Union[int, float] = None, *args, **kwargs) -> Feed: + def feed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Feed: """Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты. Args: @@ -358,7 +358,7 @@ class Client(YandexMusicObject): return Feed.de_json(result, self) @log - def feed_wizard_is_passed(self, timeout: Union[int, float] = None, *args, **kwargs) -> bool: + def feed_wizard_is_passed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: url = f'{self.base_url}/feed/wizard/is-passed' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -366,7 +366,7 @@ class Client(YandexMusicObject): return result.get('is_wizard_passed') or False @log - def landing(self, blocks: Union[str, List[str]], timeout: Union[int, float] = None, *args, **kwargs) -> Landing: + def landing(self, blocks: Union[str, List[str]], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Landing: """Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д. Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists, @@ -393,7 +393,7 @@ class Client(YandexMusicObject): return Landing.de_json(result, self) @log - def genres(self, timeout: Union[int, float] = None, *args, **kwargs) -> List[Genre]: + def genres(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Genre]: """Получение жанров музыки. Args: @@ -417,7 +417,7 @@ class Client(YandexMusicObject): @log def tracks_download_info(self, track_id: Union[str, int], get_direct_links: bool = False, - timeout: Union[int, float] = None, *args, **kwargs) -> List[DownloadInfo]: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[DownloadInfo]: """Получение информации о доступных вариантах загрузки трека. Args: @@ -442,7 +442,7 @@ class Client(YandexMusicObject): return DownloadInfo.de_list(result, self, get_direct_links) @log - def track_supplement(self, track_id: Union[str, int], timeout: Union[int, float] = None, + def track_supplement(self, track_id: Union[str, int], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Supplement: """Получение дополнительной информации о треке. @@ -469,16 +469,16 @@ class Client(YandexMusicObject): track_id: Union[str, int], from_: str, album_id: Union[str, int], - playlist_id: str = None, + playlist_id: Optional[str] = None, from_cache: bool = False, - play_id: str = None, - uid: int = None, - timestamp: str = None, - track_length_seconds: int = 0, - total_played_seconds: int = 0, - end_position_seconds: int = 0, - client_now: str = None, - timeout: Union[int, float] = None, + play_id: Optional[str] = None, + uid: Optional[int] = None, + timestamp: Optional[str] = None, + track_length_seconds: Optional[int] = 0, + total_played_seconds: Optional[int] = 0, + end_position_seconds: Optional[int] = 0, + client_now: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: """Метод для отправки текущего состояния прослушиваемого трека. @@ -530,7 +530,7 @@ class Client(YandexMusicObject): return result == 'ok' - def albums_with_tracks(self, album_id: Union[str, int], timeout: Union[int, float] = None, + def albums_with_tracks(self, album_id: Union[str, int], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Album: """Получение альбома по его уникальному идентификатору вместе с треками. @@ -559,9 +559,9 @@ class Client(YandexMusicObject): text: str, nocorrect: bool = False, type_: str = 'all', - page: int = 0, + page: Optional[int] = 0, playlist_in_best: bool = True, - timeout: Union[int, float] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Search: """Осуществление поиска по запросу и типу, получение результатов. @@ -598,7 +598,8 @@ class Client(YandexMusicObject): return Search.de_json(result, self) @log - def search_suggest(self, part: str, timeout: Union[int, float] = None, *args, **kwargs) -> Suggestions: + def search_suggest(self, part: str, timeout: Optional[Union[int, float]] = None, + *args, **kwargs) -> Optional[Suggestions]: """Получение подсказок по введенной части поискового запроса. Args: @@ -622,8 +623,8 @@ class Client(YandexMusicObject): return Suggestions.de_json(result, self) @log - def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]: + def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]: """Получение плейлиста или списка плейлистов по уникальным идентификаторам. Args: @@ -656,8 +657,8 @@ class Client(YandexMusicObject): return Playlist.de_list(result, self) @log - def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: + def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist: """Создание плейлиста. Args: @@ -691,8 +692,8 @@ class Client(YandexMusicObject): return Playlist.de_json(result, self) @log - def users_playlists_delete(self, kind: Union[str, int], user_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + def users_playlists_delete(self, kind: Union[str, int], user_id: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: """Удаление плейлиста. Args: @@ -719,8 +720,8 @@ class Client(YandexMusicObject): return result == 'ok' @log - def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: + def users_playlists_name(self, kind: Union[str, int], name: str, user_id: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist: """Изменение названия плейлиста. Args: @@ -749,8 +750,8 @@ class Client(YandexMusicObject): return Playlist.de_json(result, self) @log - def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: + def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Optional[Playlist]: """Изменение плейлиста. Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`. @@ -790,8 +791,8 @@ class Client(YandexMusicObject): @log def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int], - at: int = 0, revision: int = 1, user_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> Playlist: + at: Optional[int] = 0, revision: int = 1, user_id: Optional[str] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist: """Добавление трека в плейлист. Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at). @@ -824,7 +825,7 @@ class Client(YandexMusicObject): @log def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1, - user_id: str = None, timeout: Union[int, float] = None, + user_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist: """Удаление треков из плейлиста. @@ -856,7 +857,7 @@ class Client(YandexMusicObject): return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs) @log - def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Status: + def rotor_account_status(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Status: url = f'{self.base_url}/rotor/account/status' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -864,7 +865,8 @@ class Client(YandexMusicObject): return Status.de_json(result, self) @log - def rotor_stations_dashboard(self, timeout: Union[int, float] = None, *args, **kwargs) -> Dashboard: + def rotor_stations_dashboard(self, timeout: Optional[Union[int, float]] = None, + *args, **kwargs) -> Optional[Dashboard]: url = f'{self.base_url}/rotor/stations/dashboard' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -872,7 +874,7 @@ class Client(YandexMusicObject): return Dashboard.de_json(result, self) @log - def rotor_stations_list(self, language: str = 'en', timeout: Union[int, float] = None, + def rotor_stations_list(self, language: str = 'en', timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[StationResult]: url = f'{self.base_url}/rotor/stations/list' @@ -881,9 +883,10 @@ class Client(YandexMusicObject): return StationResult.de_list(result, self) @log - def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: int = None, from_: str = None, - batch_id: Union[str, int] = None, track_id: str = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp: Optional[int] = None, + from_: Optional[str] = None, batch_id: Union[str, int] = None, + track_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None, + *args, **kwargs) -> bool: if timestamp is None: timestamp = datetime.now().timestamp() @@ -907,19 +910,19 @@ class Client(YandexMusicObject): return result == 'ok' @log - def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: int = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: Optional[int] = None, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs) @log def rotor_station_genre_feedback_track_started(self, genre: str, track_id: str, batch_id: Union[str, int], - timestamp: int = None, timeout: Union[int, float] = None, + timestamp: Optional[int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id, timeout=timeout, *args, **kwargs) @log - def rotor_station_genre_info(self, genre: str, timeout: Union[int, float] = None, + def rotor_station_genre_info(self, genre: str, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[StationResult]: url = f'{self.base_url}/rotor/station/genre:{genre}/info' @@ -928,8 +931,8 @@ class Client(YandexMusicObject): return StationResult.de_list(result, self) @log - def rotor_station_genre_tracks(self, genre: str, timeout: Union[int, float] = None, - *args, **kwargs) -> StationTracksResult: + def rotor_station_genre_tracks(self, genre: str, timeout: Optional[Union[int, float]] = None, + *args, **kwargs) -> Optional[StationTracksResult]: url = f'{self.base_url}/rotor/station/genre:{genre}/tracks' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -937,7 +940,7 @@ class Client(YandexMusicObject): return StationTracksResult.de_json(result, self) @log - def artists_brief_info(self, artist_id: Union[str, int], timeout: Union[int, float] = None, + def artists_brief_info(self, artist_id: Union[str, int], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> BriefInfo: url = f'{self.base_url}/artists/{artist_id}/brief-info' @@ -946,8 +949,8 @@ class Client(YandexMusicObject): return BriefInfo.de_json(result, self) @log - def artists_tracks(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20, - timeout: Union[int, float] = None, *args, **kwargs) -> ArtistTracks: + def artists_tracks(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> ArtistTracks: """Получение треков артиста. Args: @@ -978,8 +981,8 @@ class Client(YandexMusicObject): return ArtistTracks.de_json(result, self) @log - def artists_direct_albums(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20, - sort_by: str = 'year', timeout: Union[int, float] = None, + def artists_direct_albums(self, artist_id: Union[str, int], page: Optional[int] = 0, page_size: int = 20, + sort_by: str = 'year', timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> ArtistAlbums: """Получение альбомов артиста. @@ -1015,7 +1018,7 @@ class Client(YandexMusicObject): return ArtistAlbums.de_json(result, self) def _like_action(self, object_type: str, ids: Union[List[Union[str, int]], str, int], remove: bool = False, - user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: + user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1031,51 +1034,51 @@ class Client(YandexMusicObject): @log def users_likes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs) @log def users_likes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs) @log def users_likes_artists_add(self, artist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs) def users_likes_artists_remove(self, artist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs) @log def users_likes_playlists_add(self, playlist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs) @log def users_likes_playlists_remove(self, playlist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs) @log def users_likes_albums_add(self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs) @log def users_likes_albums_remove(self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs) def _get_list(self, object_type: str, ids: Union[List[Union[str, int]], int, str], - params: dict = None, timeout: Union[int, float] = None, + params: dict = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Union[Artist, Album, Track, Playlist]]: if params is None: params = {} @@ -1088,27 +1091,27 @@ class Client(YandexMusicObject): return de_list.get(object_type)(result, self) @log - def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, + def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Artist]: return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs) @log - def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, + def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Album]: return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs) @log def tracks(self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True, - timeout: Union[int, float] = None, *args, **kwargs) -> List[Track]: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Track]: return self._get_list('track', track_ids, {'with-positions': with_positions}, timeout, *args, **kwargs) @log - def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, + def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]: return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs) @log - def users_playlists_list(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, + def users_playlists_list(self, user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1120,7 +1123,7 @@ class Client(YandexMusicObject): return Playlist.de_list(result, self) def _get_likes(self, object_type: str, user_id: Union[str, int] = None, params: dict = None, - timeout: Union[int, float] = None, *args, **kwargs) \ + timeout: Optional[Union[int, float]] = None, *args, **kwargs) \ -> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], TracksList]: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1135,29 +1138,29 @@ class Client(YandexMusicObject): return de_list_likes.get(object_type)(result, self) @log - def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, - timeout: Union[int, float] = None, *args, **kwargs) -> TracksList: + def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList: return self._get_likes('track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout, *args, **kwargs) @log - def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: Union[int, float] = None, + def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[AlbumsLikes]: return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs) @log def users_likes_artists(self, user_id: Union[str, int] = None, with_timestamps: bool = True, - timeout: Union[int, float] = None, *args, **kwargs) -> List[ArtistsLikes]: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[ArtistsLikes]: return self._get_likes('artist', user_id, {'with-timestamps': with_timestamps}, timeout, *args, **kwargs) @log - def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, + def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[PlaylistsLikes]: return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs) @log - def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, - timeout: Union[int, float] = None, *args, **kwargs) -> TracksList: + def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: Optional[int] = 0, + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1169,7 +1172,7 @@ class Client(YandexMusicObject): return TracksList.de_json(result.get('library'), self) def _dislike_action(self, ids: Union[List[Union[str, int]], str, int], remove: bool = False, - user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: + user_id: Union[str, int] = None, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1183,13 +1186,13 @@ class Client(YandexMusicObject): @log def users_dislikes_tracks_add(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs) @log def users_dislikes_tracks_remove(self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs) -> bool: + timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs) # camelCase псевдонимы diff --git a/yandex_music/feed/album_event.py b/yandex_music/feed/album_event.py index 45c01e9..300d439 100644 --- a/yandex_music/feed/album_event.py +++ b/yandex_music/feed/album_event.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class AlbumEvent(YandexMusicObject): def __init__(self, album, tracks, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.album = album self.tracks = tracks @@ -14,7 +19,7 @@ class AlbumEvent(YandexMusicObject): self._id_attrs = (self.album, self.tracks) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -26,7 +31,7 @@ class AlbumEvent(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/feed/artist_event.py b/yandex_music/feed/artist_event.py index 1e77114..8553223 100644 --- a/yandex_music/feed/artist_event.py +++ b/yandex_music/feed/artist_event.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class ArtistEvent(YandexMusicObject): artist, tracks, similar_to_artists_from_history, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.artist = artist self.tracks = tracks self.similar_to_artists_from_history = similar_to_artists_from_history @@ -16,7 +21,7 @@ class ArtistEvent(YandexMusicObject): self._id_attrs = (self.artist, self.tracks, self.similar_to_artists_from_history) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -29,7 +34,7 @@ class ArtistEvent(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/feed/day.py b/yandex_music/feed/day.py index b82f9c7..c4ce157 100644 --- a/yandex_music/feed/day.py +++ b/yandex_music/feed/day.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -7,8 +12,8 @@ class Day(YandexMusicObject): events, tracks_to_play_with_ads, tracks_to_play, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.day = day self.events = events self.tracks_to_play_with_ads = tracks_to_play_with_ads @@ -18,7 +23,7 @@ class Day(YandexMusicObject): self._id_attrs = (self.day, self.events, self.tracks_to_play_with_ads, self.tracks_to_play) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -31,7 +36,7 @@ class Day(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/feed/event.py b/yandex_music/feed/event.py index 5ae4f08..842b244 100644 --- a/yandex_music/feed/event.py +++ b/yandex_music/feed/event.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -13,8 +18,8 @@ class Event(YandexMusicObject): message=None, device=None, tracks_count=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.type = type_ @@ -31,7 +36,7 @@ class Event(YandexMusicObject): self._id_attrs = (self.id, self.type) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -44,7 +49,7 @@ class Event(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/feed/feed.py b/yandex_music/feed/feed.py index 2730784..75b6d98 100644 --- a/yandex_music/feed/feed.py +++ b/yandex_music/feed/feed.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -11,8 +16,8 @@ class Feed(YandexMusicObject): today, days, next_revision=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.can_get_more_events = can_get_more_events self.pumpkin = pumpkin self.is_wizard_passed = is_wizard_passed @@ -27,7 +32,7 @@ class Feed(YandexMusicObject): self._id_attrs = (self.can_get_more_events, self.generated_playlists, self.headlines, self.today, self.days) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/feed/generated_playlist.py b/yandex_music/feed/generated_playlist.py index a537a16..dcd5b12 100644 --- a/yandex_music/feed/generated_playlist.py +++ b/yandex_music/feed/generated_playlist.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -7,8 +12,8 @@ class GeneratedPlaylist(YandexMusicObject): ready, notify, data, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.ready = ready self.notify = notify @@ -18,7 +23,7 @@ class GeneratedPlaylist(YandexMusicObject): self._id_attrs = (self.type, self.ready, self.notify, self.data) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -29,7 +34,7 @@ class GeneratedPlaylist(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/feed/track_with_ads.py b/yandex_music/feed/track_with_ads.py index 86c62a2..01d7e7f 100644 --- a/yandex_music/feed/track_with_ads.py +++ b/yandex_music/feed/track_with_ads.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class TrackWithAds(YandexMusicObject): def __init__(self, type_, track, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.track = track @@ -14,7 +19,7 @@ class TrackWithAds(YandexMusicObject): self._id_attrs = (self.type, self.track) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -25,7 +30,7 @@ class TrackWithAds(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/genre/genre.py b/yandex_music/genre/genre.py index 0035e35..fcc7569 100644 --- a/yandex_music/genre/genre.py +++ b/yandex_music/genre/genre.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -16,8 +21,8 @@ class Genre(YandexMusicObject): radio_icon=None, sub_genres=None, hide_in_regions=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.weight = weight self.composer_top = composer_top @@ -37,7 +42,7 @@ class Genre(YandexMusicObject): self._id_attrs = (self.id, self.weight, self.composer_top, self.title, self.images, self.show_in_menu) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -51,7 +56,7 @@ class Genre(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/genre/images.py b/yandex_music/genre/images.py index 2c01278..1a73017 100644 --- a/yandex_music/genre/images.py +++ b/yandex_music/genre/images.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Images(YandexMusicObject): def __init__(self, _208x208=None, _300x300=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self._208x208 = _208x208 self._300x300 = _300x300 @@ -31,7 +36,7 @@ class Images(YandexMusicObject): self.client.request.download(self._300x300, filename) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/genre/title.py b/yandex_music/genre/title.py index 19f3493..c269297 100644 --- a/yandex_music/genre/title.py +++ b/yandex_music/genre/title.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Title(YandexMusicObject): def __init__(self, title, full_title=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.title = title self.full_title = full_title @@ -14,7 +19,7 @@ class Title(YandexMusicObject): self._id_attrs = (self.title, self.full_title) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/landing/block.py b/yandex_music/landing/block.py index a58cf7c..07158ba 100644 --- a/yandex_music/landing/block.py +++ b/yandex_music/landing/block.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -10,8 +15,8 @@ class Block(YandexMusicObject): entities, description=None, data=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.type = type_ @@ -29,7 +34,7 @@ class Block(YandexMusicObject): return self.entities[item] @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -46,7 +51,7 @@ class Block(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/landing/block_entity.py b/yandex_music/landing/block_entity.py index 76d643c..b87a0b8 100644 --- a/yandex_music/landing/block_entity.py +++ b/yandex_music/landing/block_entity.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject, Promotion, Album, Playlist, MixLink, PlayContext, ChartItem,\ GeneratedPlaylist @@ -18,8 +23,8 @@ class BlockEntity(YandexMusicObject): id_, type_, data, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.type = type_ @@ -29,7 +34,7 @@ class BlockEntity(YandexMusicObject): self._id_attrs = (self.id, self.type, self.data) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -39,7 +44,7 @@ class BlockEntity(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/landing/chart.py b/yandex_music/landing/chart.py index c28b871..7aea861 100644 --- a/yandex_music/landing/chart.py +++ b/yandex_music/landing/chart.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -8,8 +13,8 @@ class Chart(YandexMusicObject): listeners, shift, track_id=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.position = position self.progress = progress self.listeners = listeners @@ -21,7 +26,7 @@ class Chart(YandexMusicObject): self._id_attrs = (self.position, self.progress, self.listeners, self.shift, self.track_id) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: @@ -43,7 +48,7 @@ class Chart(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): """Десериализация списка объектов. Args: diff --git a/yandex_music/landing/chart_item.py b/yandex_music/landing/chart_item.py index 1c64a06..b776c54 100644 --- a/yandex_music/landing/chart_item.py +++ b/yandex_music/landing/chart_item.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class ChartItem(YandexMusicObject): def __init__(self, track, chart, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.track = track self.chart = chart @@ -14,7 +19,7 @@ class ChartItem(YandexMusicObject): self._id_attrs = (self.track, self.chart) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -26,7 +31,7 @@ class ChartItem(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/landing/landing.py b/yandex_music/landing/landing.py index 58b1e46..4706011 100644 --- a/yandex_music/landing/landing.py +++ b/yandex_music/landing/landing.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class Landing(YandexMusicObject): pumpkin, content_id, blocks, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.pumpkin = pumpkin self.content_id = content_id @@ -20,7 +25,7 @@ class Landing(YandexMusicObject): return self.blocks[item] @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/landing/mix_link.py b/yandex_music/landing/mix_link.py index acb7db3..0bb3012 100644 --- a/yandex_music/landing/mix_link.py +++ b/yandex_music/landing/mix_link.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -10,8 +15,8 @@ class MixLink(YandexMusicObject): background_color, background_image_uri, cover_white, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.title = title self.url = url self.url_scheme = url_scheme @@ -35,7 +40,7 @@ class MixLink(YandexMusicObject): self.client.request.download(f'https://{self.background_image_uri.replace("%%", size)}', filename) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -44,7 +49,7 @@ class MixLink(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/landing/personal_playlists_data.py b/yandex_music/landing/personal_playlists_data.py index 6a8bd11..4980d90 100644 --- a/yandex_music/landing/personal_playlists_data.py +++ b/yandex_music/landing/personal_playlists_data.py @@ -1,18 +1,23 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject class PersonalPlaylistsData(YandexMusicObject): def __init__(self, is_wizard_passed, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.is_wizard_passed = is_wizard_passed self.client = client self._id_attrs = (self.is_wizard_passed,) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/landing/play_context.py b/yandex_music/landing/play_context.py index 6916975..bd945c4 100644 --- a/yandex_music/landing/play_context.py +++ b/yandex_music/landing/play_context.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -7,8 +12,8 @@ class PlayContext(YandexMusicObject): context, context_item, tracks, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.client_ = client_ self.context = context self.context_item = context_item @@ -18,7 +23,7 @@ class PlayContext(YandexMusicObject): self._id_attrs = (self.client_, self.context_item, self.context_item, self.tracks) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/landing/play_contexts_data.py b/yandex_music/landing/play_contexts_data.py index cab789e..0145326 100644 --- a/yandex_music/landing/play_contexts_data.py +++ b/yandex_music/landing/play_contexts_data.py @@ -1,18 +1,23 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject class PlayContextsData(YandexMusicObject): def __init__(self, other_tracks, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.other_tracks = other_tracks self.client = client self._id_attrs = (self.other_tracks,) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/landing/promotion.py b/yandex_music/landing/promotion.py index eef8ede..2f65d22 100644 --- a/yandex_music/landing/promotion.py +++ b/yandex_music/landing/promotion.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -12,8 +17,8 @@ class Promotion(YandexMusicObject): text_color, gradient, image, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.promo_id = promo_id self.title = title self.subtitle = subtitle @@ -29,7 +34,7 @@ class Promotion(YandexMusicObject): self.url, self.url_scheme, self.text_color, self.gradient, self.image) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -38,7 +43,7 @@ class Promotion(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/landing/track_id.py b/yandex_music/landing/track_id.py index 1d10694..590361e 100644 --- a/yandex_music/landing/track_id.py +++ b/yandex_music/landing/track_id.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class TrackId(YandexMusicObject): def __init__(self, id_, album_id=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.album_id = album_id @@ -14,7 +19,7 @@ class TrackId(YandexMusicObject): self._id_attrs = (self.id, self.album_id) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/landing/track_short_old.py b/yandex_music/landing/track_short_old.py index 15e17fd..9f06616 100644 --- a/yandex_music/landing/track_short_old.py +++ b/yandex_music/landing/track_short_old.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class TrackShortOld(YandexMusicObject): def __init__(self, track_id, timestamp, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.track_id = track_id self.timestamp = timestamp @@ -14,7 +19,7 @@ class TrackShortOld(YandexMusicObject): self._id_attrs = (self.track_id,) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -25,7 +30,7 @@ class TrackShortOld(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/likes/albums_likes.py b/yandex_music/likes/albums_likes.py index 11ed75d..6c27533 100644 --- a/yandex_music/likes/albums_likes.py +++ b/yandex_music/likes/albums_likes.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class AlbumsLikes(YandexMusicObject): timestamp, id_=None, album=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.album = album self.timestamp = timestamp @@ -16,7 +21,7 @@ class AlbumsLikes(YandexMusicObject): self._id_attrs = (self.id, self.album) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -27,7 +32,7 @@ class AlbumsLikes(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/likes/artists_likes.py b/yandex_music/likes/artists_likes.py index 3c38051..488cc95 100644 --- a/yandex_music/likes/artists_likes.py +++ b/yandex_music/likes/artists_likes.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class ArtistsLikes(YandexMusicObject): id_=None, artist=None, timestamp=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.artist = artist self.timestamp = timestamp @@ -16,7 +21,7 @@ class ArtistsLikes(YandexMusicObject): self._id_attrs = (self.id, self.artist) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -32,7 +37,7 @@ class ArtistsLikes(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/likes/playlists_likes.py b/yandex_music/likes/playlists_likes.py index f68f6e6..3b9946f 100644 --- a/yandex_music/likes/playlists_likes.py +++ b/yandex_music/likes/playlists_likes.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class PlaylistsLikes(YandexMusicObject): timestamp, id_=None, playlist=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.playlist = playlist self.timestamp = timestamp @@ -16,7 +21,7 @@ class PlaylistsLikes(YandexMusicObject): self._id_attrs = (self.id, self.playlist) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -27,7 +32,7 @@ class PlaylistsLikes(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/playlist/case_forms.py b/yandex_music/playlist/case_forms.py index e9ee763..43732d5 100644 --- a/yandex_music/playlist/case_forms.py +++ b/yandex_music/playlist/case_forms.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -9,8 +14,8 @@ class CaseForms(YandexMusicObject): accusative, instrumental, prepositional, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.nominative = nominative self.genitive = genitive self.dative = dative @@ -23,7 +28,7 @@ class CaseForms(YandexMusicObject): self.accusative, self.instrumental, self.prepositional) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/playlist/made_for.py b/yandex_music/playlist/made_for.py index d1cdb88..bb5d57b 100644 --- a/yandex_music/playlist/made_for.py +++ b/yandex_music/playlist/made_for.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class MadeFor(YandexMusicObject): def __init__(self, user_info, case_forms, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.user_info = user_info self.case_forms = case_forms @@ -14,7 +19,7 @@ class MadeFor(YandexMusicObject): self._id_attrs = (self.user_info, self.case_forms) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/playlist/play_counter.py b/yandex_music/playlist/play_counter.py index 93d6ce7..efceae2 100644 --- a/yandex_music/playlist/play_counter.py +++ b/yandex_music/playlist/play_counter.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class PlayCounter(YandexMusicObject): value, description, updated, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.value = value self.description = description self.updated = updated @@ -16,7 +21,7 @@ class PlayCounter(YandexMusicObject): self._id_attrs = (self.value, self.description, self.updated) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/playlist/playlist.py b/yandex_music/playlist/playlist.py index 5ef35d4..70545cd 100644 --- a/yandex_music/playlist/playlist.py +++ b/yandex_music/playlist/playlist.py @@ -1,13 +1,18 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, User, Cover, MadeFor, TrackShort, PlaylistAbsence, PlayCounter + from yandex_music import YandexMusicObject class Playlist(YandexMusicObject): def __init__(self, - owner, - cover, - made_for, - play_counter, - playlist_absence, + owner: Optional['User'], + cover: Optional['Cover'], + made_for: Optional['MadeFor'], + play_counter: Optional['PlayCounter'], + playlist_absence: Optional['PlaylistAbsence'], uid=None, kind=None, title=None, @@ -34,8 +39,8 @@ class Playlist(YandexMusicObject): description_formatted=None, is_for_from=None, regions=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.owner = owner self.cover = cover self.made_for = made_for @@ -73,14 +78,14 @@ class Playlist(YandexMusicObject): self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence) @property - def is_mine(self): + def is_mine(self) -> bool: return self.owner.uid == self.client.me.account.uid @property - def playlist_id(self): + def playlist_id(self) -> str: return f'{self.owner.uid}:{self.kind}' - def download_animated_cover(self, filename, size='200x200'): + def download_animated_cover(self, filename: str, size: Optional[str] = '200x200') -> None: """Загрузка анимированной обложки. Args: @@ -90,7 +95,7 @@ class Playlist(YandexMusicObject): self.client.request.download(f'https://{self.animated_cover_uri.replace("%%", size)}', filename) - def download_og_image(self, filename, size='200x200'): + def download_og_image(self, filename: str, size: Optional[str] = '200x200') -> None: """Загрузка обложки. Используйте это только когда нет self.cover! @@ -102,20 +107,20 @@ class Playlist(YandexMusicObject): self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename) - def rename(self, name): + def rename(self, name: str) -> None: client, kind = self.client, self.kind self.__dict__.clear() self.__dict__.update(client.users_playlists_name(kind, name).__dict__) - def like(self, *args, **kwargs): + def like(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_playlists_add(playlist.uid, user.id *args, **kwargs) """ return self.client.users_likes_playlists_add(self.uid, self.client.me.account.uid, *args, **kwargs) - def dislike(self, *args, **kwargs): + def dislike(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_playlists_remove(playlist.uid, user.id *args, **kwargs) @@ -123,7 +128,7 @@ class Playlist(YandexMusicObject): return self.client.users_likes_playlists_remove(self.uid, self.client.me.account.uid, *args, **kwargs) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Playlist']: if not data: return None @@ -143,7 +148,7 @@ class Playlist(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client') -> List['Playlist']: if not data: return [] diff --git a/yandex_music/playlist/playlist_absence.py b/yandex_music/playlist/playlist_absence.py index ef6d855..3aaec71 100644 --- a/yandex_music/playlist/playlist_absence.py +++ b/yandex_music/playlist/playlist_absence.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -21,8 +26,8 @@ class PlaylistAbsence(YandexMusicObject): def __init__(self, kind, reason, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.kind = kind self.reason = reason @@ -30,7 +35,7 @@ class PlaylistAbsence(YandexMusicObject): self._id_attrs = (self.kind, self.reason) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/playlist/playlist_id.py b/yandex_music/playlist/playlist_id.py index 2f91792..65a8af5 100644 --- a/yandex_music/playlist/playlist_id.py +++ b/yandex_music/playlist/playlist_id.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class PlaylistId(YandexMusicObject): def __init__(self, uid, kind, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.uid = uid self.kind = kind @@ -14,7 +19,7 @@ class PlaylistId(YandexMusicObject): self._id_attrs = (self.uid, self.kind) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: @@ -34,7 +39,7 @@ class PlaylistId(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): """Десериализация списка объектов. Args: diff --git a/yandex_music/playlist/user.py b/yandex_music/playlist/user.py index 500e376..a019a13 100644 --- a/yandex_music/playlist/user.py +++ b/yandex_music/playlist/user.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -28,8 +33,8 @@ class User(YandexMusicObject): name, sex, verified, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.uid = uid self.login = login self.name = name @@ -50,7 +55,7 @@ class User(YandexMusicObject): self.client.request.download(f'https://upics.yandex.net/{self.uid}/{format_}', filename) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/rotor/ad_params.py b/yandex_music/rotor/ad_params.py index df2aa37..01a2f9b 100644 --- a/yandex_music/rotor/ad_params.py +++ b/yandex_music/rotor/ad_params.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -11,8 +16,8 @@ class AdParams(YandexMusicObject): ad_volume, genre_id=None, genre_name=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.partner_id = partner_id self.category_id = category_id self.page_ref = page_ref @@ -28,7 +33,7 @@ class AdParams(YandexMusicObject): self.target_ref, self.other_params, self.ad_volume) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/dashboard.py b/yandex_music/rotor/dashboard.py index a12b30a..722f1fa 100644 --- a/yandex_music/rotor/dashboard.py +++ b/yandex_music/rotor/dashboard.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class Dashboard(YandexMusicObject): dashboard_id, stations, pumpkin, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.dashboard_id = dashboard_id self.stations = stations self.pumpkin = pumpkin @@ -16,7 +21,7 @@ class Dashboard(YandexMusicObject): self._id_attrs = (self.dashboard_id, self.stations, self.pumpkin) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Dashboard']: if not data: return None diff --git a/yandex_music/rotor/discrete_scale.py b/yandex_music/rotor/discrete_scale.py index 286b7df..39ac2cd 100644 --- a/yandex_music/rotor/discrete_scale.py +++ b/yandex_music/rotor/discrete_scale.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -7,8 +12,8 @@ class DiscreteScale(YandexMusicObject): name, min_, max_, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.name = name self.min = min_ @@ -18,7 +23,7 @@ class DiscreteScale(YandexMusicObject): self._id_attrs = (self.type, self.name, self.min, self.max) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/enum.py b/yandex_music/rotor/enum.py index 90c74c4..637c7d6 100644 --- a/yandex_music/rotor/enum.py +++ b/yandex_music/rotor/enum.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class Enum(YandexMusicObject): type_, name, possible_values, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.name = name self.possible_values = possible_values @@ -16,7 +21,7 @@ class Enum(YandexMusicObject): self._id_attrs = (self.type, self.name, self.possible_values) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/id.py b/yandex_music/rotor/id.py index 17cfe33..02cb603 100644 --- a/yandex_music/rotor/id.py +++ b/yandex_music/rotor/id.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Id(YandexMusicObject): def __init__(self, type_, tag, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.tag = tag @@ -14,7 +19,7 @@ class Id(YandexMusicObject): self._id_attrs = (self.type, self.tag) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/restrictions.py b/yandex_music/rotor/restrictions.py index 2908eb5..033057b 100644 --- a/yandex_music/rotor/restrictions.py +++ b/yandex_music/rotor/restrictions.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject, Enum, DiscreteScale @@ -14,8 +19,8 @@ class Restrictions(YandexMusicObject): mood=None, energy=None, mood_energy=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.language = language self.diversity = diversity self.mood = mood @@ -26,7 +31,7 @@ class Restrictions(YandexMusicObject): self._id_attrs = (self.language, self.diversity) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/rotor_settings.py b/yandex_music/rotor/rotor_settings.py index a795a44..dcab3f2 100644 --- a/yandex_music/rotor/rotor_settings.py +++ b/yandex_music/rotor/rotor_settings.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -8,8 +13,8 @@ class RotorSettings(YandexMusicObject): mood=None, energy=None, mood_energy=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.language = language self.diversity = diversity @@ -21,7 +26,7 @@ class RotorSettings(YandexMusicObject): self._id_attrs = (self.language, self.diversity) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/sequence.py b/yandex_music/rotor/sequence.py index 65425ff..3b40129 100644 --- a/yandex_music/rotor/sequence.py +++ b/yandex_music/rotor/sequence.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -6,8 +11,8 @@ class Sequence(YandexMusicObject): type_, track, liked, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.track = track self.liked = liked @@ -16,7 +21,7 @@ class Sequence(YandexMusicObject): self._id_attrs = (self.type, self.track, self.liked) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -27,7 +32,7 @@ class Sequence(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/rotor/station.py b/yandex_music/rotor/station.py index 742eb61..13b32f1 100644 --- a/yandex_music/rotor/station.py +++ b/yandex_music/rotor/station.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -12,8 +17,8 @@ class Station(YandexMusicObject): restrictions, restrictions2, parent_id=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.name = name self.icon = icon @@ -30,7 +35,7 @@ class Station(YandexMusicObject): self.id_for_from, self.restrictions, self.restrictions2) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/rotor/station_result.py b/yandex_music/rotor/station_result.py index 92f6a1a..51061ec 100644 --- a/yandex_music/rotor/station_result.py +++ b/yandex_music/rotor/station_result.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -9,8 +14,8 @@ class StationResult(YandexMusicObject): ad_params, explanation=None, prerolls=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.station = station self.settings = settings self.settings2 = settings2 @@ -22,7 +27,7 @@ class StationResult(YandexMusicObject): self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -36,7 +41,7 @@ class StationResult(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/rotor/station_tracks_result.py b/yandex_music/rotor/station_tracks_result.py index cf13d5c..1cae322 100644 --- a/yandex_music/rotor/station_tracks_result.py +++ b/yandex_music/rotor/station_tracks_result.py @@ -1,14 +1,19 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, Id, Sequence + from yandex_music import YandexMusicObject class StationTracksResult(YandexMusicObject): def __init__(self, - id_, - sequence, + id_: Optional['Id'], + sequence: List['Sequence'], batch_id, pumpkin, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.sequence = sequence self.batch_id = batch_id @@ -18,7 +23,7 @@ class StationTracksResult(YandexMusicObject): self._id_attrs = (self.id, self.sequence, self.batch_id, self.pumpkin) @classmethod - def de_json(cls, data, client): + def de_json(cls, data, client) -> Optional['StationTracksResult']: if not data: return None diff --git a/yandex_music/rotor/value.py b/yandex_music/rotor/value.py index 67ea74e..42a14f3 100644 --- a/yandex_music/rotor/value.py +++ b/yandex_music/rotor/value.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Value(YandexMusicObject): def __init__(self, value, name, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.value = value self.name = name @@ -14,7 +19,7 @@ class Value(YandexMusicObject): self._id_attrs = (self.value, self.name) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -23,7 +28,7 @@ class Value(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/search/best.py b/yandex_music/search/best.py index cd194ba..53b1432 100644 --- a/yandex_music/search/best.py +++ b/yandex_music/search/best.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video @@ -15,8 +20,8 @@ class Best(YandexMusicObject): type_, result, text=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.type = type_ self.result = result @@ -26,7 +31,7 @@ class Best(YandexMusicObject): self._id_attrs = (self.type, self.result) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/search/search.py b/yandex_music/search/search.py index 09e1c89..20c2381 100644 --- a/yandex_music/search/search.py +++ b/yandex_music/search/search.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -45,8 +50,8 @@ class Search(YandexMusicObject): videos, misspell_corrected=None, nocorrect=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.search_request_id = search_request_id self.text = text self.best = best @@ -64,7 +69,7 @@ class Search(YandexMusicObject): self.artists, self.playlists, self.tracks, self.videos) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/search/search_result.py b/yandex_music/search/search_result.py index 8ca3bbd..6ddc533 100644 --- a/yandex_music/search/search_result.py +++ b/yandex_music/search/search_result.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject, Artist, Album, Track, Playlist, Video @@ -16,8 +21,8 @@ class SearchResult(YandexMusicObject): per_page, order, results, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.total = total self.per_page = per_page self.order = order diff --git a/yandex_music/search/suggestions.py b/yandex_music/search/suggestions.py index 2af32a6..5712c97 100644 --- a/yandex_music/search/suggestions.py +++ b/yandex_music/search/suggestions.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client, Best + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Suggestions(YandexMusicObject): def __init__(self, best, suggestions, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.best = best self.suggestions = suggestions @@ -20,7 +25,7 @@ class Suggestions(YandexMusicObject): return iter(self.suggestions) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Suggestions']: if not data: return None diff --git a/yandex_music/track/major.py b/yandex_music/track/major.py index 9f5009f..f322c0c 100644 --- a/yandex_music/track/major.py +++ b/yandex_music/track/major.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Major(YandexMusicObject): def __init__(self, id_, name, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.name = name @@ -14,7 +19,7 @@ class Major(YandexMusicObject): self._id_attrs = (self.id, self.name) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/track/normalization.py b/yandex_music/track/normalization.py index db84931..edfd5db 100644 --- a/yandex_music/track/normalization.py +++ b/yandex_music/track/normalization.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -5,8 +10,8 @@ class Normalization(YandexMusicObject): def __init__(self, gain, peak, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.gain = gain self.peak = peak @@ -14,7 +19,7 @@ class Normalization(YandexMusicObject): self._id_attrs = (self.gain, self.peak) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None diff --git a/yandex_music/track/track.py b/yandex_music/track/track.py index d219b88..4eb04c6 100644 --- a/yandex_music/track/track.py +++ b/yandex_music/track/track.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -26,8 +31,8 @@ class Track(YandexMusicObject): explicit=None, preview_duration_ms=None, available_full_without_permission=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.title = title self.available = available @@ -119,7 +124,7 @@ class Track(YandexMusicObject): return f'{self.id}' @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None @@ -133,7 +138,7 @@ class Track(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client'): if not data: return [] diff --git a/yandex_music/utils/captcha_response.py b/yandex_music/utils/captcha_response.py index b41feb5..023c52a 100644 --- a/yandex_music/utils/captcha_response.py +++ b/yandex_music/utils/captcha_response.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -27,8 +32,8 @@ class CaptchaResponse(YandexMusicObject): x_captcha_key, error_description, error, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.x_captcha_url = x_captcha_url self.x_captcha_key = x_captcha_key self.error_description = error_description @@ -51,7 +56,7 @@ class CaptchaResponse(YandexMusicObject): self.client.request.download(self.x_captcha_url, filename) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): """Десериализация объекта. Args: diff --git a/yandex_music/utils/response.py b/yandex_music/utils/response.py index 650de28..c037a93 100644 --- a/yandex_music/utils/response.py +++ b/yandex_music/utils/response.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -8,8 +13,8 @@ class Response(YandexMusicObject): result=None, error=None, error_description=None, - client=None, - **kwargs): + client: Optional['Client'] = None, + **kwargs) -> None: self.data = data self.invocation_info = invocation_info self._result = result @@ -27,7 +32,7 @@ class Response(YandexMusicObject): return self.data if self._result is None else self._result @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client'): if not data: return None