Добавлены тайп хинты для Block, BlockEntity, Char, CharItem, MixLink, PersonalPlaylistsData, PlayContext, PlayContextsData, Promotion, TrackId, TrackShortOld, AlbumsLikes, ArtistsLikes, PlaylistsLikes, CaseForms, MadeFor, PlayCounter, PlaylistAbsence, PlaylistId, User

このコミットが含まれているのは:
Marshal 2019-12-27 16:40:26 +03:00
コミット 7a0ff6c32e
20個のファイルの変更74行の追加71行の削除

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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

ファイルの表示

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