Тайп хинты для Label, TrackPosition, Artist, ArtistAlbums, ArtistTracks, BriefInfo, Counts, Description, Link, Ratings, Vinyl, AlbumEvent, ArtistEvent, Day, Event, GeneratedPlaylist, TrackWithAds, Genre, Images, Title

このコミットが含まれているのは:
Marshal 2019-12-28 14:38:59 +03:00
コミット 510b37bb32
20個のファイルの変更98行の追加98行の削除

ファイルの表示

@ -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`.
"""

ファイルの表示

@ -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

ファイルの表示

@ -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 []

ファイルの表示

@ -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:

ファイルの表示

@ -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:

ファイルの表示

@ -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:

ファイルの表示

@ -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

ファイルの表示

@ -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:

ファイルの表示

@ -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 []

ファイルの表示

@ -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

ファイルの表示

@ -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:

ファイルの表示

@ -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 []

ファイルの表示

@ -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 []

ファイルの表示

@ -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 []

ファイルの表示

@ -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 []

ファイルの表示

@ -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 []

ファイルの表示

@ -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 []

ファイルの表示

@ -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 []

ファイルの表示

@ -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

ファイルの表示

@ -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 {}