]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/simaecho.py
Fixed simadb_cli auth (Closes #8)
[mpd-sima.git] / sima / lib / simaecho.py
index 1ee17fd6e2dbdd60decbf1c4a95c36dc8eaa952d..393d723f62e216d7a6027d02c33a363b5f9a2d40 100644 (file)
@@ -40,7 +40,7 @@ def get_mbid(obj, foreign='foreign_ids'):
     if foreign in obj:
         for frgnid in obj.get(foreign):
             if frgnid.get('catalog') == 'musicbrainz':
-                mbid = frgnid.get('foreign_id').split(':')[2]
+                return frgnid.get('foreign_id').split(':')[2]
     return None
 
 
@@ -48,9 +48,12 @@ class SimaEch:
     """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,
@@ -77,8 +80,7 @@ class SimaEch:
         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')
@@ -96,32 +98,36 @@ class SimaEch:
         # 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')