Skip to content

Commit

Permalink
Introduce new IDMissingError error; update artist shortcuts' docume…
Browse files Browse the repository at this point in the history
…ntation
  • Loading branch information
es3n1n committed Jan 17, 2025
1 parent 04cae3b commit 0e7507a
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
3 changes: 2 additions & 1 deletion tests/test_artist.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import pytest

from yandex_music import Artist
from yandex_music.exceptions import IDMissingError


class TestArtist:
Expand Down Expand Up @@ -165,5 +166,5 @@ def test_id_required(self, client):
artist = Artist.de_json({'name': self.name}, client)

# Make sure we throw an error if we try to access the id_required property when id is None
with pytest.raises(ValueError):
with pytest.raises(IDMissingError):
_ = artist.id_required
22 changes: 12 additions & 10 deletions yandex_music/artist/artist.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import TYPE_CHECKING, Any, List, Optional, Union

from yandex_music import YandexMusicModel
from yandex_music.exceptions import IDMissingError
from yandex_music.utils import model

if TYPE_CHECKING:
Expand Down Expand Up @@ -103,8 +104,7 @@ def id_required(self) -> int:
:obj:`int`: Уникальный идентификатор исполнителя.
"""
if self.id is None:
msg = 'Artist.id is required'
raise ValueError(msg)
raise IDMissingError('Artist.id is required')

return self.id

Expand Down Expand Up @@ -235,39 +235,39 @@ async def download_op_image_bytes_async(self, size: str = '200x200') -> bytes:
def like(self, *args: Any, **kwargs: Any) -> bool:
"""Сокращение для::
client.users_likes_artists_add(artist.id, user.id *args, **kwargs)
client.users_likes_artists_add(artist.id_required, user.id *args, **kwargs)
"""
assert self.valid_client(self.client)
return self.client.users_likes_artists_add(self.id_required, self.client.account_uid, *args, **kwargs)

async def like_async(self, *args: Any, **kwargs: Any) -> bool:
"""Сокращение для::
await client.users_likes_artists_add(artist.id, user.id *args, **kwargs)
await client.users_likes_artists_add(artist.id_required, user.id *args, **kwargs)
"""
assert self.valid_async_client(self.client)
return await self.client.users_likes_artists_add(self.id_required, self.client.account_uid, *args, **kwargs)

def dislike(self, *args: Any, **kwargs: Any) -> bool:
"""Сокращение для::
client.users_likes_artists_remove(artist.id, user.id *args, **kwargs)
client.users_likes_artists_remove(artist.id_required, user.id *args, **kwargs)
"""
assert self.valid_client(self.client)
return self.client.users_likes_artists_remove(self.id_required, self.client.account_uid, *args, **kwargs)

async def dislike_async(self, *args: Any, **kwargs: Any) -> bool:
"""Сокращение для::
await client.users_likes_artists_remove(artist.id, user.id *args, **kwargs)
await client.users_likes_artists_remove(artist.id_required, user.id *args, **kwargs)
"""
assert self.valid_async_client(self.client)
return await self.client.users_likes_artists_remove(self.id_required, self.client.account_uid, *args, **kwargs)

def get_tracks(self, page: int = 0, page_size: int = 20, *args: Any, **kwargs: Any) -> Optional['ArtistTracks']:
"""Сокращение для::
client.artists_tracks(artist.id, page, page_size, *args, **kwargs)
client.artists_tracks(artist.id_required, page, page_size, *args, **kwargs)
"""
assert self.valid_client(self.client)
return self.client.artists_tracks(self.id_required, page, page_size, *args, **kwargs)
Expand All @@ -277,7 +277,7 @@ async def get_tracks_async(
) -> Optional['ArtistTracks']:
"""Сокращение для::
await client.artists_tracks(artist.id, page, page_size, *args, **kwargs)
await client.artists_tracks(artist.id_required, page, page_size, *args, **kwargs)
"""
assert self.valid_async_client(self.client)
return await self.client.artists_tracks(self.id_required, page, page_size, *args, **kwargs)
Expand All @@ -287,7 +287,7 @@ def get_albums(
) -> Optional['ArtistAlbums']:
"""Сокращение для::
client.artists_direct_albums(artist.id, page, page_size, sort_by, *args, **kwargs)
client.artists_direct_albums(artist.id_required, page, page_size, sort_by, *args, **kwargs)
"""
assert self.valid_client(self.client)
return self.client.artists_direct_albums(self.id_required, page, page_size, sort_by, *args, **kwargs)
Expand All @@ -297,7 +297,7 @@ async def get_albums_async(
) -> Optional['ArtistAlbums']:
"""Сокращение для::
await client.artists_direct_albums(artist.id, page, page_size, sort_by, *args, **kwargs)
await client.artists_direct_albums(artist.id_required, page, page_size, sort_by, *args, **kwargs)
"""
assert self.valid_async_client(self.client)
return await self.client.artists_direct_albums(self.id_required, page, page_size, sort_by, *args, **kwargs)
Expand Down Expand Up @@ -344,6 +344,8 @@ def de_json(cls, data: 'JSONType', client: 'ClientType') -> Optional['Artist']:

# camelCase псевдонимы

#: Псевдоним для :attr:`id_required`
idRequired = id_required
#: Псевдоним для :attr:`get_op_image_url`
getOpImageUrl = get_op_image_url
#: Псевдоним для :attr:`get_og_image_url`
Expand Down
4 changes: 4 additions & 0 deletions yandex_music/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ class InvalidBitrateError(YandexMusicError):
"""Класс исключения, вызываемого при попытке загрузки трека с недоступным битрейтом."""


class IDMissingError(YandexMusicError):
"""Класс исключения, вызываемого при попытке использования отсутствующего ID."""


class NetworkError(YandexMusicError):
"""Базовый класс исключений, вызываемых для ошибок, связанных с запросами к серверу."""

Expand Down

0 comments on commit 0e7507a

Please sign in to comment.