From 26a4fc99c8ed7338c15025f9cc1f82afea843476 Mon Sep 17 00:00:00 2001 From: Marshal Date: Fri, 27 Dec 2019 11:42:24 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B0=D0=B9=D0=BF-=D1=85=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D1=83=D1=8E=D1=89=D0=B8=D1=85=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=BE=D0=B2:=20VideoSupplement,=20Supplement,=20Lyrics,=20Subs?= =?UTF-8?q?cription,=20Status,=20Product,=20Plus,=20Price,=20Permissions,?= =?UTF-8?q?=20PassportPhone,=20AutoRenewable,=20Account.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/cover.py | 4 +- yandex_music/icon.py | 2 +- yandex_music/status/account.py | 41 ++++++++++--------- yandex_music/status/auto_renewable.py | 27 ++++++++----- yandex_music/status/passport_phone.py | 15 ++++--- yandex_music/status/permissions.py | 17 +++++--- yandex_music/status/plus.py | 15 ++++--- yandex_music/status/price.py | 15 ++++--- yandex_music/status/product.py | 45 ++++++++++++--------- yandex_music/status/status.py | 33 ++++++++------- yandex_music/status/subscription.py | 19 +++++---- yandex_music/supplement/lyrics.py | 23 ++++++----- yandex_music/supplement/supplement.py | 19 +++++---- yandex_music/supplement/video_supplement.py | 30 ++++++++------ 14 files changed, 183 insertions(+), 122 deletions(-) diff --git a/yandex_music/cover.py b/yandex_music/cover.py index 39a40f9..2dab1a9 100644 --- a/yandex_music/cover.py +++ b/yandex_music/cover.py @@ -45,7 +45,7 @@ class Cover(YandexMusicObject): prefix: Optional[str] = None, error: Optional[str] = None, client: Optional['Client'] = None, - **kwargs): + **kwargs) -> None: self.type = type_ self.uri = uri self.items_uri = items_uri @@ -58,7 +58,7 @@ class Cover(YandexMusicObject): self.client = client self._id_attrs = (self.prefix, self.version, self.uri, self.items_uri) - def download(self, filename: str, index: int = 0, size: str = '200x200') -> None: + def download(self, filename: str, index: Optional[int] = 0, size: Optional[str] = '200x200') -> None: """Загрузка обложки. Args: diff --git a/yandex_music/icon.py b/yandex_music/icon.py index 0bd47ac..a33f282 100644 --- a/yandex_music/icon.py +++ b/yandex_music/icon.py @@ -34,7 +34,7 @@ class Icon(YandexMusicObject): self.client = client self._id_attrs = (self.background_color, self.image_url) - def download(self, filename: str, size: str = '200x200'): + def download(self, filename: str, size: Optional[str] = '200x200'): """Загрузка иконки. Args: diff --git a/yandex_music/status/account.py b/yandex_music/status/account.py index 7aee150..117ab95 100644 --- a/yandex_music/status/account.py +++ b/yandex_music/status/account.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, PassportPhone + from yandex_music import YandexMusicObject @@ -45,22 +50,22 @@ class Account(YandexMusicObject): """ def __init__(self, - now, - service_available, - region=None, - uid=None, - login=None, - full_name=None, - second_name=None, - first_name=None, - display_name=None, - hosted_user=None, - birthday=None, - passport_phones=None, - registered_at=None, - has_info_for_app_metrica=False, - client=None, - **kwargs): + now: str, + service_available: bool, + region: Optional[int] = None, + uid: Optional[int] = None, + login: Optional[str] = None, + full_name: Optional[str] = None, + second_name: Optional[str] = None, + first_name: Optional[str] = None, + display_name: Optional[str] = None, + hosted_user: Optional[bool] = None, + birthday: Optional[str] = None, + passport_phones: Optional[List['PassportPhone']] = None, + registered_at: Optional[str] = None, + has_info_for_app_metrica: Optional[bool] = False, + client: Optional['Client'] = None, + **kwargs) -> None: self.now = now self.service_available = service_available @@ -82,7 +87,7 @@ class Account(YandexMusicObject): if self.uid: self._id_attrs = (self.uid,) - def download_avatar(self, filename, format_='normal'): + def download_avatar(self, filename: str, format_: Optional[str] = 'normal') -> None: """Загрузка изображения пользователя. Args: @@ -93,7 +98,7 @@ class Account(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') -> Optional['Account']: """Десериализация объекта. Args: diff --git a/yandex_music/status/auto_renewable.py b/yandex_music/status/auto_renewable.py index 75a16cb..790df45 100644 --- a/yandex_music/status/auto_renewable.py +++ b/yandex_music/status/auto_renewable.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, Product + from yandex_music import YandexMusicObject, Product @@ -29,15 +34,15 @@ class AutoRenewable(YandexMusicObject): """ def __init__(self, - expires, - vendor, - vendor_help_url, - product_id, - product, - finished, - order_id=None, - client=None, - **kwargs): + expires: str, + vendor: str, + vendor_help_url: str, + product_id: str, + product: Optional['Product'], + finished: bool, + order_id: Optional[int] = None, + client: Optional['Client'] = None, + **kwargs) -> None: self.expires = expires self.vendor = vendor self.vendor_help_url = vendor_help_url @@ -51,7 +56,7 @@ class AutoRenewable(YandexMusicObject): self._id_attrs = (self.expires, self.vendor, self.vendor_help_url, self.product_id, self.product, self.finished) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['AutoRenewable']: """Десериализация объекта. Args: @@ -71,7 +76,7 @@ class AutoRenewable(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client') -> List['AutoRenewable']: """Десериализация списка объектов. Args: diff --git a/yandex_music/status/passport_phone.py b/yandex_music/status/passport_phone.py index 2b47893..220584c 100644 --- a/yandex_music/status/passport_phone.py +++ b/yandex_music/status/passport_phone.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 @@ -17,16 +22,16 @@ class PassportPhone(YandexMusicObject): """ def __init__(self, - phone, - client=None, - **kwargs): + phone: str, + client: Optional['Client'] = None, + **kwargs) -> None: self.phone = phone self.client = client self._id_attrs = (self.phone,) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['PassportPhone']: """Десериализация объекта. Args: @@ -45,7 +50,7 @@ class PassportPhone(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client') -> List['PassportPhone']: """Десериализация списка объектов. Args: diff --git a/yandex_music/status/permissions.py b/yandex_music/status/permissions.py index 697d881..027084d 100644 --- a/yandex_music/status/permissions.py +++ b/yandex_music/status/permissions.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,11 +26,11 @@ class Permissions(YandexMusicObject): """ def __init__(self, - until, - values, - default, - client=None, - **kwargs): + until: str, + values: List[str], + default: List[str], + client: Optional['Client'] = None, + **kwargs) -> None: self.until = until self.values = values self.default = default @@ -34,7 +39,7 @@ class Permissions(YandexMusicObject): self._id_attrs = (self.until, self.values, self.default) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Permissions']: """Десериализация объекта. Args: diff --git a/yandex_music/status/plus.py b/yandex_music/status/plus.py index ccb8c4a..b697f1e 100644 --- a/yandex_music/status/plus.py +++ b/yandex_music/status/plus.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -19,10 +24,10 @@ class Plus(YandexMusicObject): """ def __init__(self, - has_plus, - is_tutorial_completed, - client=None, - **kwargs): + has_plus: bool, + is_tutorial_completed: bool, + client: Optional['Client'] = None, + **kwargs) -> None: self.has_plus = has_plus self.is_tutorial_completed = is_tutorial_completed @@ -30,7 +35,7 @@ class Plus(YandexMusicObject): self._id_attrs = (self.has_plus, self.is_tutorial_completed) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Plus']: """Десериализация объекта. Args: diff --git a/yandex_music/status/price.py b/yandex_music/status/price.py index 3321efc..296af15 100644 --- a/yandex_music/status/price.py +++ b/yandex_music/status/price.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client + from yandex_music import YandexMusicObject @@ -19,10 +24,10 @@ class Price(YandexMusicObject): """ def __init__(self, - amount, - currency, - client=None, - **kwargs): + amount: int, + currency: str, + client: Optional['Client'] = None, + **kwargs) -> None: self.amount = amount self.currency = currency @@ -30,7 +35,7 @@ class Price(YandexMusicObject): self._id_attrs = (self.amount, self.currency) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Price']: """Десериализация объекта. Args: diff --git a/yandex_music/status/product.py b/yandex_music/status/product.py index 39f0b08..eeecee0 100644 --- a/yandex_music/status/product.py +++ b/yandex_music/status/product.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, Price + from yandex_music import YandexMusicObject, Price @@ -47,24 +52,24 @@ class Product(YandexMusicObject): """ def __init__(self, - product_id, - type_, - common_period_duration, - duration, - trial_duration, - price, - feature, - debug, - features=None, - description=None, - available=None, - trial_available=None, - vendor_trial_available=None, - button_text=None, - button_additional_text=None, - payment_method_types=None, - client=None, - **kwargs): + product_id: str, + type_: str, + common_period_duration: str, + duration: int, + trial_duration: int, + price: Optional['Price'], + feature: str, + debug: bool, + features: Optional[List[str]] = None, + description: Optional[str] = None, + available: Optional[bool] = None, + trial_available: Optional[bool] = None, + vendor_trial_available: Optional[bool] = None, + button_text: Optional[str] = None, + button_additional_text: Optional[str] = None, + payment_method_types: Optional[List[str]] = None, + client: Optional['Client'] = None, + **kwargs) -> None: self.product_id = product_id self.type = type_ self.common_period_duration = common_period_duration @@ -88,7 +93,7 @@ class Product(YandexMusicObject): self.trial_duration, self.product_id, self.feature, self.debug) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Product']: """Десериализация объекта. Args: @@ -108,7 +113,7 @@ class Product(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client') -> List['Product']: """Десериализация списка объектов. Args: diff --git a/yandex_music/status/status.py b/yandex_music/status/status.py index 341b6b3..43e8e77 100644 --- a/yandex_music/status/status.py +++ b/yandex_music/status/status.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from yandex_music import Client, Account, Permissions, Subscription, Plus + from yandex_music import YandexMusicObject @@ -45,19 +50,19 @@ class Status(YandexMusicObject): """ def __init__(self, - account, - permissions, - subscription=None, - cache_limit=None, - subeditor=None, - subeditor_level=None, - plus=None, - default_email=None, - skips_per_hour=None, - station_exists=None, - premium_region=None, - client=None, - **kwargs): + account: Optional['Account'], + permissions: Optional['Permissions'], + subscription: Optional['Subscription'] = None, + cache_limit: Optional[int] = None, + subeditor: Optional[bool] = None, + subeditor_level: Optional[int] = None, + plus: Optional['Plus'] = None, + default_email: Optional[str] = None, + skips_per_hour: Optional[int] = None, + station_exists: Optional[bool] = None, + premium_region: Optional[int] = None, + client: Optional['Client'] = None, + **kwargs) -> None: self.account = account self.permissions = permissions @@ -75,7 +80,7 @@ class Status(YandexMusicObject): self._id_attrs = (self.account, self.permissions) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Status']: """Десериализация объекта. Args: diff --git a/yandex_music/status/subscription.py b/yandex_music/status/subscription.py index d1905d4..422238b 100644 --- a/yandex_music/status/subscription.py +++ b/yandex_music/status/subscription.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, AutoRenewable + from yandex_music import YandexMusicObject @@ -25,12 +30,12 @@ class Subscription(YandexMusicObject): """ def __init__(self, - auto_renewable=None, - can_start_trial=None, - mcdonalds=None, - end=None, - client=None, - **kwargs): + auto_renewable: Optional[List['AutoRenewable']] = None, + can_start_trial: Optional[bool] = None, + mcdonalds: Optional[bool] = None, + end: Optional[str] = None, + client: Optional['Client'] = None, + **kwargs) -> None: self.auto_renewable = auto_renewable self.can_start_trial = can_start_trial self.mcdonalds = mcdonalds @@ -40,7 +45,7 @@ class Subscription(YandexMusicObject): self._id_attrs = (self.auto_renewable,) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Subscription']: """Десериализация объекта. Args: diff --git a/yandex_music/supplement/lyrics.py b/yandex_music/supplement/lyrics.py index b9efea6..a8f8d58 100644 --- a/yandex_music/supplement/lyrics.py +++ b/yandex_music/supplement/lyrics.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,14 +32,14 @@ class Lyrics(YandexMusicObject): """ def __init__(self, - id_, - lyrics, - full_lyrics, - has_rights, - text_language, - show_translation, - client=None, - **kwargs): + id_: int, + lyrics: str, + full_lyrics: str, + has_rights: bool, + text_language: str, + show_translation: bool, + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.lyrics = lyrics self.full_lyrics = full_lyrics @@ -47,7 +52,7 @@ class Lyrics(YandexMusicObject): self.text_language, self.show_translation) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Lyrics']: """Десериализация объекта. Args: diff --git a/yandex_music/supplement/supplement.py b/yandex_music/supplement/supplement.py index 0583bba..d47bd48 100644 --- a/yandex_music/supplement/supplement.py +++ b/yandex_music/supplement/supplement.py @@ -1,3 +1,8 @@ +from typing import TYPE_CHECKING, Optional, List + +if TYPE_CHECKING: + from yandex_music import Client, Lyrics, VideoSupplement + from yandex_music import YandexMusicObject @@ -25,12 +30,12 @@ class Supplement(YandexMusicObject): """ def __init__(self, - id_, - lyrics, - videos, - radio_is_available, - client=None, - **kwargs): + id_: int, + lyrics: Optional['Lyrics'], + videos: List['VideoSupplement'], + radio_is_available: bool, + client: Optional['Client'] = None, + **kwargs) -> None: self.id = id_ self.lyrics = lyrics self.videos = videos @@ -40,7 +45,7 @@ class Supplement(YandexMusicObject): self._id_attrs = (self.id, self.lyrics, self.videos, self.radio_is_available) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['Supplement']: """Десериализация объекта. Args: diff --git a/yandex_music/supplement/video_supplement.py b/yandex_music/supplement/video_supplement.py index fc35a63..9354b12 100644 --- a/yandex_music/supplement/video_supplement.py +++ b/yandex_music/supplement/video_supplement.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 @@ -29,15 +34,15 @@ class VideoSupplement(YandexMusicObject): """ def __init__(self, - cover, - title, - provider, - provider_video_id, - url=None, - embed_url=None, - embed=None, - client=None, - **kwargs): + cover: str, + title: str, + provider: str, + provider_video_id: str, + url: Optional[str] = None, + embed_url: Optional[str] = None, + embed: Optional[str] = None, + client: Optional['Client'] = None, + **kwargs) -> None: self.cover = cover self.title = title self.provider = provider @@ -51,7 +56,7 @@ class VideoSupplement(YandexMusicObject): self._id_attrs = (self.cover, self.title, self.provider_video_id) @classmethod - def de_json(cls, data, client): + def de_json(cls, data: dict, client: 'Client') -> Optional['VideoSupplement']: """Десериализация объекта. Args: @@ -70,7 +75,7 @@ class VideoSupplement(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data, client): + def de_list(cls, data: dict, client: 'Client') -> List['VideoSupplement']: """Десериализация списка объектов. Args: @@ -79,7 +84,8 @@ class VideoSupplement(YandexMusicObject): Music. Returns: - :obj:`list` из :obj:`yandex_music.VideoSupplement`: Список объектов класса :class:`yandex_music.VideoSupplement`. + :obj:`list` из :obj:`yandex_music.VideoSupplement`: Список объектов класса + :class:`yandex_music.VideoSupplement`. """ if not data: return [] From 75754454030af459f2c262e0f518f5f7e6180354 Mon Sep 17 00:00:00 2001 From: Marshal Date: Fri, 27 Dec 2019 12:14:51 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B0=D0=B9=D0=BF=20=D1=85=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=B2.=20=D0=92=20=D0=BA=D0=B0=D0=B6=D0=B4?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B5=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD?= =?UTF-8?q?=20Client,=20=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D1=82=D1=83=D1=80?= =?UTF-8?q?=D0=B0=20de=5Fjson=20=D0=B8=20de=5Flist,=20=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9=20=D1=82?= =?UTF-8?q?=D0=B8=D0=BF=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=BF=D1=86=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B0=D1=80=D0=B3?= =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B2=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=D1=85=20Client'a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/album/album.py | 13 +- yandex_music/album/label.py | 13 +- yandex_music/album/track_position.py | 11 +- yandex_music/artist/artist.py | 13 +- yandex_music/artist/artist_albums.py | 11 +- yandex_music/artist/artist_tracks.py | 11 +- yandex_music/artist/brief_info.py | 11 +- yandex_music/artist/counts.py | 11 +- yandex_music/artist/description.py | 11 +- yandex_music/artist/link.py | 13 +- yandex_music/artist/ratings.py | 11 +- yandex_music/artist/vinyl.py | 13 +- yandex_music/client.py | 175 +++++++++--------- yandex_music/feed/album_event.py | 13 +- yandex_music/feed/artist_event.py | 13 +- yandex_music/feed/day.py | 13 +- yandex_music/feed/event.py | 13 +- yandex_music/feed/feed.py | 11 +- yandex_music/feed/generated_playlist.py | 13 +- yandex_music/feed/track_with_ads.py | 13 +- yandex_music/genre/genre.py | 13 +- yandex_music/genre/images.py | 11 +- yandex_music/genre/title.py | 11 +- yandex_music/landing/block.py | 13 +- yandex_music/landing/block_entity.py | 13 +- yandex_music/landing/chart.py | 13 +- yandex_music/landing/chart_item.py | 13 +- yandex_music/landing/landing.py | 11 +- yandex_music/landing/mix_link.py | 13 +- .../landing/personal_playlists_data.py | 11 +- yandex_music/landing/play_context.py | 11 +- yandex_music/landing/play_contexts_data.py | 11 +- yandex_music/landing/promotion.py | 13 +- yandex_music/landing/track_id.py | 11 +- yandex_music/landing/track_short_old.py | 13 +- yandex_music/likes/albums_likes.py | 13 +- yandex_music/likes/artists_likes.py | 13 +- yandex_music/likes/playlists_likes.py | 13 +- yandex_music/playlist/case_forms.py | 11 +- yandex_music/playlist/made_for.py | 11 +- yandex_music/playlist/play_counter.py | 11 +- yandex_music/playlist/playlist.py | 37 ++-- yandex_music/playlist/playlist_absence.py | 11 +- yandex_music/playlist/playlist_id.py | 13 +- yandex_music/playlist/user.py | 11 +- yandex_music/rotor/ad_params.py | 11 +- yandex_music/rotor/dashboard.py | 11 +- yandex_music/rotor/discrete_scale.py | 11 +- yandex_music/rotor/enum.py | 11 +- yandex_music/rotor/id.py | 11 +- yandex_music/rotor/restrictions.py | 11 +- yandex_music/rotor/rotor_settings.py | 11 +- yandex_music/rotor/sequence.py | 13 +- yandex_music/rotor/station.py | 11 +- yandex_music/rotor/station_result.py | 13 +- yandex_music/rotor/station_tracks_result.py | 15 +- yandex_music/rotor/value.py | 13 +- yandex_music/search/best.py | 11 +- yandex_music/search/search.py | 11 +- yandex_music/search/search_result.py | 9 +- yandex_music/search/suggestions.py | 11 +- yandex_music/track/major.py | 11 +- yandex_music/track/normalization.py | 11 +- yandex_music/track/track.py | 13 +- yandex_music/utils/captcha_response.py | 11 +- yandex_music/utils/response.py | 11 +- 66 files changed, 650 insertions(+), 322 deletions(-) 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 From f94b11c107ac8279341cfd4f3db4478755089de0 Mon Sep 17 00:00:00 2001 From: Marshal Date: Fri, 27 Dec 2019 15:32:50 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=91=D0=B5=D1=81=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D1=83=D1=82=D0=B0=D0=BB=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20Optional=20=D0=B2=20?= =?UTF-8?q?=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=85=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20Client'a.=20=D0=A2?= =?UTF-8?q?=D0=B0=D0=B9=D0=BF=20=D1=85=D0=B8=D0=BD=D1=82=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20Playlist,=20Landing,=20Feed,=20Album?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/album/album.py | 24 ++-- yandex_music/client.py | 185 ++++++++++++++-------------- yandex_music/cover.py | 2 +- yandex_music/feed/feed.py | 8 +- yandex_music/icon.py | 2 +- yandex_music/landing/landing.py | 6 +- yandex_music/playlist/playlist.py | 4 +- yandex_music/status/account.py | 6 +- yandex_music/status/product.py | 4 +- yandex_music/status/subscription.py | 2 +- 10 files changed, 122 insertions(+), 121 deletions(-) diff --git a/yandex_music/album/album.py b/yandex_music/album/album.py index dcd0156..8f02e45 100644 --- a/yandex_music/album/album.py +++ b/yandex_music/album/album.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Artist, Label, TrackPosition, Track from yandex_music import YandexMusicObject @@ -11,8 +11,8 @@ class Album(YandexMusicObject): id_, title, track_count, - artists, - labels, + artists: List['Artist'], + labels: List['Label'], available, available_for_premium_users, cover_uri=None, @@ -27,11 +27,11 @@ class Album(YandexMusicObject): available_partially=None, bests=None, prerolls=None, - volumes=None, + volumes: List['Track'] = None, year=None, release_date=None, type_=None, - track_position=None, + track_position: Optional['TrackPosition'] = None, regions=None, client: Optional['Client'] = None, **kwargs) -> None: @@ -66,7 +66,7 @@ class Album(YandexMusicObject): self._id_attrs = (self.id, self.title, self.track_count, self.artists, self.labels, self.available_for_premium_users, self.available) - def with_tracks(self, *args, **kwargs): + def with_tracks(self, *args, **kwargs) -> Optional['Album']: """Сокращение для:: client.albums_with_tracks(album.id, *args, **kwargs) @@ -74,7 +74,7 @@ class Album(YandexMusicObject): return self.client.albums_with_tracks(self.id, *args, **kwargs) - def download_cover(self, filename, size='200x200'): + def download_cover(self, filename: str, size: str = '200x200') -> None: """Загрузка обложки. Args: @@ -84,7 +84,7 @@ class Album(YandexMusicObject): self.client.request.download(f'https://{self.cover_uri.replace("%%", size)}', filename) - def download_og_image(self, filename, size='200x200'): + def download_og_image(self, filename: str, size: str = '200x200') -> None: """Загрузка обложки. Предпочтительнее использовать self.download_cover(). @@ -96,14 +96,14 @@ class Album(YandexMusicObject): self.client.request.download(f'https://{self.og_image("%%", size)}', filename) - def like(self, *args, **kwargs): + def like(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_albums_add(album.id, user.id *args, **kwargs) """ return self.client.users_likes_albums_add(self.id, self.client.me.account.uid, *args, **kwargs) - def dislike(self, *args, **kwargs): + def dislike(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_albums_remove(album.id, user.id *args, **kwargs) @@ -111,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Album']: if not data: return None @@ -126,7 +126,7 @@ class Album(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Album']: if not data: return [] diff --git a/yandex_music/client.py b/yandex_music/client.py index a2cd5a4..9071efb 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -70,8 +70,8 @@ class Client(YandexMusicObject): :class:`yandex_music.utils.request.Request`. """ - 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: + def __init__(self, token: str = None, fetch_account_status: bool = True, base_url: str = None, + oauth_url: 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: Optional[str] = None, x_captcha_key: Optional[str] = None, + def from_credentials(cls, username: str, password: str, x_captcha_answer: str = None, x_captcha_key: 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: Optional[str] = None, x_captcha_key: Optional[str] = None, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> str: + x_captcha_answer: str = None, x_captcha_key: str = None, + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> Status: + def account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]: """Получение статуса аккаунта. Нет обязательных параметров. Args: @@ -240,7 +240,7 @@ class Client(YandexMusicObject): return Status.de_json(result, self) @log - def settings(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Settings: + def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]: """Получение предложений по покупке. Нет обязательных параметров. Args: @@ -263,7 +263,7 @@ class Client(YandexMusicObject): return Settings.de_json(result, self) @log - def permission_alerts(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> PermissionAlerts: + def permission_alerts(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[PermissionAlerts]: """Получение оповещений. Нет обязательных параметров. Args: @@ -286,7 +286,7 @@ class Client(YandexMusicObject): return PermissionAlerts.de_json(result, self) @log - def account_experiments(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Experiments: + def account_experiments(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Experiments]: """Получение значений экспериментальных функций аккаунта. Args: @@ -309,8 +309,8 @@ class Client(YandexMusicObject): return Experiments.de_json(result, self) @log - def consume_promo_code(self, code: str, language: str = 'en', timeout: Optional[Union[int, float]] = None, - *args, **kwargs) -> PromoCodeStatus: + def consume_promo_code(self, code: str, language: str = 'en', timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[PromoCodeStatus]: """Активация промо-кода. Args: @@ -335,7 +335,7 @@ class Client(YandexMusicObject): return PromoCodeStatus.de_json(result, self) @log - def feed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Feed: + def feed(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Feed]: """Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты. Args: @@ -358,7 +358,7 @@ class Client(YandexMusicObject): return Feed.de_json(result, self) @log - def feed_wizard_is_passed(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + def feed_wizard_is_passed(self, timeout: 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,8 @@ class Client(YandexMusicObject): return result.get('is_wizard_passed') or False @log - def landing(self, blocks: Union[str, List[str]], timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Landing: + def landing(self, blocks: Union[str, List[str]], timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[Landing]: """Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д. Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists, @@ -393,7 +394,7 @@ class Client(YandexMusicObject): return Landing.de_json(result, self) @log - def genres(self, timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Genre]: + def genres(self, timeout: Union[int, float] = None, *args, **kwargs) -> List[Genre]: """Получение жанров музыки. Args: @@ -417,7 +418,7 @@ class Client(YandexMusicObject): @log def tracks_download_info(self, track_id: Union[str, int], get_direct_links: bool = False, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[DownloadInfo]: + timeout: Union[int, float] = None, *args, **kwargs) -> List[DownloadInfo]: """Получение информации о доступных вариантах загрузки трека. Args: @@ -442,8 +443,8 @@ class Client(YandexMusicObject): return DownloadInfo.de_list(result, self, get_direct_links) @log - def track_supplement(self, track_id: Union[str, int], timeout: Optional[Union[int, float]] = None, - *args, **kwargs) -> Supplement: + def track_supplement(self, track_id: Union[str, int], timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[Supplement]: """Получение дополнительной информации о треке. Args: @@ -469,16 +470,16 @@ class Client(YandexMusicObject): track_id: Union[str, int], from_: str, album_id: Union[str, int], - playlist_id: Optional[str] = None, + playlist_id: str = None, from_cache: bool = False, - 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, + 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, *args, **kwargs) -> bool: """Метод для отправки текущего состояния прослушиваемого трека. @@ -530,8 +531,8 @@ class Client(YandexMusicObject): return result == 'ok' - def albums_with_tracks(self, album_id: Union[str, int], timeout: Optional[Union[int, float]] = None, - *args, **kwargs) -> Album: + def albums_with_tracks(self, album_id: Union[str, int], timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[Album]: """Получение альбома по его уникальному идентификатору вместе с треками. Args: @@ -559,10 +560,10 @@ class Client(YandexMusicObject): text: str, nocorrect: bool = False, type_: str = 'all', - page: Optional[int] = 0, + page: int = 0, playlist_in_best: bool = True, - timeout: Optional[Union[int, float]] = None, - *args, **kwargs) -> Search: + timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[Search]: """Осуществление поиска по запросу и типу, получение результатов. Args: @@ -598,7 +599,7 @@ class Client(YandexMusicObject): return Search.de_json(result, self) @log - def search_suggest(self, part: str, timeout: Optional[Union[int, float]] = None, + def search_suggest(self, part: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Suggestions]: """Получение подсказок по введенной части поискового запроса. @@ -623,8 +624,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: Optional[str] = None, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Playlist]: + 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]: """Получение плейлиста или списка плейлистов по уникальным идентификаторам. Args: @@ -657,8 +658,8 @@ class Client(YandexMusicObject): return Playlist.de_list(result, self) @log - def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Optional[str] = None, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist: + def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]: """Создание плейлиста. Args: @@ -692,8 +693,8 @@ class Client(YandexMusicObject): return Playlist.de_json(result, self) @log - def users_playlists_delete(self, kind: Union[str, int], user_id: Optional[str] = None, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + def users_playlists_delete(self, kind: Union[str, int], user_id: str = None, + timeout: Union[int, float] = None, *args, **kwargs) -> bool: """Удаление плейлиста. Args: @@ -720,8 +721,8 @@ class Client(YandexMusicObject): return result == 'ok' @log - 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: + def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]: """Изменение названия плейлиста. Args: @@ -750,8 +751,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: Optional[str] = None, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Optional[Playlist]: + 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) -> Optional[Playlist]: """Изменение плейлиста. Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`. @@ -791,8 +792,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: Optional[int] = 0, revision: int = 1, user_id: Optional[str] = None, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> Playlist: + at: int = 0, revision: int = 1, user_id: str = None, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]: """Добавление трека в плейлист. Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at). @@ -825,8 +826,8 @@ class Client(YandexMusicObject): @log def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1, - user_id: Optional[str] = None, timeout: Optional[Union[int, float]] = None, - *args, **kwargs) -> Playlist: + user_id: str = None, timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[Playlist]: """Удаление треков из плейлиста. Для удаление необходимо указать границы с какого по какой элемент (трек) удалить. @@ -857,7 +858,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: Optional[Union[int, float]] = None, *args, **kwargs) -> Status: + def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]: url = f'{self.base_url}/rotor/account/status' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -865,7 +866,7 @@ class Client(YandexMusicObject): return Status.de_json(result, self) @log - def rotor_stations_dashboard(self, timeout: Optional[Union[int, float]] = None, + def rotor_stations_dashboard(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Dashboard]: url = f'{self.base_url}/rotor/stations/dashboard' @@ -874,7 +875,7 @@ class Client(YandexMusicObject): return Dashboard.de_json(result, self) @log - def rotor_stations_list(self, language: str = 'en', timeout: Optional[Union[int, float]] = None, + def rotor_stations_list(self, language: str = 'en', timeout: Union[int, float] = None, *args, **kwargs) -> List[StationResult]: url = f'{self.base_url}/rotor/stations/list' @@ -883,9 +884,9 @@ class Client(YandexMusicObject): return StationResult.de_list(result, self) @log - 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, + 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: if timestamp is None: timestamp = datetime.now().timestamp() @@ -910,19 +911,19 @@ class Client(YandexMusicObject): return result == 'ok' @log - 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: + def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp: int = None, + timeout: 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: Optional[int] = None, timeout: Optional[Union[int, float]] = None, + timestamp: int = None, timeout: 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: Optional[Union[int, float]] = None, + def rotor_station_genre_info(self, genre: str, timeout: Union[int, float] = None, *args, **kwargs) -> List[StationResult]: url = f'{self.base_url}/rotor/station/genre:{genre}/info' @@ -931,7 +932,7 @@ class Client(YandexMusicObject): return StationResult.de_list(result, self) @log - def rotor_station_genre_tracks(self, genre: str, timeout: Optional[Union[int, float]] = None, + def rotor_station_genre_tracks(self, genre: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[StationTracksResult]: url = f'{self.base_url}/rotor/station/genre:{genre}/tracks' @@ -940,8 +941,8 @@ class Client(YandexMusicObject): return StationTracksResult.de_json(result, self) @log - def artists_brief_info(self, artist_id: Union[str, int], timeout: Optional[Union[int, float]] = None, - *args, **kwargs) -> BriefInfo: + def artists_brief_info(self, artist_id: Union[str, int], timeout: Union[int, float] = None, + *args, **kwargs) -> Optional[BriefInfo]: url = f'{self.base_url}/artists/{artist_id}/brief-info' result = self._request.get(url, timeout=timeout, *args, **kwargs) @@ -949,8 +950,8 @@ class Client(YandexMusicObject): return BriefInfo.de_json(result, self) @log - 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: + def artists_tracks(self, artist_id: Union[str, int], page: int = 0, page_size: int = 20, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[ArtistTracks]: """Получение треков артиста. Args: @@ -981,9 +982,9 @@ class Client(YandexMusicObject): return ArtistTracks.de_json(result, self) @log - 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: + 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, + *args, **kwargs) -> Optional[ArtistAlbums]: """Получение альбомов артиста. Известные значения для sort_by: year, rating. @@ -1018,7 +1019,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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1034,51 +1035,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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, + params: dict = None, timeout: Union[int, float] = None, *args, **kwargs) -> List[Union[Artist, Album, Track, Playlist]]: if params is None: params = {} @@ -1091,27 +1092,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: Optional[Union[int, float]] = None, + def artists(self, artist_ids: Union[List[Union[str, int]], int, str], timeout: 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: Optional[Union[int, float]] = None, + def albums(self, album_ids: Union[List[Union[str, int]], int, str], timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> List[Track]: + timeout: 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: Optional[Union[int, float]] = None, + def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: 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: Optional[Union[int, float]] = None, + def users_playlists_list(self, user_id: Union[str, int] = None, timeout: 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 @@ -1123,8 +1124,8 @@ 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: Optional[Union[int, float]] = None, *args, **kwargs) \ - -> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], TracksList]: + timeout: Union[int, float] = None, *args, **kwargs) \ + -> Union[List[ArtistsLikes], List[AlbumsLikes], List[PlaylistsLikes], Optional[TracksList]]: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1138,29 +1139,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: Optional[int] = 0, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList: + def users_likes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[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: Optional[Union[int, float]] = None, + def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> List[ArtistsLikes]: + timeout: 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: Optional[Union[int, float]] = None, + def users_likes_playlists(self, user_id: Union[str, int] = None, timeout: 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: Optional[int] = 0, - timeout: Optional[Union[int, float]] = None, *args, **kwargs) -> TracksList: + def users_dislikes_tracks(self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, + timeout: Union[int, float] = None, *args, **kwargs) -> Optional[TracksList]: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1172,7 +1173,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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> bool: if user_id is None and self.me is not None: user_id = self.me.account.uid @@ -1186,13 +1187,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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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: Optional[Union[int, float]] = None, *args, **kwargs) -> bool: + timeout: 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/cover.py b/yandex_music/cover.py index 2dab1a9..9ddee4c 100644 --- a/yandex_music/cover.py +++ b/yandex_music/cover.py @@ -58,7 +58,7 @@ class Cover(YandexMusicObject): self.client = client self._id_attrs = (self.prefix, self.version, self.uri, self.items_uri) - def download(self, filename: str, index: Optional[int] = 0, size: Optional[str] = '200x200') -> None: + def download(self, filename: str, index: int = 0, size: str = '200x200') -> None: """Загрузка обложки. Args: diff --git a/yandex_music/feed/feed.py b/yandex_music/feed/feed.py index 75b6d98..96a633d 100644 --- a/yandex_music/feed/feed.py +++ b/yandex_music/feed/feed.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, GeneratedPlaylist, Day from yandex_music import YandexMusicObject @@ -11,10 +11,10 @@ class Feed(YandexMusicObject): can_get_more_events, pumpkin, is_wizard_passed, - generated_playlists, + generated_playlists: List['GeneratedPlaylist'], headlines, today, - days, + days: Optional['Day'], next_revision=None, client: Optional['Client'] = None, **kwargs) -> None: @@ -32,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Feed']: if not data: return None diff --git a/yandex_music/icon.py b/yandex_music/icon.py index a33f282..0bd47ac 100644 --- a/yandex_music/icon.py +++ b/yandex_music/icon.py @@ -34,7 +34,7 @@ class Icon(YandexMusicObject): self.client = client self._id_attrs = (self.background_color, self.image_url) - def download(self, filename: str, size: Optional[str] = '200x200'): + def download(self, filename: str, size: str = '200x200'): """Загрузка иконки. Args: diff --git a/yandex_music/landing/landing.py b/yandex_music/landing/landing.py index 4706011..9bf369a 100644 --- a/yandex_music/landing/landing.py +++ b/yandex_music/landing/landing.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Block from yandex_music import YandexMusicObject @@ -10,7 +10,7 @@ class Landing(YandexMusicObject): def __init__(self, pumpkin, content_id, - blocks, + blocks: List['Block'], client: Optional['Client'] = None, **kwargs) -> None: @@ -25,7 +25,7 @@ class Landing(YandexMusicObject): return self.blocks[item] @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Landing']: if not data: return None diff --git a/yandex_music/playlist/playlist.py b/yandex_music/playlist/playlist.py index 70545cd..d938f4d 100644 --- a/yandex_music/playlist/playlist.py +++ b/yandex_music/playlist/playlist.py @@ -85,7 +85,7 @@ class Playlist(YandexMusicObject): def playlist_id(self) -> str: return f'{self.owner.uid}:{self.kind}' - def download_animated_cover(self, filename: str, size: Optional[str] = '200x200') -> None: + def download_animated_cover(self, filename: str, size: str = '200x200') -> None: """Загрузка анимированной обложки. Args: @@ -95,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: str, size: Optional[str] = '200x200') -> None: + def download_og_image(self, filename: str, size: str = '200x200') -> None: """Загрузка обложки. Используйте это только когда нет self.cover! diff --git a/yandex_music/status/account.py b/yandex_music/status/account.py index 117ab95..dc99a0e 100644 --- a/yandex_music/status/account.py +++ b/yandex_music/status/account.py @@ -61,9 +61,9 @@ class Account(YandexMusicObject): display_name: Optional[str] = None, hosted_user: Optional[bool] = None, birthday: Optional[str] = None, - passport_phones: Optional[List['PassportPhone']] = None, + passport_phones: List['PassportPhone'] = None, registered_at: Optional[str] = None, - has_info_for_app_metrica: Optional[bool] = False, + has_info_for_app_metrica: bool = False, client: Optional['Client'] = None, **kwargs) -> None: self.now = now @@ -87,7 +87,7 @@ class Account(YandexMusicObject): if self.uid: self._id_attrs = (self.uid,) - def download_avatar(self, filename: str, format_: Optional[str] = 'normal') -> None: + def download_avatar(self, filename: str, format_: str = 'normal') -> None: """Загрузка изображения пользователя. Args: diff --git a/yandex_music/status/product.py b/yandex_music/status/product.py index eeecee0..a2df139 100644 --- a/yandex_music/status/product.py +++ b/yandex_music/status/product.py @@ -60,14 +60,14 @@ class Product(YandexMusicObject): price: Optional['Price'], feature: str, debug: bool, - features: Optional[List[str]] = None, + features: List[str] = None, description: Optional[str] = None, available: Optional[bool] = None, trial_available: Optional[bool] = None, vendor_trial_available: Optional[bool] = None, button_text: Optional[str] = None, button_additional_text: Optional[str] = None, - payment_method_types: Optional[List[str]] = None, + payment_method_types: List[str] = None, client: Optional['Client'] = None, **kwargs) -> None: self.product_id = product_id diff --git a/yandex_music/status/subscription.py b/yandex_music/status/subscription.py index 422238b..0e47413 100644 --- a/yandex_music/status/subscription.py +++ b/yandex_music/status/subscription.py @@ -30,7 +30,7 @@ class Subscription(YandexMusicObject): """ def __init__(self, - auto_renewable: Optional[List['AutoRenewable']] = None, + auto_renewable: List['AutoRenewable'] = None, can_start_trial: Optional[bool] = None, mcdonalds: Optional[bool] = None, end: Optional[str] = None, From 9d8b58f5c52ac169576824bbcbe0171edba2dcd5 Mon Sep 17 00:00:00 2001 From: Marshal Date: Fri, 27 Dec 2019 16:06:24 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B0=D0=B9=D0=BF=20=D1=85=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Suggestions,=20SearchResult?= =?UTF-8?q?,=20Search,=20Best,=20Value,=20StationResult,=20Station,=20Sequ?= =?UTF-8?q?ence,=20RotorSettings,=20Restrictions,=20Id,=20Enum,=20Discrete?= =?UTF-8?q?Scale,=20Dashboard,=20AdParams?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/rotor/ad_params.py | 2 +- yandex_music/rotor/dashboard.py | 6 +-- yandex_music/rotor/discrete_scale.py | 8 ++-- yandex_music/rotor/enum.py | 6 +-- yandex_music/rotor/id.py | 2 +- yandex_music/rotor/restrictions.py | 12 +++--- yandex_music/rotor/rotor_settings.py | 2 +- yandex_music/rotor/sequence.py | 8 ++-- yandex_music/rotor/station.py | 18 ++++----- yandex_music/rotor/station_result.py | 16 ++++---- yandex_music/rotor/value.py | 4 +- yandex_music/search/best.py | 8 ++-- yandex_music/search/search.py | 58 ++++++++++++++++------------ yandex_music/search/search_result.py | 6 +-- yandex_music/search/suggestions.py | 2 +- 15 files changed, 84 insertions(+), 74 deletions(-) diff --git a/yandex_music/rotor/ad_params.py b/yandex_music/rotor/ad_params.py index 01a2f9b..96d2243 100644 --- a/yandex_music/rotor/ad_params.py +++ b/yandex_music/rotor/ad_params.py @@ -33,7 +33,7 @@ class AdParams(YandexMusicObject): self.target_ref, self.other_params, self.ad_volume) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['AdParams']: if not data: return None diff --git a/yandex_music/rotor/dashboard.py b/yandex_music/rotor/dashboard.py index 722f1fa..0aee59f 100644 --- a/yandex_music/rotor/dashboard.py +++ b/yandex_music/rotor/dashboard.py @@ -1,7 +1,7 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, StationResult from yandex_music import YandexMusicObject @@ -9,7 +9,7 @@ from yandex_music import YandexMusicObject class Dashboard(YandexMusicObject): def __init__(self, dashboard_id, - stations, + stations: List['StationResult'], pumpkin, client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/rotor/discrete_scale.py b/yandex_music/rotor/discrete_scale.py index 39ac2cd..1836607 100644 --- a/yandex_music/rotor/discrete_scale.py +++ b/yandex_music/rotor/discrete_scale.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Value from yandex_music import YandexMusicObject @@ -10,8 +10,8 @@ class DiscreteScale(YandexMusicObject): def __init__(self, type_, name, - min_, - max_, + min_: Optional['Value'], + max_: Optional['Value'], client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ @@ -23,7 +23,7 @@ class DiscreteScale(YandexMusicObject): self._id_attrs = (self.type, self.name, self.min, self.max) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['DiscreteScale']: if not data: return None diff --git a/yandex_music/rotor/enum.py b/yandex_music/rotor/enum.py index 637c7d6..45aa9ad 100644 --- a/yandex_music/rotor/enum.py +++ b/yandex_music/rotor/enum.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Value from yandex_music import YandexMusicObject @@ -10,7 +10,7 @@ class Enum(YandexMusicObject): def __init__(self, type_, name, - possible_values, + possible_values: List['Value'], client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ @@ -21,7 +21,7 @@ class Enum(YandexMusicObject): self._id_attrs = (self.type, self.name, self.possible_values) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Enum']: if not data: return None diff --git a/yandex_music/rotor/id.py b/yandex_music/rotor/id.py index 02cb603..3b1db23 100644 --- a/yandex_music/rotor/id.py +++ b/yandex_music/rotor/id.py @@ -19,7 +19,7 @@ class Id(YandexMusicObject): self._id_attrs = (self.type, self.tag) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Id']: if not data: return None diff --git a/yandex_music/rotor/restrictions.py b/yandex_music/rotor/restrictions.py index 033057b..0a7800f 100644 --- a/yandex_music/rotor/restrictions.py +++ b/yandex_music/rotor/restrictions.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: from yandex_music import Client @@ -15,10 +15,10 @@ de_json = { class Restrictions(YandexMusicObject): def __init__(self, language, - diversity, - mood=None, - energy=None, - mood_energy=None, + diversity: Optional[Union['Enum', 'DiscreteScale']], + mood: Optional[Union['Enum', 'DiscreteScale']] = None, + energy: Optional[Union['Enum', 'DiscreteScale']] = None, + mood_energy: Optional[Union['Enum', 'DiscreteScale']] = None, client: Optional['Client'] = None, **kwargs) -> None: self.language = language @@ -31,7 +31,7 @@ class Restrictions(YandexMusicObject): self._id_attrs = (self.language, self.diversity) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Restrictions']: if not data: return None diff --git a/yandex_music/rotor/rotor_settings.py b/yandex_music/rotor/rotor_settings.py index dcab3f2..f0ccfaf 100644 --- a/yandex_music/rotor/rotor_settings.py +++ b/yandex_music/rotor/rotor_settings.py @@ -26,7 +26,7 @@ class RotorSettings(YandexMusicObject): self._id_attrs = (self.language, self.diversity) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['RotorSettings']: if not data: return None diff --git a/yandex_music/rotor/sequence.py b/yandex_music/rotor/sequence.py index 3b40129..18c4048 100644 --- a/yandex_music/rotor/sequence.py +++ b/yandex_music/rotor/sequence.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Track from yandex_music import YandexMusicObject @@ -9,7 +9,7 @@ from yandex_music import YandexMusicObject class Sequence(YandexMusicObject): def __init__(self, type_, - track, + track: Optional['Track'], liked, client: Optional['Client'] = None, **kwargs) -> None: @@ -21,7 +21,7 @@ class Sequence(YandexMusicObject): self._id_attrs = (self.type, self.track, self.liked) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Sequence']: if not data: return None @@ -32,7 +32,7 @@ class Sequence(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Sequence']: if not data: return [] diff --git a/yandex_music/rotor/station.py b/yandex_music/rotor/station.py index 13b32f1..3dc8219 100644 --- a/yandex_music/rotor/station.py +++ b/yandex_music/rotor/station.py @@ -1,22 +1,22 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Id, Icon, Restrictions from yandex_music import YandexMusicObject class Station(YandexMusicObject): def __init__(self, - id_, + id_: Optional['Id'], name, - icon, - mts_icon, - geocell_icon, + icon: Optional['Icon'], + mts_icon: Optional['Icon'], + geocell_icon: Optional['Icon'], id_for_from, - restrictions, - restrictions2, - parent_id=None, + restrictions: Optional['Restrictions'], + restrictions2: Optional['Restrictions'], + parent_id: Optional['Id'] = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ @@ -35,7 +35,7 @@ class Station(YandexMusicObject): self.id_for_from, self.restrictions, self.restrictions2) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Station']: if not data: return None diff --git a/yandex_music/rotor/station_result.py b/yandex_music/rotor/station_result.py index 51061ec..e5c31b4 100644 --- a/yandex_music/rotor/station_result.py +++ b/yandex_music/rotor/station_result.py @@ -1,17 +1,17 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Station, RotorSettings, AdParams from yandex_music import YandexMusicObject class StationResult(YandexMusicObject): def __init__(self, - station, - settings, - settings2, - ad_params, + station: Optional['Station'], + settings: Optional['RotorSettings'], + settings2: Optional['RotorSettings'], + ad_params: Optional['AdParams'], explanation=None, prerolls=None, client: Optional['Client'] = None, @@ -27,7 +27,7 @@ class StationResult(YandexMusicObject): self._id_attrs = (self.station, self.settings, self.settings2, self.ad_params) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['StationResult']: if not data: return None @@ -41,7 +41,7 @@ class StationResult(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['StationResult']: if not data: return [] diff --git a/yandex_music/rotor/value.py b/yandex_music/rotor/value.py index 42a14f3..8d114e1 100644 --- a/yandex_music/rotor/value.py +++ b/yandex_music/rotor/value.py @@ -19,7 +19,7 @@ class Value(YandexMusicObject): self._id_attrs = (self.value, self.name) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Value']: if not data: return None @@ -28,7 +28,7 @@ class Value(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Value']: if not data: return [] diff --git a/yandex_music/search/best.py b/yandex_music/search/best.py index 53b1432..02e7436 100644 --- a/yandex_music/search/best.py +++ b/yandex_music/search/best.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: from yandex_music import Client @@ -17,9 +17,9 @@ de_json_result = { class Best(YandexMusicObject): def __init__(self, - type_, - result, - text=None, + type_: str, + result: Optional[Union[Track, Artist, Album, Playlist, Video]], + text: Optional[str] = None, client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ diff --git a/yandex_music/search/search.py b/yandex_music/search/search.py index 20c2381..6c3e47b 100644 --- a/yandex_music/search/search.py +++ b/yandex_music/search/search.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Best, SearchResult from yandex_music import YandexMusicObject @@ -13,11 +13,16 @@ class Search(YandexMusicObject): search_request_id (:obj:`str`): ID запроса. text (:obj:`str`): Текст запроса. best (:obj:`yandex_music.Best`): Объект класса :class:`yandex_music.Best` представляющий лучший результат. - albums (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные альбомы. - artists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденных исполнителей. - playlists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные плейлисты. - tracks (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные треки. - videos (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные видео. + albums (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные альбомы. + artists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденных исполнителей. + playlists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные плейлисты. + tracks (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные треки. + videos (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные видео. misspell_corrected (:obj:`bool`): Был ли исправлен запрос. nocorrect (:obj:`bool`): Было ли отключено исправление результата. client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex @@ -27,29 +32,34 @@ class Search(YandexMusicObject): search_request_id (:obj:`str`): ID запроса. text (:obj:`str`): Текст запроса. best (:obj:`yandex_music.Best`): Объект класса :class:`yandex_music.Best` представляющий лучший результат. - albums (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные альбомы. - artists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденных исполнителей. - playlists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные плейлисты. - tracks (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные треки. - videos (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий найденные видео. + albums (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные альбомы. + artists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденных исполнителей. + playlists (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные плейлисты. + tracks (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные треки. + videos (:obj:`yandex_music.SearchResult`): Объект класса :class:`yandex_music.SearchResult` представляющий + найденные видео. misspell_corrected (:obj:`bool`, optional): Был ли исправлен запрос. nocorrect (:obj:`bool`, optional): Было ли отключено исправление результата. - client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex - Music. + client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент + Yandex Music. **kwargs: Произвольные ключевые аргументы полученные от API. """ def __init__(self, - search_request_id, - text, - best, - albums, - artists, - playlists, - tracks, - videos, - misspell_corrected=None, - nocorrect=None, + search_request_id: str, + text: str, + best: Optional['Best'], + albums: Optional['SearchResult'], + artists: Optional['SearchResult'], + playlists: Optional['SearchResult'], + tracks: Optional['SearchResult'], + videos: Optional['SearchResult'], + misspell_corrected: Optional[bool] = None, + nocorrect: Optional[bool] = None, client: Optional['Client'] = None, **kwargs) -> None: self.search_request_id = search_request_id @@ -69,7 +79,7 @@ class Search(YandexMusicObject): self.artists, self.playlists, self.tracks, self.videos) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Search']: """Десериализация объекта. Args: diff --git a/yandex_music/search/search_result.py b/yandex_music/search/search_result.py index 6ddc533..5ccf597 100644 --- a/yandex_music/search/search_result.py +++ b/yandex_music/search/search_result.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: from yandex_music import Client @@ -20,7 +20,7 @@ class SearchResult(YandexMusicObject): total, per_page, order, - results, + results: List[Union[Track, Artist, Album, Playlist, Video]], client: Optional['Client'] = None, **kwargs) -> None: self.total = total @@ -32,7 +32,7 @@ class SearchResult(YandexMusicObject): self._id_attrs = (self.total, self.per_page, self.order, self.results) @classmethod - def de_json(cls, data, client, type_=None): + def de_json(cls, data: dict, client: 'Client', type_: str = None) -> Optional['SearchResult']: if not data: return None diff --git a/yandex_music/search/suggestions.py b/yandex_music/search/suggestions.py index 5712c97..4c41dce 100644 --- a/yandex_music/search/suggestions.py +++ b/yandex_music/search/suggestions.py @@ -8,7 +8,7 @@ from yandex_music import YandexMusicObject class Suggestions(YandexMusicObject): def __init__(self, - best, + best: Optional['Best'], suggestions, client: Optional['Client'] = None, **kwargs) -> None: From 7a0ff6c32e2fc78ad94dffe4cef665d495832c35 Mon Sep 17 00:00:00 2001 From: Marshal Date: Fri, 27 Dec 2019 16:40:26 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B0=D0=B9=D0=BF=20=D1=85=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Block,=20BlockEntity,=20Cha?= =?UTF-8?q?r,=20CharItem,=20MixLink,=20PersonalPlaylistsData,=20PlayContex?= =?UTF-8?q?t,=20PlayContextsData,=20Promotion,=20TrackId,=20TrackShortOld,?= =?UTF-8?q?=20AlbumsLikes,=20ArtistsLikes,=20PlaylistsLikes,=20CaseForms,?= =?UTF-8?q?=20MadeFor,=20PlayCounter,=20PlaylistAbsence,=20PlaylistId,=20U?= =?UTF-8?q?ser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/landing/block.py | 14 ++++++------- yandex_music/landing/block_entity.py | 11 +++++----- yandex_music/landing/chart.py | 8 ++++---- yandex_music/landing/chart_item.py | 10 +++++----- yandex_music/landing/mix_link.py | 6 +++--- .../landing/personal_playlists_data.py | 4 ++-- yandex_music/landing/play_context.py | 6 +++--- yandex_music/landing/play_contexts_data.py | 6 +++--- yandex_music/landing/promotion.py | 4 ++-- yandex_music/landing/track_id.py | 2 +- yandex_music/landing/track_short_old.py | 8 ++++---- yandex_music/likes/albums_likes.py | 8 ++++---- yandex_music/likes/artists_likes.py | 8 ++++---- yandex_music/likes/playlists_likes.py | 8 ++++---- yandex_music/playlist/case_forms.py | 2 +- yandex_music/playlist/made_for.py | 8 ++++---- yandex_music/playlist/play_counter.py | 2 +- yandex_music/playlist/playlist_absence.py | 6 +++--- yandex_music/playlist/playlist_id.py | 4 ++-- yandex_music/playlist/user.py | 20 ++++++++++--------- 20 files changed, 74 insertions(+), 71 deletions(-) diff --git a/yandex_music/landing/block.py b/yandex_music/landing/block.py index 07158ba..9405474 100644 --- a/yandex_music/landing/block.py +++ b/yandex_music/landing/block.py @@ -1,7 +1,7 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, BlockEntity, PersonalPlaylistsData, PlayContextsData from yandex_music import YandexMusicObject @@ -12,9 +12,9 @@ class Block(YandexMusicObject): type_, type_for_from, title, - entities, + entities: List['BlockEntity'], description=None, - data=None, + data: Optional[Union[PersonalPlaylistsData, PlayContextsData]] = None, client: Optional['Client'] = None, **kwargs) -> None: @@ -30,11 +30,11 @@ class Block(YandexMusicObject): self.client = client self._id_attrs = (self.id, self.type, self.type_for_from, self.title, self.entities) - def __getitem__(self, item): + def __getitem__(self, item: int) -> 'BlockEntity': return self.entities[item] @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Block']: if not data: return None @@ -51,7 +51,7 @@ class Block(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Block']: if not data: return [] diff --git a/yandex_music/landing/block_entity.py b/yandex_music/landing/block_entity.py index b87a0b8..5a7304d 100644 --- a/yandex_music/landing/block_entity.py +++ b/yandex_music/landing/block_entity.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: from yandex_music import Client @@ -21,8 +21,9 @@ de_json = { class BlockEntity(YandexMusicObject): def __init__(self, id_, - type_, - data, + type_: str, + data: Optional[Union['GeneratedPlaylist', 'Promotion', 'Album', + 'Playlist', 'ChartItem', 'PlayContext', 'MixLink']], client: Optional['Client'] = None, **kwargs) -> None: @@ -34,7 +35,7 @@ class BlockEntity(YandexMusicObject): self._id_attrs = (self.id, self.type, self.data) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['BlockEntity']: if not data: return None @@ -44,7 +45,7 @@ class BlockEntity(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['BlockEntity']: if not data: return [] diff --git a/yandex_music/landing/chart.py b/yandex_music/landing/chart.py index 7aea861..196fdec 100644 --- a/yandex_music/landing/chart.py +++ b/yandex_music/landing/chart.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, TrackId from yandex_music import YandexMusicObject @@ -12,7 +12,7 @@ class Chart(YandexMusicObject): progress, listeners, shift, - track_id=None, + track_id: Optional['TrackId'] = None, client: Optional['Client'] = None, **kwargs) -> None: self.position = position @@ -26,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Chart']: """Десериализация объекта. Args: @@ -48,7 +48,7 @@ class Chart(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Chart']: """Десериализация списка объектов. Args: diff --git a/yandex_music/landing/chart_item.py b/yandex_music/landing/chart_item.py index b776c54..926b983 100644 --- a/yandex_music/landing/chart_item.py +++ b/yandex_music/landing/chart_item.py @@ -1,15 +1,15 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Track, Chart from yandex_music import YandexMusicObject class ChartItem(YandexMusicObject): def __init__(self, - track, - chart, + track: Optional['Track'], + chart: Optional['Chart'], client: Optional['Client'] = None, **kwargs) -> None: self.track = track @@ -19,7 +19,7 @@ class ChartItem(YandexMusicObject): self._id_attrs = (self.track, self.chart) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['ChartItem']: if not data: return None @@ -31,7 +31,7 @@ class ChartItem(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['ChartItem']: if not data: return [] diff --git a/yandex_music/landing/mix_link.py b/yandex_music/landing/mix_link.py index 0bb3012..4c9eb8a 100644 --- a/yandex_music/landing/mix_link.py +++ b/yandex_music/landing/mix_link.py @@ -29,7 +29,7 @@ class MixLink(YandexMusicObject): self._id_attrs = (self.url, self.title, self.url_scheme, self.text_color, self.background_color, self.background_image_uri, self.cover_white) - def download_background_image(self, filename, size='200x200'): + def download_background_image(self, filename: str, size: str = '200x200') -> None: """Загрузка заднего фона. Args: @@ -40,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['MixLink']: if not data: return None @@ -49,7 +49,7 @@ class MixLink(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['MixLink']: if not data: return [] diff --git a/yandex_music/landing/personal_playlists_data.py b/yandex_music/landing/personal_playlists_data.py index 4980d90..4d57775 100644 --- a/yandex_music/landing/personal_playlists_data.py +++ b/yandex_music/landing/personal_playlists_data.py @@ -8,7 +8,7 @@ from yandex_music import YandexMusicObject class PersonalPlaylistsData(YandexMusicObject): def __init__(self, - is_wizard_passed, + is_wizard_passed: bool, client: Optional['Client'] = None, **kwargs) -> None: self.is_wizard_passed = is_wizard_passed @@ -17,7 +17,7 @@ class PersonalPlaylistsData(YandexMusicObject): self._id_attrs = (self.is_wizard_passed,) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PersonalPlaylistsData']: if not data: return None diff --git a/yandex_music/landing/play_context.py b/yandex_music/landing/play_context.py index bd945c4..6f69bdb 100644 --- a/yandex_music/landing/play_context.py +++ b/yandex_music/landing/play_context.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, TrackShortOld from yandex_music import YandexMusicObject @@ -11,7 +11,7 @@ class PlayContext(YandexMusicObject): client_, context, context_item, - tracks, + tracks: List['TrackShortOld'], client: Optional['Client'] = None, **kwargs) -> None: self.client_ = client_ @@ -23,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PlayContext']: if not data: return None diff --git a/yandex_music/landing/play_contexts_data.py b/yandex_music/landing/play_contexts_data.py index 0145326..ce469d2 100644 --- a/yandex_music/landing/play_contexts_data.py +++ b/yandex_music/landing/play_contexts_data.py @@ -1,14 +1,14 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, TrackShortOld from yandex_music import YandexMusicObject class PlayContextsData(YandexMusicObject): def __init__(self, - other_tracks, + other_tracks: List['TrackShortOld'], client: Optional['Client'] = None, **kwargs) -> None: self.other_tracks = other_tracks @@ -17,7 +17,7 @@ class PlayContextsData(YandexMusicObject): self._id_attrs = (self.other_tracks,) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PlayContextsData']: if not data: return None diff --git a/yandex_music/landing/promotion.py b/yandex_music/landing/promotion.py index 2f65d22..19450da 100644 --- a/yandex_music/landing/promotion.py +++ b/yandex_music/landing/promotion.py @@ -34,7 +34,7 @@ class Promotion(YandexMusicObject): self.url, self.url_scheme, self.text_color, self.gradient, self.image) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Promotion']: if not data: return None @@ -43,7 +43,7 @@ class Promotion(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Promotion']: if not data: return [] diff --git a/yandex_music/landing/track_id.py b/yandex_music/landing/track_id.py index 590361e..ec9287c 100644 --- a/yandex_music/landing/track_id.py +++ b/yandex_music/landing/track_id.py @@ -19,7 +19,7 @@ class TrackId(YandexMusicObject): self._id_attrs = (self.id, self.album_id) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['TrackId']: if not data: return None diff --git a/yandex_music/landing/track_short_old.py b/yandex_music/landing/track_short_old.py index 9f06616..2971638 100644 --- a/yandex_music/landing/track_short_old.py +++ b/yandex_music/landing/track_short_old.py @@ -1,14 +1,14 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, TrackId from yandex_music import YandexMusicObject class TrackShortOld(YandexMusicObject): def __init__(self, - track_id, + track_id: Optional['TrackId'], timestamp, client: Optional['Client'] = None, **kwargs) -> None: @@ -19,7 +19,7 @@ class TrackShortOld(YandexMusicObject): self._id_attrs = (self.track_id,) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['TrackShortOld']: if not data: return None @@ -30,7 +30,7 @@ class TrackShortOld(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['TrackShortOld']: if not data: return [] diff --git a/yandex_music/likes/albums_likes.py b/yandex_music/likes/albums_likes.py index 6c27533..8701146 100644 --- a/yandex_music/likes/albums_likes.py +++ b/yandex_music/likes/albums_likes.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Album from yandex_music import YandexMusicObject @@ -10,7 +10,7 @@ class AlbumsLikes(YandexMusicObject): def __init__(self, timestamp, id_=None, - album=None, + album: Optional['Album'] = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ @@ -21,7 +21,7 @@ class AlbumsLikes(YandexMusicObject): self._id_attrs = (self.id, self.album) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['AlbumsLikes']: if not data: return None @@ -32,7 +32,7 @@ class AlbumsLikes(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['AlbumsLikes']: if not data: return [] diff --git a/yandex_music/likes/artists_likes.py b/yandex_music/likes/artists_likes.py index 488cc95..28ee261 100644 --- a/yandex_music/likes/artists_likes.py +++ b/yandex_music/likes/artists_likes.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Artist from yandex_music import YandexMusicObject @@ -9,7 +9,7 @@ from yandex_music import YandexMusicObject class ArtistsLikes(YandexMusicObject): def __init__(self, id_=None, - artist=None, + artist: Optional['Artist'] = None, timestamp=None, client: Optional['Client'] = None, **kwargs) -> None: @@ -21,7 +21,7 @@ class ArtistsLikes(YandexMusicObject): self._id_attrs = (self.id, self.artist) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['ArtistsLikes']: if not data: return None @@ -37,7 +37,7 @@ class ArtistsLikes(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['ArtistsLikes']: if not data: return [] diff --git a/yandex_music/likes/playlists_likes.py b/yandex_music/likes/playlists_likes.py index 3b9946f..7677d21 100644 --- a/yandex_music/likes/playlists_likes.py +++ b/yandex_music/likes/playlists_likes.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Playlist from yandex_music import YandexMusicObject @@ -10,7 +10,7 @@ class PlaylistsLikes(YandexMusicObject): def __init__(self, timestamp, id_=None, - playlist=None, + playlist: Optional['Playlist'] = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ @@ -21,7 +21,7 @@ class PlaylistsLikes(YandexMusicObject): self._id_attrs = (self.id, self.playlist) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistsLikes']: if not data: return None @@ -32,7 +32,7 @@ class PlaylistsLikes(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['PlaylistsLikes']: if not data: return [] diff --git a/yandex_music/playlist/case_forms.py b/yandex_music/playlist/case_forms.py index 43732d5..838d13a 100644 --- a/yandex_music/playlist/case_forms.py +++ b/yandex_music/playlist/case_forms.py @@ -28,7 +28,7 @@ class CaseForms(YandexMusicObject): self.accusative, self.instrumental, self.prepositional) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['CaseForms']: if not data: return None diff --git a/yandex_music/playlist/made_for.py b/yandex_music/playlist/made_for.py index bb5d57b..b6d1cf9 100644 --- a/yandex_music/playlist/made_for.py +++ b/yandex_music/playlist/made_for.py @@ -1,15 +1,15 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, User, CaseForms from yandex_music import YandexMusicObject class MadeFor(YandexMusicObject): def __init__(self, - user_info, - case_forms, + user_info: Optional['User'], + case_forms: Optional['CaseForms'], client: Optional['Client'] = None, **kwargs) -> None: self.user_info = user_info @@ -19,7 +19,7 @@ class MadeFor(YandexMusicObject): self._id_attrs = (self.user_info, self.case_forms) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['MadeFor']: if not data: return None diff --git a/yandex_music/playlist/play_counter.py b/yandex_music/playlist/play_counter.py index efceae2..c5703c3 100644 --- a/yandex_music/playlist/play_counter.py +++ b/yandex_music/playlist/play_counter.py @@ -21,7 +21,7 @@ class PlayCounter(YandexMusicObject): self._id_attrs = (self.value, self.description, self.updated) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PlayCounter']: if not data: return None diff --git a/yandex_music/playlist/playlist_absence.py b/yandex_music/playlist/playlist_absence.py index 3aaec71..3290cbb 100644 --- a/yandex_music/playlist/playlist_absence.py +++ b/yandex_music/playlist/playlist_absence.py @@ -24,8 +24,8 @@ class PlaylistAbsence(YandexMusicObject): """ def __init__(self, - kind, - reason, + kind: int, + reason: str, client: Optional['Client'] = None, **kwargs) -> None: self.kind = kind @@ -35,7 +35,7 @@ class PlaylistAbsence(YandexMusicObject): self._id_attrs = (self.kind, self.reason) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistAbsence']: """Десериализация объекта. Args: diff --git a/yandex_music/playlist/playlist_id.py b/yandex_music/playlist/playlist_id.py index 65a8af5..871d5b7 100644 --- a/yandex_music/playlist/playlist_id.py +++ b/yandex_music/playlist/playlist_id.py @@ -19,7 +19,7 @@ class PlaylistId(YandexMusicObject): self._id_attrs = (self.uid, self.kind) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistId']: """Десериализация объекта. Args: @@ -39,7 +39,7 @@ class PlaylistId(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['PlaylistId']: """Десериализация списка объектов. Args: diff --git a/yandex_music/playlist/user.py b/yandex_music/playlist/user.py index a019a13..14ac693 100644 --- a/yandex_music/playlist/user.py +++ b/yandex_music/playlist/user.py @@ -15,7 +15,8 @@ class User(YandexMusicObject): name (:obj:`str`): Имя пользователя. sex (:obj:`str`): Пол пользователя. verified (:obj:`bool`): Участвует ли пользователь в генерации плейлистов дня и т.д., и т.п. - client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex Music. + client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex + Music. Args: uid (:obj:`int`): Идентификатор пользователя. @@ -23,16 +24,17 @@ class User(YandexMusicObject): name (:obj:`str`): Имя пользователя. sex (:obj:`str`): Пол пользователя. verified (:obj:`bool`): Участвует ли пользователь в генерации плейлистов дня и т.д., и т.п. - client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex Music. + client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент + Yandex Music. **kwargs: Произвольные ключевые аргументы полученные от API. """ def __init__(self, - uid, - login, - name, - sex, - verified, + uid: int, + login: str, + name: str, + sex: str, + verified: bool, client: Optional['Client'] = None, **kwargs) -> None: self.uid = uid @@ -44,7 +46,7 @@ class User(YandexMusicObject): self.client = client self._id_attrs = (self.uid, self.login) - def download_avatar(self, filename, format_='normal'): + def download_avatar(self, filename: str, format_: str = 'normal') -> None: """Загрузка изображения пользователя. Args: @@ -55,7 +57,7 @@ class User(YandexMusicObject): self.client.request.download(f'https://upics.yandex.net/{self.uid}/{format_}', filename) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['User']: """Десериализация объекта. Args: From e4356cdbf083ea61c85d28bcee95f06fb6bd3a6b Mon Sep 17 00:00:00 2001 From: Marshal Date: Fri, 27 Dec 2019 23:23:05 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D1=82=D0=B0?= =?UTF-8?q?=D0=B9=D0=BF=20=D1=85=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/landing/block.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yandex_music/landing/block.py b/yandex_music/landing/block.py index 9405474..8b2eec4 100644 --- a/yandex_music/landing/block.py +++ b/yandex_music/landing/block.py @@ -14,7 +14,7 @@ class Block(YandexMusicObject): title, entities: List['BlockEntity'], description=None, - data: Optional[Union[PersonalPlaylistsData, PlayContextsData]] = None, + data: Optional[Union['PersonalPlaylistsData', 'PlayContextsData']] = None, client: Optional['Client'] = None, **kwargs) -> None: From 510b37bb3259e456c7d34607c3a5972ca4226d19 Mon Sep 17 00:00:00 2001 From: Marshal Date: Sat, 28 Dec 2019 14:38:59 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=A2=D0=B0=D0=B9=D0=BF=20=D1=85=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20Label,=20TrackPositio?= =?UTF-8?q?n,=20Artist,=20ArtistAlbums,=20ArtistTracks,=20BriefInfo,=20Cou?= =?UTF-8?q?nts,=20Description,=20Link,=20Ratings,=20Vinyl,=20AlbumEvent,?= =?UTF-8?q?=20ArtistEvent,=20Day,=20Event,=20GeneratedPlaylist,=20TrackWit?= =?UTF-8?q?hAds,=20Genre,=20Images,=20Title?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/album/label.py | 16 +++++++------- yandex_music/album/track_position.py | 2 +- yandex_music/artist/artist.py | 28 ++++++++++++------------- yandex_music/artist/artist_albums.py | 8 +++---- yandex_music/artist/artist_tracks.py | 8 +++---- yandex_music/artist/brief_info.py | 24 ++++++++++----------- yandex_music/artist/counts.py | 2 +- yandex_music/artist/description.py | 2 +- yandex_music/artist/link.py | 4 ++-- yandex_music/artist/ratings.py | 2 +- yandex_music/artist/vinyl.py | 4 ++-- yandex_music/feed/album_event.py | 10 ++++----- yandex_music/feed/artist_event.py | 12 +++++------ yandex_music/feed/day.py | 12 +++++------ yandex_music/feed/event.py | 12 +++++------ yandex_music/feed/generated_playlist.py | 8 +++---- yandex_music/feed/track_with_ads.py | 10 ++++----- yandex_music/genre/genre.py | 16 +++++++------- yandex_music/genre/images.py | 10 ++++----- yandex_music/genre/title.py | 6 +++--- 20 files changed, 98 insertions(+), 98 deletions(-) diff --git a/yandex_music/album/label.py b/yandex_music/album/label.py index f99f5f4..e56fd53 100644 --- a/yandex_music/album/label.py +++ b/yandex_music/album/label.py @@ -17,13 +17,13 @@ class Label(YandexMusicObject): Args: id_ (:obj:`int`): Идентификатор альбома. name (:obj:`str`): Название альбома. - client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент - Yandex Music. + client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий + клиент Yandex Music. **kwargs: Произвольные ключевые аргументы полученные от API. """ def __init__(self, - id_, - name, + id_: int, + name: str, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ @@ -33,7 +33,7 @@ class Label(YandexMusicObject): self._id_attrs = (self.id, self.name) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Label']: """Десериализация объекта. Args: @@ -51,13 +51,13 @@ class Label(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Label']: """Десериализация списка объектов. Args: data (:obj:`list`): Список словарей с полями и значениями десериализуемого объекта. - client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex - Music. + client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент + Yandex Music. Returns: :obj:`list` из :obj:`yandex_music.Label`: Список объектов класса :class:`yandex_music.Label`. """ diff --git a/yandex_music/album/track_position.py b/yandex_music/album/track_position.py index 361ae25..cf13778 100644 --- a/yandex_music/album/track_position.py +++ b/yandex_music/album/track_position.py @@ -19,7 +19,7 @@ class TrackPosition(YandexMusicObject): self._id_attrs = (self.volume, self.index) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['TrackPosition']: if not data: return None diff --git a/yandex_music/artist/artist.py b/yandex_music/artist/artist.py index 0a3b2e8..2c029aa 100644 --- a/yandex_music/artist/artist.py +++ b/yandex_music/artist/artist.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Cover, Ratings, Counts, Link, Track, Description, ArtistTracks, ArtistAlbums from yandex_music import YandexMusicObject @@ -10,23 +10,23 @@ class Artist(YandexMusicObject): def __init__(self, id_, name, - cover, + cover: Optional['Cover'], various=None, composer=None, genres=None, op_image=None, no_pictures_from_search=None, - counts=None, + counts: Optional['Counts'] = None, available=None, - ratings=None, - links=None, + ratings: Optional['Ratings'] = None, + links: List['Link'] = None, tickets_available=None, likes_count=None, - popular_tracks=None, + popular_tracks: List['Track'] = None, regions=None, decomposed=None, full_names=None, - description=None, + description: Optional['Description'] = None, countries=None, en_wikipedia_link=None, db_aliases=None, @@ -67,7 +67,7 @@ class Artist(YandexMusicObject): self.client = client self._id_attrs = (self.id, self.name, self.cover) - def download_op_image(self, filename, size='200x200'): + def download_op_image(self, filename: str, size: str = '200x200') -> None: """Загрузка обложки. Используйте это только когда нет self.cover! @@ -79,28 +79,28 @@ class Artist(YandexMusicObject): self.client.request.download(f'https://{self.op_image.replace("%%", size)}', filename) - def like(self, *args, **kwargs): + def like(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_artists_add(artist.id, user.id *args, **kwargs) """ return self.client.users_likes_artists_add(self.id, self.client.me.account.uid, *args, **kwargs) - def dislike(self, *args, **kwargs): + def dislike(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_artists_remove(artist.id, user.id *args, **kwargs) """ return self.client.users_likes_artists_remove(self.id, self.client.me.account.uid, *args, **kwargs) - def get_tracks(self, page=0, page_size=20, *args, **kwargs): + def get_tracks(self, page=0, page_size=20, *args, **kwargs) -> Optional['ArtistTracks']: """Сокращение для:: client.artists_tracks(artist.id, page, page_size, *args, **kwargs) """ return self.client.artists_tracks(self.id, page, page_size, *args, **kwargs) - def get_albums(self, page=0, page_size=20, sort_by='year', *args, **kwargs): + def get_albums(self, page=0, page_size=20, sort_by='year', *args, **kwargs) -> Optional['ArtistAlbums']: """Сокращение для:: client.artists_direct_albums(artist.id, page, page_size, sort_by, *args, **kwargs) @@ -108,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Artist']: if not data: return None @@ -125,7 +125,7 @@ class Artist(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Artist']: if not data: return [] diff --git a/yandex_music/artist/artist_albums.py b/yandex_music/artist/artist_albums.py index 5b68f9d..6805614 100644 --- a/yandex_music/artist/artist_albums.py +++ b/yandex_music/artist/artist_albums.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Album, Pager from yandex_music import YandexMusicObject @@ -24,8 +24,8 @@ class ArtistAlbums(YandexMusicObject): """ def __init__(self, - albums, - pager, + albums: List['Album'], + pager: Optional['Pager'], client: Optional['Client'] = None, **kwargs) -> None: self.albums = albums @@ -35,7 +35,7 @@ class ArtistAlbums(YandexMusicObject): self._id_attrs = (self.pager, self.albums) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['ArtistAlbums']: """Десериализация объекта. Args: diff --git a/yandex_music/artist/artist_tracks.py b/yandex_music/artist/artist_tracks.py index b9b7e66..cee4966 100644 --- a/yandex_music/artist/artist_tracks.py +++ b/yandex_music/artist/artist_tracks.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Track, Pager from yandex_music import YandexMusicObject @@ -24,8 +24,8 @@ class ArtistTracks(YandexMusicObject): """ def __init__(self, - tracks, - pager, + tracks: List['Track'], + pager: Optional['Pager'], client: Optional['Client'] = None, **kwargs) -> None: self.tracks = tracks @@ -35,7 +35,7 @@ class ArtistTracks(YandexMusicObject): self._id_attrs = (self.pager, self.tracks) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['ArtistTracks']: """Десериализация объекта. Args: diff --git a/yandex_music/artist/brief_info.py b/yandex_music/artist/brief_info.py index da5a455..396c935 100644 --- a/yandex_music/artist/brief_info.py +++ b/yandex_music/artist/brief_info.py @@ -1,26 +1,26 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Artist, Track, Album, Cover, PlaylistId, Video, Chart, Vinyl from yandex_music import YandexMusicObject class BriefInfo(YandexMusicObject): def __init__(self, - artist, - albums, - also_albums, + artist: Optional['Artist'], + albums: List['Album'], + also_albums: List['Album'], last_release_ids, - popular_tracks, - similar_artists, - all_covers, + popular_tracks: List['Track'], + similar_artists: List['Artist'], + all_covers: List['Cover'], concerts, - videos, - vinyls, + videos: List['Video'], + vinyls: List['Vinyl'], has_promotions, - playlist_ids, - tracks_in_chart=None, + playlist_ids: List['PlaylistId'], + tracks_in_chart: List['Chart'] = None, client: Optional['Client'] = None, **kwargs) -> None: self.artist = artist @@ -44,7 +44,7 @@ class BriefInfo(YandexMusicObject): self.has_promotions, self.playlist_ids) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['BriefInfo']: """Десериализация объекта. Args: diff --git a/yandex_music/artist/counts.py b/yandex_music/artist/counts.py index 098b789..42a6b25 100644 --- a/yandex_music/artist/counts.py +++ b/yandex_music/artist/counts.py @@ -23,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Counts']: if not data: return None diff --git a/yandex_music/artist/description.py b/yandex_music/artist/description.py index deef362..e586998 100644 --- a/yandex_music/artist/description.py +++ b/yandex_music/artist/description.py @@ -19,7 +19,7 @@ class Description(YandexMusicObject): self._id_attrs = (self.text, self.url) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Description']: """Десериализация объекта. Args: diff --git a/yandex_music/artist/link.py b/yandex_music/artist/link.py index c2aec6c..6a5f94d 100644 --- a/yandex_music/artist/link.py +++ b/yandex_music/artist/link.py @@ -24,7 +24,7 @@ class Link(YandexMusicObject): self._id_attrs = (self.title, self.href, self.type) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Link']: if not data: return None @@ -33,7 +33,7 @@ class Link(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Link']: if not data: return [] diff --git a/yandex_music/artist/ratings.py b/yandex_music/artist/ratings.py index 4a37aea..efee35d 100644 --- a/yandex_music/artist/ratings.py +++ b/yandex_music/artist/ratings.py @@ -22,7 +22,7 @@ class Ratings(YandexMusicObject): self._id_attrs = (self.week, self.month) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Ratings']: if not data: return None diff --git a/yandex_music/artist/vinyl.py b/yandex_music/artist/vinyl.py index cfcf913..b61f553 100644 --- a/yandex_music/artist/vinyl.py +++ b/yandex_music/artist/vinyl.py @@ -27,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Vinyl']: """Десериализация объекта. Args: @@ -47,7 +47,7 @@ class Vinyl(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Vinyl']: """Десериализация списка объектов. Args: diff --git a/yandex_music/feed/album_event.py b/yandex_music/feed/album_event.py index 300d439..caaca4d 100644 --- a/yandex_music/feed/album_event.py +++ b/yandex_music/feed/album_event.py @@ -1,15 +1,15 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Album, Track from yandex_music import YandexMusicObject class AlbumEvent(YandexMusicObject): def __init__(self, - album, - tracks, + album: Optional['Album'], + tracks: List['Track'], client: Optional['Client'] = None, **kwargs) -> None: self.album = album @@ -19,7 +19,7 @@ class AlbumEvent(YandexMusicObject): self._id_attrs = (self.album, self.tracks) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['AlbumEvent']: if not data: return None @@ -31,7 +31,7 @@ class AlbumEvent(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['AlbumEvent']: if not data: return [] diff --git a/yandex_music/feed/artist_event.py b/yandex_music/feed/artist_event.py index 8553223..cbe6652 100644 --- a/yandex_music/feed/artist_event.py +++ b/yandex_music/feed/artist_event.py @@ -1,16 +1,16 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Artist, Track from yandex_music import YandexMusicObject class ArtistEvent(YandexMusicObject): def __init__(self, - artist, - tracks, - similar_to_artists_from_history, + artist: Optional['Artist'], + tracks: List['Track'], + similar_to_artists_from_history: List['Artist'], client: Optional['Client'] = None, **kwargs) -> None: self.artist = artist @@ -21,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['ArtistEvent']: if not data: return None @@ -34,7 +34,7 @@ class ArtistEvent(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['ArtistEvent']: if not data: return [] diff --git a/yandex_music/feed/day.py b/yandex_music/feed/day.py index c4ce157..0c9be4a 100644 --- a/yandex_music/feed/day.py +++ b/yandex_music/feed/day.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Event, Track, TrackWithAds from yandex_music import YandexMusicObject @@ -9,9 +9,9 @@ from yandex_music import YandexMusicObject class Day(YandexMusicObject): def __init__(self, day, - events, - tracks_to_play_with_ads, - tracks_to_play, + events: List['Event'], + tracks_to_play_with_ads: List['TrackWithAds'], + tracks_to_play: List['Track'], client: Optional['Client'] = None, **kwargs) -> None: self.day = day @@ -23,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Day']: if not data: return None @@ -36,7 +36,7 @@ class Day(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Day']: if not data: return [] diff --git a/yandex_music/feed/event.py b/yandex_music/feed/event.py index 842b244..75f3815 100644 --- a/yandex_music/feed/event.py +++ b/yandex_music/feed/event.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Track, AlbumEvent, ArtistEvent from yandex_music import YandexMusicObject @@ -12,9 +12,9 @@ class Event(YandexMusicObject): type_, type_for_from=None, title=None, - tracks=None, - artists=None, - albums=None, + tracks: List['Track'] = None, + artists: List['ArtistEvent'] = None, + albums: List['AlbumEvent'] = None, message=None, device=None, tracks_count=None, @@ -36,7 +36,7 @@ class Event(YandexMusicObject): self._id_attrs = (self.id, self.type) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Event']: if not data: return None @@ -49,7 +49,7 @@ class Event(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Event']: if not data: return [] diff --git a/yandex_music/feed/generated_playlist.py b/yandex_music/feed/generated_playlist.py index dcd5b12..03d373a 100644 --- a/yandex_music/feed/generated_playlist.py +++ b/yandex_music/feed/generated_playlist.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Playlist from yandex_music import YandexMusicObject @@ -11,7 +11,7 @@ class GeneratedPlaylist(YandexMusicObject): type_, ready, notify, - data, + data: Optional['Playlist'], client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ @@ -23,7 +23,7 @@ class GeneratedPlaylist(YandexMusicObject): self._id_attrs = (self.type, self.ready, self.notify, self.data) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['GeneratedPlaylist']: if not data: return None @@ -34,7 +34,7 @@ class GeneratedPlaylist(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['GeneratedPlaylist']: if not data: return [] diff --git a/yandex_music/feed/track_with_ads.py b/yandex_music/feed/track_with_ads.py index 01d7e7f..cd75412 100644 --- a/yandex_music/feed/track_with_ads.py +++ b/yandex_music/feed/track_with_ads.py @@ -1,15 +1,15 @@ from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Track from yandex_music import YandexMusicObject class TrackWithAds(YandexMusicObject): def __init__(self, - type_, - track, + type_: str, + track: Optional['Track'], client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ @@ -19,7 +19,7 @@ class TrackWithAds(YandexMusicObject): self._id_attrs = (self.type, self.track) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['TrackWithAds']: if not data: return None @@ -30,7 +30,7 @@ class TrackWithAds(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['TrackWithAds']: if not data: return [] diff --git a/yandex_music/genre/genre.py b/yandex_music/genre/genre.py index fcc7569..2ba7772 100644 --- a/yandex_music/genre/genre.py +++ b/yandex_music/genre/genre.py @@ -1,7 +1,7 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Dict if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Title, Icon, Images from yandex_music import YandexMusicObject @@ -12,14 +12,14 @@ class Genre(YandexMusicObject): weight, composer_top, title, - titles, - images, + titles: Dict[str, Optional['Title']], + images: Optional['Images'], show_in_menu, full_title=None, url_part=None, color=None, - radio_icon=None, - sub_genres=None, + radio_icon: Optional['Icon'] = None, + sub_genres: List['Genre'] = None, hide_in_regions=None, client: Optional['Client'] = None, **kwargs) -> None: @@ -42,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: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Genre']: if not data: return None @@ -56,7 +56,7 @@ class Genre(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Genre']: if not data: return [] diff --git a/yandex_music/genre/images.py b/yandex_music/genre/images.py index 1a73017..e8c328c 100644 --- a/yandex_music/genre/images.py +++ b/yandex_music/genre/images.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Images(YandexMusicObject): def __init__(self, - _208x208=None, - _300x300=None, + _208x208: Optional[str] = None, + _300x300: Optional[str] = None, client: Optional['Client'] = None, **kwargs) -> None: self._208x208 = _208x208 @@ -17,7 +17,7 @@ class Images(YandexMusicObject): self.client = client - def download_208x208(self, filename): + def download_208x208(self, filename: str) -> None: """Загрузка изображения 208x208. Args: @@ -26,7 +26,7 @@ class Images(YandexMusicObject): self.client.request.download(self._208x208, filename) - def download_300x300(self, filename): + def download_300x300(self, filename: str) -> None: """Загрузка изображения 300x300. Args: @@ -36,7 +36,7 @@ class Images(YandexMusicObject): self.client.request.download(self._300x300, filename) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Images']: if not data: return None diff --git a/yandex_music/genre/title.py b/yandex_music/genre/title.py index c269297..7bac374 100644 --- a/yandex_music/genre/title.py +++ b/yandex_music/genre/title.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, Dict if TYPE_CHECKING: from yandex_music import Client @@ -19,7 +19,7 @@ class Title(YandexMusicObject): self._id_attrs = (self.title, self.full_title) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Title']: if not data: return None @@ -28,7 +28,7 @@ class Title(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_dict(cls, data, client): + def de_dict(cls, data, client) -> Dict[str, Optional['Title']]: if not data: return {} From c13a5283b3c3749cbe9fe8a38f095e415c27c4e1 Mon Sep 17 00:00:00 2001 From: Marshal Date: Sat, 28 Dec 2019 16:25:09 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=8F=D0=BC=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B8=D0=B7=D0=B2=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=B5=20=D1=82=D0=B0=D0=B9=D0=BF=20=D1=85?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D1=8B=20=D0=B8=D0=B7=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B.=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=20=D0=B2=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B5=20=D0=BE=D0=B1=D0=BB=D0=BE=D0=B6=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=B1=D0=BE=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/conftest.py | 4 +- tests/test_account.py | 4 +- tests/test_block.py | 2 +- tests/test_block_entity.py | 14 ++--- tests/test_brief_info.py | 4 +- tests/test_download_info.py | 2 +- tests/test_feed.py | 2 +- tests/test_invocation_info.py | 2 +- tests/test_landing.py | 2 +- tests/test_play_contexts_data.py | 2 +- tests/test_product.py | 6 +-- tests/test_station.py | 8 +-- tests/test_suggestions.py | 2 +- tests/test_track.py | 2 +- yandex_music/album/album.py | 38 ++++++------- yandex_music/album/track_position.py | 4 +- yandex_music/artist/artist.py | 14 ++--- yandex_music/artist/brief_info.py | 4 +- yandex_music/artist/counts.py | 8 +-- yandex_music/artist/description.py | 4 +- yandex_music/artist/link.py | 8 +-- yandex_music/artist/ratings.py | 6 +-- yandex_music/artist/vinyl.py | 12 ++--- yandex_music/feed/day.py | 2 +- yandex_music/feed/event.py | 10 ++-- yandex_music/feed/feed.py | 14 ++--- yandex_music/feed/generated_playlist.py | 6 +-- yandex_music/genre/genre.py | 16 +++--- yandex_music/genre/title.py | 4 +- yandex_music/icon.py | 2 +- yandex_music/invocation_info.py | 2 +- yandex_music/landing/block.py | 10 ++-- yandex_music/landing/block_entity.py | 2 +- yandex_music/landing/chart.py | 8 +-- yandex_music/landing/landing.py | 6 +-- yandex_music/landing/mix_link.py | 14 ++--- yandex_music/landing/play_context.py | 6 +-- yandex_music/landing/promotion.py | 18 +++---- yandex_music/landing/track_id.py | 4 +- yandex_music/landing/track_short_old.py | 2 +- yandex_music/likes/albums_likes.py | 4 +- yandex_music/likes/artists_likes.py | 2 +- yandex_music/likes/playlists_likes.py | 2 +- yandex_music/permission_alerts.py | 4 +- yandex_music/playlist/case_forms.py | 12 ++--- yandex_music/playlist/play_counter.py | 6 +-- yandex_music/playlist/playlist.py | 48 ++++++++--------- yandex_music/playlist/playlist_id.py | 4 +- yandex_music/promo_code_status.py | 2 +- yandex_music/rotor/ad_params.py | 14 ++--- yandex_music/rotor/dashboard.py | 4 +- yandex_music/rotor/discrete_scale.py | 4 +- yandex_music/rotor/enum.py | 4 +- yandex_music/rotor/id.py | 4 +- yandex_music/rotor/restrictions.py | 2 +- yandex_music/rotor/rotor_settings.py | 8 +-- yandex_music/rotor/sequence.py | 4 +- yandex_music/rotor/station.py | 4 +- yandex_music/rotor/station_result.py | 4 +- yandex_music/rotor/station_tracks_result.py | 4 +- yandex_music/rotor/value.py | 4 +- yandex_music/search/search_result.py | 6 +-- yandex_music/search/suggestions.py | 4 +- yandex_music/track/major.py | 6 +-- yandex_music/track/normalization.py | 6 +-- yandex_music/track/track.py | 60 ++++++++++----------- yandex_music/track_short.py | 4 +- yandex_music/video.py | 16 +++--- 68 files changed, 263 insertions(+), 263 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 8dcda61..5111303 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -519,9 +519,9 @@ def block_entity(request, results, types): @pytest.fixture(scope='session') def block(block_entity, data_with_type): - data, type = data_with_type + data, type_ = data_with_type - return Block(TestBlock.id, type, TestBlock.type_for_from, TestBlock.title, [block_entity], + return Block(TestBlock.id, type_, TestBlock.type_for_from, TestBlock.title, [block_entity], TestBlock.description, data) diff --git a/tests/test_account.py b/tests/test_account.py index 44d8053..88a91d5 100644 --- a/tests/test_account.py +++ b/tests/test_account.py @@ -43,8 +43,8 @@ class TestAccount: json_dict = {'now': self.now, 'region': self.region, 'service_available': self.service_available, 'uid': self.uid, 'login': self.login, 'full_name': self.full_name, 'second_name': self.second_name, 'first_name': self.first_name, 'display_name': self.display_name, 'hosted_user': self.hosted_user, - 'birthday': self.birthday, 'passport_phones': [passport_phone.to_dict()], 'registered_at': self.registered_at, - 'has_info_for_app_metrica': self.has_info_for_app_metrica} + 'birthday': self.birthday, 'passport_phones': [passport_phone.to_dict()], + 'registered_at': self.registered_at, 'has_info_for_app_metrica': self.has_info_for_app_metrica} account = Account.de_json(json_dict, client) assert account.now == self.now diff --git a/tests/test_block.py b/tests/test_block.py index 2203a3b..48e7596 100644 --- a/tests/test_block.py +++ b/tests/test_block.py @@ -55,7 +55,7 @@ class TestBlock: def test_equality(self, block_entity): a = Block(self.id, self.type, self.type_for_from, self.title, [block_entity]) - b = Block('', self.type, self.type_for_from, self.title, None) + b = Block('', self.type, self.type_for_from, self.title, []) c = Block(self.id, self.type, self.type_for_from, self.title, [block_entity]) assert a != b diff --git a/tests/test_block_entity.py b/tests/test_block_entity.py index 4ad4bdb..ec67302 100644 --- a/tests/test_block_entity.py +++ b/tests/test_block_entity.py @@ -26,30 +26,30 @@ class TestBlockEntity: assert block_entity.data == data def test_de_json_required(self, client, block_entity_data_with_type): - data, type = block_entity_data_with_type + data, type_ = block_entity_data_with_type - json_dict = {'id_': self.id, 'type_': type, 'data': data.to_dict()} + json_dict = {'id_': self.id, 'type_': type_, 'data': data.to_dict()} block_entity = BlockEntity.de_json(json_dict, client) assert block_entity.id == self.id - assert block_entity.type == type + assert block_entity.type == type_ assert block_entity.data == data def test_de_json_all(self, client, block_entity_data_with_type): - data, type = block_entity_data_with_type + data, type_ = block_entity_data_with_type - json_dict = {'id_': self.id, 'type_': type, 'data': data.to_dict()} + json_dict = {'id_': self.id, 'type_': type_, 'data': data.to_dict()} block_entity = BlockEntity.de_json(json_dict, client) assert block_entity.id == self.id - assert block_entity.type == type + assert block_entity.type == type_ assert block_entity.data == data def test_equality(self, block_entity_data_with_type): data, type = block_entity_data_with_type a = BlockEntity(self.id, type, data) - b = BlockEntity(self.id, None, data) + b = BlockEntity(self.id, '', data) c = BlockEntity('', type, data) d = BlockEntity(self.id, type, data) diff --git a/tests/test_brief_info.py b/tests/test_brief_info.py index 439445b..c9125cd 100644 --- a/tests/test_brief_info.py +++ b/tests/test_brief_info.py @@ -75,9 +75,9 @@ class TestBriefInfo: def test_equality(self, artist, track, album, cover, playlist_id, video, vinyl): a = BriefInfo(artist, [album], [album], self.last_release_ids, [track], [artist], [cover], self.concerts, [video], [vinyl], self.has_promotions, [playlist_id]) - b = BriefInfo(artist, [album], [album], self.last_release_ids, None, [artist], [cover], self.concerts, + b = BriefInfo(artist, [album], [album], self.last_release_ids, [], [artist], [cover], self.concerts, [video], [vinyl], True, [playlist_id]) - c = BriefInfo(artist, [album], [album], [1, 2, 3], [track], [artist], None, self.concerts, + c = BriefInfo(artist, [album], [album], [1, 2, 3], [track], [artist], [], self.concerts, [video], [vinyl], self.has_promotions, [playlist_id]) d = BriefInfo(artist, [album], [album], self.last_release_ids, [track], [artist], [cover], self.concerts, [video], [vinyl], self.has_promotions, [playlist_id]) diff --git a/tests/test_download_info.py b/tests/test_download_info.py index fbb1bc1..3908038 100644 --- a/tests/test_download_info.py +++ b/tests/test_download_info.py @@ -11,7 +11,7 @@ def download_info(): class TestDownloadInfo: codec = 'mp3' - bitrate_in_kbps = 'mp3' + bitrate_in_kbps = 192 gain = False preview = False download_info_url = 'https://storage.mds.yandex.net/file-download-info/136146_d158926e.14534319.6.10994777/320' \ diff --git a/tests/test_feed.py b/tests/test_feed.py index 772cc23..cb951ff 100644 --- a/tests/test_feed.py +++ b/tests/test_feed.py @@ -60,7 +60,7 @@ class TestFeed: def test_equality(self, generated_playlist, day): a = Feed(self.can_get_more_events, self.pumpkin, self.is_wizard_passed, [generated_playlist], self.headlines, self.today, [day]) - b = Feed(False, self.pumpkin, self.is_wizard_passed, None, self.headlines, self.today, [day]) + b = Feed(False, self.pumpkin, self.is_wizard_passed, [], self.headlines, self.today, [day]) c = Feed(self.can_get_more_events, self.pumpkin, self.is_wizard_passed, [generated_playlist], self.headlines, self.today, [day]) diff --git a/tests/test_invocation_info.py b/tests/test_invocation_info.py index 1d9348a..f96fc3b 100644 --- a/tests/test_invocation_info.py +++ b/tests/test_invocation_info.py @@ -4,7 +4,7 @@ from yandex_music import InvocationInfo class TestInvocationInfo: hostname = 'myt1-0261-c2e-msk-myt-music-st-e72-18274.gencfg-c.yandex.net' req_id = '1573172241066040-16981638052883278246' - exec_duration_millis = '0' + exec_duration_millis = 0 def test_expected_values(self, invocation_info): assert invocation_info.hostname == self.hostname diff --git a/tests/test_landing.py b/tests/test_landing.py index 64ca04d..8386f30 100644 --- a/tests/test_landing.py +++ b/tests/test_landing.py @@ -36,7 +36,7 @@ class TestLanding: def test_equality(self, block): a = Landing(self.pumpkin, self.content_id, [block]) b = Landing(self.pumpkin, '', [block]) - c = Landing(self.pumpkin, self.content_id, None) + c = Landing(self.pumpkin, self.content_id, []) d = Landing(self.pumpkin, self.content_id, [block]) assert a != b != c diff --git a/tests/test_play_contexts_data.py b/tests/test_play_contexts_data.py index 49a1e08..a74b1e7 100644 --- a/tests/test_play_contexts_data.py +++ b/tests/test_play_contexts_data.py @@ -19,7 +19,7 @@ class TestPlayContextsData: def test_equality(self, track_short_old): a = PlayContextsData([track_short_old]) - b = PlayContextsData(None) + b = PlayContextsData([]) assert a != b != track_short_old assert hash(a) != hash(b) != hash(track_short_old) diff --git a/tests/test_product.py b/tests/test_product.py index fe08688..3831f83 100644 --- a/tests/test_product.py +++ b/tests/test_product.py @@ -8,9 +8,9 @@ class TestProduct: description = None duration = 30 trial_duration = 0 - feature = ['basic-music'] + feature = 'basic-music' debug = False - features = 'basic-music' + features = ['basic-music'] available = None trial_available = None vendor_trial_available = None @@ -83,7 +83,7 @@ class TestProduct: def test_equality(self, price): a = Product(self.product_id, self.type, self.common_period_duration, self.duration, self.trial_duration, price, self.feature, self.debug) - b = Product(10, self.type, self.common_period_duration, self.duration, self.trial_duration, price, + b = Product('', self.type, self.common_period_duration, self.duration, self.trial_duration, price, self.feature, self.debug) c = Product(self.product_id, self.type, self.common_period_duration, self.duration, self.trial_duration, price, self.feature, self.debug) diff --git a/tests/test_station.py b/tests/test_station.py index e97887d..4bf2df8 100644 --- a/tests/test_station.py +++ b/tests/test_station.py @@ -49,10 +49,10 @@ class TestStation: assert station.parent_id == id_ def test_equality(self, id_, icon, restrictions): - a = Station(id_, icon, self.name, icon, icon, icon, self.id_for_from, restrictions, restrictions) - b = Station(id_, icon, self.name, None, icon, icon, self.id_for_from, restrictions, restrictions) - c = Station(id_, icon, '', icon, icon, None, self.id_for_from, restrictions, restrictions) - d = Station(id_, icon, self.name, icon, icon, icon, self.id_for_from, restrictions, restrictions) + a = Station(id_, self.name, icon, icon, icon, self.id_for_from, restrictions, restrictions) + b = Station(id_, self.name, None, icon, icon, self.id_for_from, restrictions, restrictions) + c = Station(id_, '', icon, icon, icon, self.id_for_from, restrictions, restrictions) + d = Station(id_, self.name, icon, icon, icon, self.id_for_from, restrictions, restrictions) assert a != b != c assert hash(a) != hash(b) != hash(c) diff --git a/tests/test_suggestions.py b/tests/test_suggestions.py index e9c061d..aa2bfc8 100644 --- a/tests/test_suggestions.py +++ b/tests/test_suggestions.py @@ -40,7 +40,7 @@ class TestSuggestions: def test_equality(self, best): a = Suggestions(best, self.suggestions) b = Suggestions(None, self.suggestions) - c = Suggestions(best, '') + c = Suggestions(best, []) d = Suggestions(best, self.suggestions) assert a != b != c diff --git a/tests/test_track.py b/tests/test_track.py index 3c406dd..513f860 100644 --- a/tests/test_track.py +++ b/tests/test_track.py @@ -98,7 +98,7 @@ class TestTrack: def test_equality(self, artist, album): a = Track(self.id, self.title, self.available, [artist], [album]) - b = Track(self.id, '', self.available, [artist], [None]) + b = Track(self.id, '', self.available, [artist], []) c = Track(self.id, self.title, self.available, [artist], [album]) assert a != b diff --git a/yandex_music/album/album.py b/yandex_music/album/album.py index 8f02e45..7cfab2b 100644 --- a/yandex_music/album/album.py +++ b/yandex_music/album/album.py @@ -8,29 +8,29 @@ from yandex_music import YandexMusicObject class Album(YandexMusicObject): def __init__(self, - id_, - title, - track_count, + id_: int, + title: str, + track_count: int, artists: List['Artist'], labels: List['Label'], - available, - available_for_premium_users, - cover_uri=None, + available: bool, + available_for_premium_users: bool, + cover_uri: Optional[str] = None, content_warning=None, original_release_year=None, - genre=None, - og_image=None, - buy=None, - recent=None, - very_important=None, - available_for_mobile=None, - available_partially=None, - bests=None, - prerolls=None, + genre: Optional[str] = None, + og_image: Optional[str] = None, + buy: Optional[list] = None, + recent: Optional[bool] = None, + very_important: Optional[bool] = None, + available_for_mobile: Optional[bool] = None, + available_partially: Optional[bool] = None, + bests: Optional[List[int]] = None, + prerolls: Optional[list] = None, volumes: List['Track'] = None, - year=None, - release_date=None, - type_=None, + year: Optional[int] = None, + release_date: Optional[str] = None, + type_: Optional[str] = None, track_position: Optional['TrackPosition'] = None, regions=None, client: Optional['Client'] = None, @@ -94,7 +94,7 @@ class Album(YandexMusicObject): size (:obj:`str`, optional): Размер обложки. """ - self.client.request.download(f'https://{self.og_image("%%", size)}', filename) + self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename) def like(self, *args, **kwargs) -> bool: """Сокращение для:: diff --git a/yandex_music/album/track_position.py b/yandex_music/album/track_position.py index cf13778..32b082b 100644 --- a/yandex_music/album/track_position.py +++ b/yandex_music/album/track_position.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class TrackPosition(YandexMusicObject): def __init__(self, - volume, - index, + volume: int, + index: int, client: Optional['Client'] = None, **kwargs) -> None: self.volume = volume diff --git a/yandex_music/artist/artist.py b/yandex_music/artist/artist.py index 2c029aa..b2a7a50 100644 --- a/yandex_music/artist/artist.py +++ b/yandex_music/artist/artist.py @@ -8,20 +8,20 @@ from yandex_music import YandexMusicObject class Artist(YandexMusicObject): def __init__(self, - id_, - name, + id_: int, + name: str, cover: Optional['Cover'], - various=None, + various: Optional[bool] = None, composer=None, genres=None, op_image=None, no_pictures_from_search=None, counts: Optional['Counts'] = None, - available=None, + available: Optional[bool] = None, ratings: Optional['Ratings'] = None, links: List['Link'] = None, - tickets_available=None, - likes_count=None, + tickets_available: Optional[bool] = None, + likes_count: Optional[int] = None, popular_tracks: List['Track'] = None, regions=None, decomposed=None, @@ -31,7 +31,7 @@ class Artist(YandexMusicObject): en_wikipedia_link=None, db_aliases=None, aliases=None, - init_date=None, + init_date: Optional[str] = None, end_date=None, client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/artist/brief_info.py b/yandex_music/artist/brief_info.py index 396c935..e615b42 100644 --- a/yandex_music/artist/brief_info.py +++ b/yandex_music/artist/brief_info.py @@ -11,14 +11,14 @@ class BriefInfo(YandexMusicObject): artist: Optional['Artist'], albums: List['Album'], also_albums: List['Album'], - last_release_ids, + last_release_ids: List[int], popular_tracks: List['Track'], similar_artists: List['Artist'], all_covers: List['Cover'], concerts, videos: List['Video'], vinyls: List['Vinyl'], - has_promotions, + has_promotions: bool, playlist_ids: List['PlaylistId'], tracks_in_chart: List['Chart'] = None, client: Optional['Client'] = None, diff --git a/yandex_music/artist/counts.py b/yandex_music/artist/counts.py index 42a6b25..167af90 100644 --- a/yandex_music/artist/counts.py +++ b/yandex_music/artist/counts.py @@ -8,10 +8,10 @@ from yandex_music import YandexMusicObject class Counts(YandexMusicObject): def __init__(self, - tracks, - direct_albums, - also_albums, - also_tracks, + tracks: int, + direct_albums: int, + also_albums: int, + also_tracks: int, client: Optional['Client'] = None, **kwargs) -> None: self.tracks = tracks diff --git a/yandex_music/artist/description.py b/yandex_music/artist/description.py index e586998..ebe4e15 100644 --- a/yandex_music/artist/description.py +++ b/yandex_music/artist/description.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Description(YandexMusicObject): def __init__(self, - text, - url, + text: str, + url: str, client: Optional['Client'] = None, **kwargs) -> None: self.text = text diff --git a/yandex_music/artist/link.py b/yandex_music/artist/link.py index 6a5f94d..8aaed24 100644 --- a/yandex_music/artist/link.py +++ b/yandex_music/artist/link.py @@ -8,10 +8,10 @@ from yandex_music import YandexMusicObject class Link(YandexMusicObject): def __init__(self, - title, - href, - type_, - social_network=None, + title: str, + href: str, + type_: str, + social_network: Optional[str] = None, client: Optional['Client'] = None, **kwargs) -> None: self.title = title diff --git a/yandex_music/artist/ratings.py b/yandex_music/artist/ratings.py index efee35d..e946e6e 100644 --- a/yandex_music/artist/ratings.py +++ b/yandex_music/artist/ratings.py @@ -8,9 +8,9 @@ from yandex_music import YandexMusicObject class Ratings(YandexMusicObject): def __init__(self, - week, - month, - day=None, + week: int, + month: int, + day: Optional[int] = None, client: Optional['Client'] = None, **kwargs) -> None: self.week = week diff --git a/yandex_music/artist/vinyl.py b/yandex_music/artist/vinyl.py index b61f553..262ac04 100644 --- a/yandex_music/artist/vinyl.py +++ b/yandex_music/artist/vinyl.py @@ -8,12 +8,12 @@ from yandex_music import YandexMusicObject class Vinyl(YandexMusicObject): def __init__(self, - url, - picture, - title, - year, - price, - media, + url: str, + picture: str, + title: str, + year: int, + price: int, + media: str, client: Optional['Client'] = None, **kwargs) -> None: self.url = url diff --git a/yandex_music/feed/day.py b/yandex_music/feed/day.py index 0c9be4a..a79b3b1 100644 --- a/yandex_music/feed/day.py +++ b/yandex_music/feed/day.py @@ -8,7 +8,7 @@ from yandex_music import YandexMusicObject class Day(YandexMusicObject): def __init__(self, - day, + day: str, events: List['Event'], tracks_to_play_with_ads: List['TrackWithAds'], tracks_to_play: List['Track'], diff --git a/yandex_music/feed/event.py b/yandex_music/feed/event.py index 75f3815..42896a8 100644 --- a/yandex_music/feed/event.py +++ b/yandex_music/feed/event.py @@ -8,16 +8,16 @@ from yandex_music import YandexMusicObject class Event(YandexMusicObject): def __init__(self, - id_, - type_, - type_for_from=None, - title=None, + id_: str, + type_: str, + type_for_from: Optional[str] = None, + title: Optional[str] = None, tracks: List['Track'] = None, artists: List['ArtistEvent'] = None, albums: List['AlbumEvent'] = None, message=None, device=None, - tracks_count=None, + tracks_count: Optional[int] = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ diff --git a/yandex_music/feed/feed.py b/yandex_music/feed/feed.py index 96a633d..9dd9df6 100644 --- a/yandex_music/feed/feed.py +++ b/yandex_music/feed/feed.py @@ -8,14 +8,14 @@ from yandex_music import YandexMusicObject class Feed(YandexMusicObject): def __init__(self, - can_get_more_events, - pumpkin, - is_wizard_passed, + can_get_more_events: bool, + pumpkin: bool, + is_wizard_passed: bool, generated_playlists: List['GeneratedPlaylist'], - headlines, - today, - days: Optional['Day'], - next_revision=None, + headlines: list, + today: str, + days: List['Day'], + next_revision: Optional[str] = None, client: Optional['Client'] = None, **kwargs) -> None: self.can_get_more_events = can_get_more_events diff --git a/yandex_music/feed/generated_playlist.py b/yandex_music/feed/generated_playlist.py index 03d373a..4833ad5 100644 --- a/yandex_music/feed/generated_playlist.py +++ b/yandex_music/feed/generated_playlist.py @@ -8,9 +8,9 @@ from yandex_music import YandexMusicObject class GeneratedPlaylist(YandexMusicObject): def __init__(self, - type_, - ready, - notify, + type_: str, + ready: bool, + notify: bool, data: Optional['Playlist'], client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/genre/genre.py b/yandex_music/genre/genre.py index 2ba7772..5a15352 100644 --- a/yandex_music/genre/genre.py +++ b/yandex_music/genre/genre.py @@ -8,16 +8,16 @@ from yandex_music import YandexMusicObject class Genre(YandexMusicObject): def __init__(self, - id_, - weight, - composer_top, - title, + id_: str, + weight: int, + composer_top: bool, + title: str, titles: Dict[str, Optional['Title']], images: Optional['Images'], - show_in_menu, - full_title=None, - url_part=None, - color=None, + show_in_menu: bool, + full_title: Optional[str] = None, + url_part: Optional[str] = None, + color: Optional[str] = None, radio_icon: Optional['Icon'] = None, sub_genres: List['Genre'] = None, hide_in_regions=None, diff --git a/yandex_music/genre/title.py b/yandex_music/genre/title.py index 7bac374..427d310 100644 --- a/yandex_music/genre/title.py +++ b/yandex_music/genre/title.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Title(YandexMusicObject): def __init__(self, - title, - full_title=None, + title: str, + full_title: Optional[str] = None, client: Optional['Client'] = None, **kwargs) -> None: self.title = title diff --git a/yandex_music/icon.py b/yandex_music/icon.py index 0bd47ac..37c6134 100644 --- a/yandex_music/icon.py +++ b/yandex_music/icon.py @@ -34,7 +34,7 @@ class Icon(YandexMusicObject): self.client = client self._id_attrs = (self.background_color, self.image_url) - def download(self, filename: str, size: str = '200x200'): + def download(self, filename: str, size: str = '200x200') -> None: """Загрузка иконки. Args: diff --git a/yandex_music/invocation_info.py b/yandex_music/invocation_info.py index bb29d70..c00842c 100644 --- a/yandex_music/invocation_info.py +++ b/yandex_music/invocation_info.py @@ -28,7 +28,7 @@ class InvocationInfo(YandexMusicObject): def __init__(self, hostname: str, req_id: str, - exec_duration_millis: Optional[str] = None, + exec_duration_millis: Optional[int] = None, client: Optional['Client'] = None, **kwargs): self.hostname = hostname diff --git a/yandex_music/landing/block.py b/yandex_music/landing/block.py index 8b2eec4..06a098e 100644 --- a/yandex_music/landing/block.py +++ b/yandex_music/landing/block.py @@ -8,12 +8,12 @@ from yandex_music import YandexMusicObject class Block(YandexMusicObject): def __init__(self, - id_, - type_, - type_for_from, - title, + id_: str, + type_: str, + type_for_from: str, + title: str, entities: List['BlockEntity'], - description=None, + description: Optional[str] = None, data: Optional[Union['PersonalPlaylistsData', 'PlayContextsData']] = None, client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/landing/block_entity.py b/yandex_music/landing/block_entity.py index 5a7304d..9c17ad5 100644 --- a/yandex_music/landing/block_entity.py +++ b/yandex_music/landing/block_entity.py @@ -20,7 +20,7 @@ de_json = { class BlockEntity(YandexMusicObject): def __init__(self, - id_, + id_: str, type_: str, data: Optional[Union['GeneratedPlaylist', 'Promotion', 'Album', 'Playlist', 'ChartItem', 'PlayContext', 'MixLink']], diff --git a/yandex_music/landing/chart.py b/yandex_music/landing/chart.py index 196fdec..57c5c63 100644 --- a/yandex_music/landing/chart.py +++ b/yandex_music/landing/chart.py @@ -8,10 +8,10 @@ from yandex_music import YandexMusicObject class Chart(YandexMusicObject): def __init__(self, - position, - progress, - listeners, - shift, + position: int, + progress: str, + listeners: int, + shift: int, track_id: Optional['TrackId'] = None, client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/landing/landing.py b/yandex_music/landing/landing.py index 9bf369a..ff5aa66 100644 --- a/yandex_music/landing/landing.py +++ b/yandex_music/landing/landing.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: from yandex_music import Client, Block @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Landing(YandexMusicObject): def __init__(self, - pumpkin, - content_id, + pumpkin: bool, + content_id: Union[str, int], blocks: List['Block'], client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/landing/mix_link.py b/yandex_music/landing/mix_link.py index 4c9eb8a..dfd2976 100644 --- a/yandex_music/landing/mix_link.py +++ b/yandex_music/landing/mix_link.py @@ -8,13 +8,13 @@ from yandex_music import YandexMusicObject class MixLink(YandexMusicObject): def __init__(self, - title, - url, - url_scheme, - text_color, - background_color, - background_image_uri, - cover_white, + title: str, + url: str, + url_scheme: str, + text_color: str, + background_color: str, + background_image_uri: str, + cover_white: str, client: Optional['Client'] = None, **kwargs) -> None: self.title = title diff --git a/yandex_music/landing/play_context.py b/yandex_music/landing/play_context.py index 6f69bdb..9b3b12a 100644 --- a/yandex_music/landing/play_context.py +++ b/yandex_music/landing/play_context.py @@ -8,9 +8,9 @@ from yandex_music import YandexMusicObject class PlayContext(YandexMusicObject): def __init__(self, - client_, - context, - context_item, + client_: str, + context: str, + context_item: str, tracks: List['TrackShortOld'], client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/landing/promotion.py b/yandex_music/landing/promotion.py index 19450da..8eca1a3 100644 --- a/yandex_music/landing/promotion.py +++ b/yandex_music/landing/promotion.py @@ -8,15 +8,15 @@ from yandex_music import YandexMusicObject class Promotion(YandexMusicObject): def __init__(self, - promo_id, - title, - subtitle, - heading, - url, - url_scheme, - text_color, - gradient, - image, + promo_id: str, + title: str, + subtitle: str, + heading: str, + url: str, + url_scheme: str, + text_color: str, + gradient: str, + image: str, client: Optional['Client'] = None, **kwargs) -> None: self.promo_id = promo_id diff --git a/yandex_music/landing/track_id.py b/yandex_music/landing/track_id.py index ec9287c..fff477d 100644 --- a/yandex_music/landing/track_id.py +++ b/yandex_music/landing/track_id.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class TrackId(YandexMusicObject): def __init__(self, - id_, - album_id=None, + id_: int, + album_id: Optional[int] = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ diff --git a/yandex_music/landing/track_short_old.py b/yandex_music/landing/track_short_old.py index 2971638..70d7dc0 100644 --- a/yandex_music/landing/track_short_old.py +++ b/yandex_music/landing/track_short_old.py @@ -9,7 +9,7 @@ from yandex_music import YandexMusicObject class TrackShortOld(YandexMusicObject): def __init__(self, track_id: Optional['TrackId'], - timestamp, + timestamp: str, client: Optional['Client'] = None, **kwargs) -> None: self.track_id = track_id diff --git a/yandex_music/likes/albums_likes.py b/yandex_music/likes/albums_likes.py index 8701146..ef9af07 100644 --- a/yandex_music/likes/albums_likes.py +++ b/yandex_music/likes/albums_likes.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class AlbumsLikes(YandexMusicObject): def __init__(self, - timestamp, - id_=None, + timestamp: str, + id_: Optional[int] = None, album: Optional['Album'] = None, client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/likes/artists_likes.py b/yandex_music/likes/artists_likes.py index 28ee261..f36c51f 100644 --- a/yandex_music/likes/artists_likes.py +++ b/yandex_music/likes/artists_likes.py @@ -10,7 +10,7 @@ class ArtistsLikes(YandexMusicObject): def __init__(self, id_=None, artist: Optional['Artist'] = None, - timestamp=None, + timestamp: str = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ diff --git a/yandex_music/likes/playlists_likes.py b/yandex_music/likes/playlists_likes.py index 7677d21..f37e325 100644 --- a/yandex_music/likes/playlists_likes.py +++ b/yandex_music/likes/playlists_likes.py @@ -8,7 +8,7 @@ from yandex_music import YandexMusicObject class PlaylistsLikes(YandexMusicObject): def __init__(self, - timestamp, + timestamp: str, id_=None, playlist: Optional['Playlist'] = None, client: Optional['Client'] = None, diff --git a/yandex_music/permission_alerts.py b/yandex_music/permission_alerts.py index 28dbd96..7b1135b 100644 --- a/yandex_music/permission_alerts.py +++ b/yandex_music/permission_alerts.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: from yandex_music import Client @@ -22,7 +22,7 @@ class PermissionAlerts(YandexMusicObject): """ def __init__(self, - alerts, + alerts: List[str], client: Optional['Client'] = None, **kwargs): self.alerts = alerts diff --git a/yandex_music/playlist/case_forms.py b/yandex_music/playlist/case_forms.py index 838d13a..e693856 100644 --- a/yandex_music/playlist/case_forms.py +++ b/yandex_music/playlist/case_forms.py @@ -8,12 +8,12 @@ from yandex_music import YandexMusicObject class CaseForms(YandexMusicObject): def __init__(self, - nominative, - genitive, - dative, - accusative, - instrumental, - prepositional, + nominative: str, + genitive: str, + dative: str, + accusative: str, + instrumental: str, + prepositional: str, client: Optional['Client'] = None, **kwargs) -> None: self.nominative = nominative diff --git a/yandex_music/playlist/play_counter.py b/yandex_music/playlist/play_counter.py index c5703c3..aa96631 100644 --- a/yandex_music/playlist/play_counter.py +++ b/yandex_music/playlist/play_counter.py @@ -8,9 +8,9 @@ from yandex_music import YandexMusicObject class PlayCounter(YandexMusicObject): def __init__(self, - value, - description, - updated, + value: int, + description: str, + updated: bool, client: Optional['Client'] = None, **kwargs) -> None: self.value = value diff --git a/yandex_music/playlist/playlist.py b/yandex_music/playlist/playlist.py index d938f4d..a18127e 100644 --- a/yandex_music/playlist/playlist.py +++ b/yandex_music/playlist/playlist.py @@ -13,30 +13,30 @@ class Playlist(YandexMusicObject): made_for: Optional['MadeFor'], play_counter: Optional['PlayCounter'], playlist_absence: Optional['PlaylistAbsence'], - uid=None, - kind=None, - title=None, - track_count=None, - tags=None, - revision=None, - snapshot=None, - visibility=None, - collective=None, - created=None, - modified=None, - available=None, - is_banner=None, - is_premiere=None, - duration_ms=None, - og_image=None, - tracks=None, - prerolls=None, - likes_count=None, - generated_playlist_type=None, - animated_cover_uri=None, - ever_played=None, - description=None, - description_formatted=None, + uid: Optional[int] = None, + kind: Optional[int] = None, + title: Optional[str] = None, + track_count: Optional[int] = None, + tags: Optional[list] = None, + revision: Optional[int] = None, + snapshot: Optional[int] = None, + visibility: Optional[str] = None, + collective: Optional[bool] = None, + created: Optional[str] = None, + modified: Optional[str] = None, + available: Optional[bool] = None, + is_banner: Optional[bool] = None, + is_premiere: Optional[bool] = None, + duration_ms: Optional[int] = None, + og_image: Optional[str] = None, + tracks: List['TrackShort'] = None, + prerolls: Optional[list] = None, + likes_count: Optional[int] = None, + generated_playlist_type: Optional[str] = None, + animated_cover_uri: Optional[str] = None, + ever_played: Optional[bool] = None, + description: Optional[str] = None, + description_formatted: Optional[str] = None, is_for_from=None, regions=None, client: Optional['Client'] = None, diff --git a/yandex_music/playlist/playlist_id.py b/yandex_music/playlist/playlist_id.py index 871d5b7..914a064 100644 --- a/yandex_music/playlist/playlist_id.py +++ b/yandex_music/playlist/playlist_id.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class PlaylistId(YandexMusicObject): def __init__(self, - uid, - kind, + uid: int, + kind: int, client: Optional['Client'] = None, **kwargs) -> None: self.uid = uid diff --git a/yandex_music/promo_code_status.py b/yandex_music/promo_code_status.py index 8c31a09..45222f6 100644 --- a/yandex_music/promo_code_status.py +++ b/yandex_music/promo_code_status.py @@ -30,7 +30,7 @@ class PromoCodeStatus(YandexMusicObject): def __init__(self, status: str, status_desc: str, - account_status: 'Status', + account_status: Optional['Status'], client: Optional['Client'] = None, **kwargs): self.status = status diff --git a/yandex_music/rotor/ad_params.py b/yandex_music/rotor/ad_params.py index 96d2243..8820e50 100644 --- a/yandex_music/rotor/ad_params.py +++ b/yandex_music/rotor/ad_params.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: from yandex_music import Client @@ -8,12 +8,12 @@ from yandex_music import YandexMusicObject class AdParams(YandexMusicObject): def __init__(self, - partner_id, - category_id, - page_ref, - target_ref, - other_params, - ad_volume, + partner_id: Union[str, int], + category_id: Union[str, int], + page_ref: str, + target_ref: str, + other_params: str, + ad_volume: int, genre_id=None, genre_name=None, client: Optional['Client'] = None, diff --git a/yandex_music/rotor/dashboard.py b/yandex_music/rotor/dashboard.py index 0aee59f..76a9bf0 100644 --- a/yandex_music/rotor/dashboard.py +++ b/yandex_music/rotor/dashboard.py @@ -8,9 +8,9 @@ from yandex_music import YandexMusicObject class Dashboard(YandexMusicObject): def __init__(self, - dashboard_id, + dashboard_id: str, stations: List['StationResult'], - pumpkin, + pumpkin: bool, client: Optional['Client'] = None, **kwargs) -> None: self.dashboard_id = dashboard_id diff --git a/yandex_music/rotor/discrete_scale.py b/yandex_music/rotor/discrete_scale.py index 1836607..76fe5b9 100644 --- a/yandex_music/rotor/discrete_scale.py +++ b/yandex_music/rotor/discrete_scale.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class DiscreteScale(YandexMusicObject): def __init__(self, - type_, - name, + type_: str, + name: str, min_: Optional['Value'], max_: Optional['Value'], client: Optional['Client'] = None, diff --git a/yandex_music/rotor/enum.py b/yandex_music/rotor/enum.py index 45aa9ad..abaef59 100644 --- a/yandex_music/rotor/enum.py +++ b/yandex_music/rotor/enum.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Enum(YandexMusicObject): def __init__(self, - type_, - name, + type_: str, + name: str, possible_values: List['Value'], client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/rotor/id.py b/yandex_music/rotor/id.py index 3b1db23..cd35c33 100644 --- a/yandex_music/rotor/id.py +++ b/yandex_music/rotor/id.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Id(YandexMusicObject): def __init__(self, - type_, - tag, + type_: str, + tag: str, client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ diff --git a/yandex_music/rotor/restrictions.py b/yandex_music/rotor/restrictions.py index 0a7800f..8572a99 100644 --- a/yandex_music/rotor/restrictions.py +++ b/yandex_music/rotor/restrictions.py @@ -14,7 +14,7 @@ de_json = { class Restrictions(YandexMusicObject): def __init__(self, - language, + language: Optional[Union['Enum', 'DiscreteScale']], diversity: Optional[Union['Enum', 'DiscreteScale']], mood: Optional[Union['Enum', 'DiscreteScale']] = None, energy: Optional[Union['Enum', 'DiscreteScale']] = None, diff --git a/yandex_music/rotor/rotor_settings.py b/yandex_music/rotor/rotor_settings.py index f0ccfaf..f177cfd 100644 --- a/yandex_music/rotor/rotor_settings.py +++ b/yandex_music/rotor/rotor_settings.py @@ -8,10 +8,10 @@ from yandex_music import YandexMusicObject class RotorSettings(YandexMusicObject): def __init__(self, - language, - diversity, - mood=None, - energy=None, + language: str, + diversity: str, + mood: Optional[int] = None, + energy: Optional[int] = None, mood_energy=None, client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/rotor/sequence.py b/yandex_music/rotor/sequence.py index 18c4048..21a2219 100644 --- a/yandex_music/rotor/sequence.py +++ b/yandex_music/rotor/sequence.py @@ -8,9 +8,9 @@ from yandex_music import YandexMusicObject class Sequence(YandexMusicObject): def __init__(self, - type_, + type_: str, track: Optional['Track'], - liked, + liked: bool, client: Optional['Client'] = None, **kwargs) -> None: self.type = type_ diff --git a/yandex_music/rotor/station.py b/yandex_music/rotor/station.py index 3dc8219..519e555 100644 --- a/yandex_music/rotor/station.py +++ b/yandex_music/rotor/station.py @@ -9,11 +9,11 @@ from yandex_music import YandexMusicObject class Station(YandexMusicObject): def __init__(self, id_: Optional['Id'], - name, + name: str, icon: Optional['Icon'], mts_icon: Optional['Icon'], geocell_icon: Optional['Icon'], - id_for_from, + id_for_from: str, restrictions: Optional['Restrictions'], restrictions2: Optional['Restrictions'], parent_id: Optional['Id'] = None, diff --git a/yandex_music/rotor/station_result.py b/yandex_music/rotor/station_result.py index e5c31b4..3e94c22 100644 --- a/yandex_music/rotor/station_result.py +++ b/yandex_music/rotor/station_result.py @@ -12,8 +12,8 @@ class StationResult(YandexMusicObject): settings: Optional['RotorSettings'], settings2: Optional['RotorSettings'], ad_params: Optional['AdParams'], - explanation=None, - prerolls=None, + explanation: Optional[str] = None, + prerolls: Optional[list] = None, client: Optional['Client'] = None, **kwargs) -> None: self.station = station diff --git a/yandex_music/rotor/station_tracks_result.py b/yandex_music/rotor/station_tracks_result.py index 1cae322..8e7d332 100644 --- a/yandex_music/rotor/station_tracks_result.py +++ b/yandex_music/rotor/station_tracks_result.py @@ -10,8 +10,8 @@ class StationTracksResult(YandexMusicObject): def __init__(self, id_: Optional['Id'], sequence: List['Sequence'], - batch_id, - pumpkin, + batch_id: str, + pumpkin: bool, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ diff --git a/yandex_music/rotor/value.py b/yandex_music/rotor/value.py index 8d114e1..b7df47a 100644 --- a/yandex_music/rotor/value.py +++ b/yandex_music/rotor/value.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Value(YandexMusicObject): def __init__(self, - value, - name, + value: str, + name: str, client: Optional['Client'] = None, **kwargs) -> None: self.value = value diff --git a/yandex_music/search/search_result.py b/yandex_music/search/search_result.py index 5ccf597..f31da0d 100644 --- a/yandex_music/search/search_result.py +++ b/yandex_music/search/search_result.py @@ -17,9 +17,9 @@ de_json_result = { class SearchResult(YandexMusicObject): def __init__(self, - total, - per_page, - order, + total: int, + per_page: int, + order: int, results: List[Union[Track, Artist, Album, Playlist, Video]], client: Optional['Client'] = None, **kwargs) -> None: diff --git a/yandex_music/search/suggestions.py b/yandex_music/search/suggestions.py index 4c41dce..29b6c60 100644 --- a/yandex_music/search/suggestions.py +++ b/yandex_music/search/suggestions.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, List if TYPE_CHECKING: from yandex_music import Client, Best @@ -9,7 +9,7 @@ from yandex_music import YandexMusicObject class Suggestions(YandexMusicObject): def __init__(self, best: Optional['Best'], - suggestions, + suggestions: List[str], client: Optional['Client'] = None, **kwargs) -> None: self.best = best diff --git a/yandex_music/track/major.py b/yandex_music/track/major.py index f322c0c..e2badef 100644 --- a/yandex_music/track/major.py +++ b/yandex_music/track/major.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Major(YandexMusicObject): def __init__(self, - id_, - name, + id_: int, + name: str, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ @@ -19,7 +19,7 @@ class Major(YandexMusicObject): self._id_attrs = (self.id, self.name) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Major']: if not data: return None diff --git a/yandex_music/track/normalization.py b/yandex_music/track/normalization.py index edfd5db..a7fe85d 100644 --- a/yandex_music/track/normalization.py +++ b/yandex_music/track/normalization.py @@ -8,8 +8,8 @@ from yandex_music import YandexMusicObject class Normalization(YandexMusicObject): def __init__(self, - gain, - peak, + gain: float, + peak: int, client: Optional['Client'] = None, **kwargs) -> None: self.gain = gain @@ -19,7 +19,7 @@ class Normalization(YandexMusicObject): self._id_attrs = (self.gain, self.peak) @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Normalization']: if not data: return None diff --git a/yandex_music/track/track.py b/yandex_music/track/track.py index 4eb04c6..fcadae2 100644 --- a/yandex_music/track/track.py +++ b/yandex_music/track/track.py @@ -1,36 +1,36 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: - from yandex_music import Client + from yandex_music import Client, Normalization, Major, Album, Artist, Supplement, DownloadInfo from yandex_music import YandexMusicObject class Track(YandexMusicObject): def __init__(self, - id_, - title, - available, - artists, - albums, - available_for_premium_users=None, - lyrics_available=None, - real_id=None, - og_image=None, - type_=None, - cover_uri=None, - major=None, - duration_ms=None, - storage_dir=None, - file_size=None, - normalization=None, + id_: Union[str, int], + title: str, + available: bool, + artists: List['Artist'], + albums: List['Album'], + available_for_premium_users: Optional[bool] = None, + lyrics_available: Optional[bool] = None, + real_id: Optional[Union[str, int]] = None, + og_image: Optional[str] = None, + type_: Optional[str] = None, + cover_uri: Optional[str] = None, + major: Optional['Major'] = None, + duration_ms: Optional[int] = None, + storage_dir: Optional[str] = None, + file_size: Optional[int] = None, + normalization: Optional['Normalization'] = None, error=None, regions=None, available_as_rbt=None, content_warning=None, explicit=None, - preview_duration_ms=None, - available_full_without_permission=None, + preview_duration_ms: Optional[int] = None, + available_full_without_permission: Optional[bool] = None, client: Optional['Client'] = None, **kwargs) -> None: self.id = id_ @@ -63,19 +63,19 @@ class Track(YandexMusicObject): self.client = client self._id_attrs = (self.id, self.title, self.available, self.artists, self.albums) - def get_download_info(self, get_direct_links=False): + def get_download_info(self, get_direct_links=False) -> List['DownloadInfo']: self.download_info = self.client.tracks_download_info(self.track_id, get_direct_links) return self.download_info - def get_supplement(self, *args, **kwargs): + def get_supplement(self, *args, **kwargs) -> Optional['Supplement']: """Сокращение для:: client.track_supplement(track.id, *args, **kwargs) """ return self.client.track_supplement(self.id, *args, **kwargs) - def download_cover(self, filename, size='200x200'): + def download_cover(self, filename: str, size: str = '200x200') -> None: """Загрузка обложки. Args: @@ -85,7 +85,7 @@ class Track(YandexMusicObject): self.client.request.download(f'https://{self.cover_uri.replace("%%", size)}', filename) - def download_og_image(self, filename, size='200x200'): + def download_og_image(self, filename: str, size: str = '200x200') -> None: """Загрузка обложки. Предпочтительнее использовать self.download_cover(). @@ -97,7 +97,7 @@ class Track(YandexMusicObject): self.client.request.download(f'https://{self.og_image.replace("%%", size)}', filename) - def download(self, filename, codec='mp3', bitrate_in_kbps=192): + def download(self, filename: str, codec: str = 'mp3', bitrate_in_kbps: int = 192) -> None: if self.download_info is None: self.get_download_info() @@ -105,14 +105,14 @@ class Track(YandexMusicObject): if info.codec == codec and info.bitrate_in_kbps == bitrate_in_kbps: info.download(filename) - def like(self, *args, **kwargs): + def like(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_tracks_add(track.id, user.id, *args, **kwargs) """ return self.client.users_likes_tracks_add(self.track_id, self.client.me.account.uid, *args, **kwargs) - def dislike(self, *args, **kwargs): + def dislike(self, *args, **kwargs) -> bool: """Сокращение для:: client.users_likes_tracks_remove(track.id, user.id *args, **kwargs) @@ -120,11 +120,11 @@ class Track(YandexMusicObject): return self.client.users_likes_tracks_remove(self.track_id, self.client.me.account.uid, *args, **kwargs) @property - def track_id(self): + def track_id(self) -> str: return f'{self.id}' @classmethod - def de_json(cls, data: dict, client: 'Client'): + def de_json(cls, data: dict, client: 'Client') -> Optional['Track']: if not data: return None @@ -138,7 +138,7 @@ class Track(YandexMusicObject): return cls(client=client, **data) @classmethod - def de_list(cls, data: dict, client: 'Client'): + def de_list(cls, data: dict, client: 'Client') -> List['Track']: if not data: return [] diff --git a/yandex_music/track_short.py b/yandex_music/track_short.py index 987f714..8cccee3 100644 --- a/yandex_music/track_short.py +++ b/yandex_music/track_short.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: from yandex_music import Client, Track @@ -26,7 +26,7 @@ class TrackShort(YandexMusicObject): """ def __init__(self, - id_: str, + id_: Union[str, int], timestamp: str, album_id: Optional[str] = None, client: Optional['Client'] = None, diff --git a/yandex_music/video.py b/yandex_music/video.py index 60de6ac..a89293b 100644 --- a/yandex_music/video.py +++ b/yandex_music/video.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional, List +from typing import TYPE_CHECKING, Optional, List, Union if TYPE_CHECKING: from yandex_music import Client @@ -8,13 +8,13 @@ from yandex_music import YandexMusicObject class Video(YandexMusicObject): def __init__(self, - title, - cover=None, - embed_url=None, - provider=None, - provider_video_id=None, - youtube_url=None, - thumbnail_url=None, + title: str, + cover: Optional[str] = None, + embed_url: Optional[str] = None, + provider: Optional['str'] = None, + provider_video_id: Optional[Union[int, str]] = None, + youtube_url: Optional[str] = None, + thumbnail_url: Optional[str] = None, duration=None, text=None, html_auto_play_video_player=None,