]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/simafm.py
Fixed JSONDecodeError with wrong http cached file (closes #35)
[mpd-sima.git] / sima / lib / simafm.py
index 0f32f08b6bcbeb8c4190220b1df3be770c51d78e..18fe084a3b8aacfcd3e211c40a19e62313663972 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2009-2014 kaliko <kaliko@azylum.org>
 #
 #   This program is free software: you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -43,6 +43,10 @@ class SimaFM:
     root_url = 'http://{host}/{version}/'.format(**LFM)
     name = 'Last.fm'
     cache = False
+    """HTTP cache to use, in memory or persitent.
+
+    :param BaseCache cache: Set a cache, defaults to `False`.
+    """
     stats = {'etag':0,
              'ccontrol':0,
              'total':0}
@@ -90,14 +94,19 @@ class SimaFM:
     def get_similar(self, artist):
         """Fetch similar artists
 
-        :param Artist artist: :class:`Artist` to fetch similar artists from
+        :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
         ans = self.http(self.root_url, payload)
+        try:
+            ans.json()
+        except ValueError as err:
+            # Corrupted/malformed cache? cf. gitlab issue #35
+            raise WSError('Malformed json, try purging the cache: %s')
         self._controls_answer(ans.json()) # pylint: disable=no-member
-        # Artist might be found be return no 'artist' list…
+        # Artist might be found but return no 'artist' list…
         # cf. "Mulatu Astatqe" vs. "Mulatu Astatqé" with autocorrect=0
         # json format is broken IMHO, xml is more consistent IIRC
         # Here what we got:
@@ -112,7 +121,7 @@ class SimaFM:
     def get_toptrack(self, artist):
         """Fetch artist top tracks
 
-        :param Artist artist: :class:`Artist` to fetch top tracks from
+        :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, method='top')