Skip to content

Commit 7bca56a

Browse files
committed
Cleanup function descriptions. Check request result and throw error if necessary.
1 parent 7d765c3 commit 7bca56a

2 files changed

Lines changed: 43 additions & 26 deletions

File tree

tidalapi/artist.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import dateutil.parser
2626
from typing_extensions import NoReturn
2727

28-
from tidalapi.exceptions import ObjectNotFound, TooManyRequests
28+
from tidalapi.exceptions import ObjectNotFound, TooManyRequests, MetadataNotAvailable
2929
from tidalapi.types import JsonObj
3030

3131
from . import mix
@@ -228,31 +228,43 @@ def get_similar(self) -> List["Artist"]:
228228
),
229229
)
230230

231-
def get_radio(self) -> List["Track"]:
232-
"""Queries TIDAL for the artist radio, which is a mix of tracks that are similar
233-
to what the artist makes.
231+
def get_radio(self, limit: int = 100) -> List["Track"]:
232+
"""Queries TIDAL for the artist radio, i.e. a list of tracks similar to this artist.
234233
235234
:return: A list of :class:`Tracks <tidalapi.media.Track>`
236235
"""
237-
params = {"limit": 100}
238-
return cast(
239-
List["Track"],
240-
self.request.map_request(
241-
f"artists/{self.id}/radio",
242-
params=params,
243-
parse=self.session.parse_track,
244-
),
245-
)
236+
params = {"limit": limit}
237+
238+
try:
239+
request = self.request.request(
240+
"GET", "artists/%s/radio" % self.id, params=params
241+
)
242+
except ObjectNotFound:
243+
raise MetadataNotAvailable("Track radio not available for this track")
244+
except TooManyRequests:
245+
raise TooManyRequests("Track radio unavailable")
246+
else:
247+
json_obj = request.json()
248+
radio = self.request.map_json(json_obj, parse=self.session.parse_track)
249+
assert isinstance(radio, list)
250+
return cast(List["Track"], radio)
246251

247252
def get_radio_mix(self) -> mix.Mix:
248-
"""Queries TIDAL for the artist radio, which is a mix of tracks that are similar
249-
to what the artist makes.
253+
"""Queries TIDAL for the artist radio, i.e. mix of tracks that are similar to this artist.
250254
251255
:return: A :class:`Mix <tidalapi.mix.Mix>`
256+
:raises: A :class:`exceptions.MetadataNotAvailable` if no track radio mix is available
252257
"""
253-
json = self.request.request("GET", f"artists/{self.id}/mix").json()
254258

255-
return self.session.mix(json.get("id"))
259+
try:
260+
request = self.request.request("GET", "artists/%s/mix" % self.id)
261+
except ObjectNotFound:
262+
raise MetadataNotAvailable("Artist radio not available for this artist")
263+
except TooManyRequests:
264+
raise TooManyRequests("Artist radio unavailable")
265+
else:
266+
json_obj = request.json()
267+
return self.session.mix(json_obj.get("id"))
256268

257269
def items(self) -> List[NoReturn]:
258270
"""The artist page does not supply any items. This only exists for symmetry with

tidalapi/media.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -387,11 +387,10 @@ def lyrics(self) -> "Lyrics":
387387
return cast("Lyrics", lyrics)
388388

389389
def get_track_radio(self, limit: int = 100) -> List["Track"]:
390-
"""Queries TIDAL for the track radio, which is a mix of tracks that are similar
391-
to this track.
390+
"""Queries TIDAL for the track radio mix as a list of tracks similar to this track.
392391
393392
:return: A list of :class:`Tracks <tidalapi.media.Track>`
394-
:raises: A :class:`exceptions.MetadataNotAvailable` if no track radio is available
393+
:raises: A :class:`exceptions.MetadataNotAvailable` if no track radio mix is available
395394
"""
396395
params = {"limit": limit}
397396

@@ -402,22 +401,28 @@ def get_track_radio(self, limit: int = 100) -> List["Track"]:
402401
except ObjectNotFound:
403402
raise MetadataNotAvailable("Track radio not available for this track")
404403
except TooManyRequests:
405-
raise TooManyRequests("Track radio unavailable)")
404+
raise TooManyRequests("Track radio unavailable")
406405
else:
407406
json_obj = request.json()
408407
tracks = self.requests.map_json(json_obj, parse=self.session.parse_track)
409408
assert isinstance(tracks, list)
410409
return cast(List["Track"], tracks)
411410

412411
def get_radio_mix(self) -> mix.Mix:
413-
"""Queries TIDAL for the track radio, which is a mix of tracks that are similar
414-
to this track.
412+
"""Queries TIDAL for the track radio mix of tracks that are similar to this track.
415413
416414
:return: A :class:`Mix <tidalapi.mix.Mix>`
415+
:raises: A :class:`exceptions.MetadataNotAvailable` if no track radio mix is available
417416
"""
418-
json = self.request.request("GET", f"tracks/{self.id}/mix").json()
419-
420-
return self.session.mix(json.get("id"))
417+
try:
418+
request = self.requests.request("GET", "tracks/%s/mix" % self.id)
419+
except ObjectNotFound:
420+
raise MetadataNotAvailable("Track radio not available for this track")
421+
except TooManyRequests:
422+
raise TooManyRequests("Track radio unavailable")
423+
else:
424+
json_obj = request.json()
425+
return self.session.mix(json_obj.get("id"))
421426

422427
def get_stream(self) -> "Stream":
423428
"""Retrieves the track streaming object, allowing for audio transmission.

0 commit comments

Comments
 (0)