"""EchoNest http client
"""
root_url = 'http://{host}/api/{version}'.format(**ECH)
- ratelimit = None
name = 'EchoNest'
cache = False
+ """HTTP cache to use, in memory or persitent.
+
+ :param BaseCache cache: Set a cache, defaults to `False`.
+ """
stats = {'etag':0,
'ccontrol':0,
'minrl':120,
if not isinstance(artist, Artist):
raise TypeError('"{0!r}" not an Artist object'.format(artist))
if artist.mbid:
- payload.update(
- id='musicbrainz:artist:{0}'.format(artist.mbid))
+ payload.update(id='musicbrainz:artist:{0}'.format(artist.mbid))
else:
payload.update(name=artist.name)
payload.update(bucket='id:musicbrainz')
# return a sorted list of 2-tuple to have consistent cache
return sorted(payload.items(), key=lambda param: param[0])
- def get_similar(self, artist=None):
+ def get_similar(self, artist):
"""Fetch similar artists
+
+ :param sima.lib.meta.Artist artist: `Artist` to fetch similar artists from
+ :returns: generator of :class:`sima.lib.meta.Artist`
"""
payload = self._forge_payload(artist)
# Construct URL
ressource = '{0}/artist/similar'.format(SimaEch.root_url)
ans = self.http(ressource, payload)
- self._controls_answer(ans.json())
- for art in ans.json().get('response').get('artists'):
+ self._controls_answer(ans.json()) # pylint: disable=no-member
+ for art in ans.json().get('response').get('artists'): # pylint: disable=no-member
mbid = get_mbid(art)
yield Artist(mbid=mbid, name=art.get('name'))
- def get_toptrack(self, artist=None):
+ def get_toptrack(self, artist):
"""Fetch artist top tracks
+
+ :param sima.lib.meta.Artist artist: `Artist` to fetch top tracks from
+ :returns: generator of :class:`sima.lib.track.Track`
"""
payload = self._forge_payload(artist, top=True)
# Construct URL
ressource = '{0}/song/search'.format(SimaEch.root_url)
ans = self.http(ressource, payload)
- self._controls_answer(ans.json())
+ self._controls_answer(ans.json()) # pylint: disable=no-member
titles = list()
- art = {
- 'artist': artist.name,
- 'musicbrainz_artistid': artist.mbid,
- }
- for song in ans.json().get('response').get('songs'):
+ art = {'artist': artist.name,
+ 'musicbrainz_artistid': artist.mbid,}
+ for song in ans.json().get('response').get('songs'): # pylint: disable=no-member
title = song.get('title')
if not art.get('musicbrainz_artistid'):
art['musicbrainz_artistid'] = get_mbid(song, 'artist_foreign_ids')