]> kaliko git repositories - mpd-sima.git/commitdiff
Add ETag support for simafm
authorkaliko <efrim@azylum.org>
Sat, 22 Feb 2014 00:36:08 +0000 (01:36 +0100)
committerkaliko <efrim@azylum.org>
Sat, 22 Feb 2014 00:36:08 +0000 (01:36 +0100)
sima/__init__.py
sima/lib/simaecho.py
sima/lib/simafm.py
sima/lib/webserv.py
sima/plugins/internal/echonest.py
sima/plugins/internal/lastfm.py

index 1ceac624553e4f8261fcdc3e5d886010bc1694d3..267899c15336671ad4ce7285c3294d9042d4d147 100644 (file)
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 """WebServices API credentials and ressources
 """
+from datetime import timedelta
 
 LFM = {'apikey': 'NG4xcDlxcXJwMjk4MTZycTgwM3E3b3I5MTEzb240cG8',
        'host':'ws.audioscrobbler.com',
@@ -12,5 +13,7 @@ ECH = {'apikey': 'WlRKQkhTS0JHWFVDUEZZRFA',
        'version': 'v4',
        }
 
+WAIT_BETWEEN_REQUESTS = timedelta(0, 2)
+SOCKET_TIMEOUT = 6
 
 # vim: ai ts=4 sw=4 sts=4 expandtab
index 2706513b47c5f8d0ad2114ed316769fa493b2774..e5fe4852566c41ca9fbc949f5c0351a21cf7f4ad 100644 (file)
@@ -25,11 +25,9 @@ __version__ = '0.0.2'
 __author__ = 'Jack Kaliko'
 
 
-from datetime import timedelta
-
 from requests import Session, Request, Timeout, ConnectionError
 
-from sima import ECH
+from sima import ECH, SOCKET_TIMEOUT, WAIT_BETWEEN_REQUESTS
 from sima.lib.meta import Artist
 from sima.lib.track import Track
 from sima.lib.http import CacheController
@@ -38,10 +36,6 @@ from sima.utils.utils import getws, Throttle
 if len(ECH.get('apikey')) == 23:  # simple hack allowing imp.reload
     getws(ECH)
 
-# Some definitions
-WAIT_BETWEEN_REQUESTS = timedelta(0, 2)
-SOCKET_TIMEOUT = 6
-
 
 class SimaEch:
     """EchoNest http client
index cc70cf7bcac4d0989dbb992425be4c6c37ccc1f2..04e736f63b1bd4478d35f6f74107720e19d93022 100644 (file)
@@ -25,11 +25,10 @@ __version__ = '0.5.1'
 __author__ = 'Jack Kaliko'
 
 
-from datetime import timedelta
 
 from requests import Session, Request, Timeout, ConnectionError
 
-from sima import LFM
+from sima import LFM, SOCKET_TIMEOUT, WAIT_BETWEEN_REQUESTS
 from sima.lib.meta import Artist
 
 from sima.lib.http import CacheController
@@ -38,10 +37,6 @@ from sima.utils.utils import getws, Throttle
 if len(LFM.get('apikey')) == 43:  # simple hack allowing imp.reload
     getws(LFM)
 
-# Some definitions
-WAIT_BETWEEN_REQUESTS = timedelta(0, 2)
-SOCKET_TIMEOUT = 6
-
 
 class SimaFM:
     """Last.fm http client
@@ -49,9 +44,12 @@ class SimaFM:
     root_url = 'http://{host}/{version}/'.format(**LFM)
     ratelimit = None
     name = 'Last.fm'
-    cache = {}
+    cache = False
+    stats = {'etag':0,
+            'ccontrol':0,
+            'total':0}
 
-    def __init__(self, cache=True):
+    def __init__(self):
         self.controller = CacheController(self.cache)
         self.artist = None
 
@@ -62,9 +60,11 @@ class SimaFM:
         """
         req = Request('GET', SimaFM.root_url, params=payload,
                       ).prepare()
+        SimaFM.stats.update(total=SimaFM.stats.get('total')+1)
         if self.cache:
             cached_response = self.controller.cached_request(req.url, req.headers)
             if cached_response:
+                SimaFM.stats.update(ccontrol=SimaFM.stats.get('ccontrol')+1)
                 return cached_response.json()
         try:
             return self._fetch_ws(req)
@@ -79,8 +79,10 @@ class SimaFM:
         """fetch from web service"""
         sess = Session()
         resp = sess.send(prepreq, timeout=SOCKET_TIMEOUT)
-        #self.__class__.ratelimit = resp.headers.get('x-ratelimit-remaining', None)
-        if resp.status_code is not 200:
+        if resp.status_code == 304:
+            SimaFM.stats.update(etag=SimaFM.stats.get('etag')+1)
+            resp = self.controller.update_cached_response(prepreq, resp)
+        elif resp.status_code != 200:
             raise WSHTTPError('{0.status_code}: {0.reason}'.format(resp))
         ans = resp.json()
         self._controls_answer(ans)
index 438637affe03ca276202080790a2d67d648d2072..c4118c0f83c5689e874bcdc08843fe584bb70073 100644 (file)
@@ -195,8 +195,6 @@ class WebService(Plugin):
             self.log.warning('{0}: {1}'.format(self.ws.name, err))
         if as_art:
             self.log.debug('Fetched {0} artist(s)'.format(len(as_art)))
-        if self.ws.ratelimit:
-            self.log.info('{0.name} ratelimit: {0.ratelimit}'.format(self.ws))
         return as_art
 
     def get_recursive_similar_artist(self):
@@ -383,6 +381,7 @@ class WebService(Plugin):
             self.log.debug(repr(self.player.current))
             return None
         self.queue_mode()
+        self.log.debug(self.ws.stats)
         candidates = self.to_add
         self.to_add = list()
         if self.plugin_conf.get('queue_mode') != 'album':
index 1c0b1f791a974ff1427d2938bbcd084d89696b2d..c9a02e8a0e32fc476a30b893d04856cbf68fa458 100644 (file)
@@ -40,15 +40,8 @@ class EchoNest(WebService):
         WebService.__init__(self, daemon)
         # Set persitent cache
         vardir = daemon.config['sima']['var_dir']
-        SimaEch.cache = FileCache(join(vardir, 'http'))
+        SimaEch.cache = FileCache(join(vardir, 'http', 'EchoNest'))
         self.ws = SimaEch
 
-    def callback_playlist(self):
-        if self.player.state != 'play':
-            return
-        msg = 'ETag:{etag:>3d}, Cache-Control:{ccontrol:>3d},'
-        msg += 'total:{total:>3d}, min(rate-limit):{minrl:>3d}'
-        self.log.debug(msg.format(**SimaEch.stats))
-
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab
index 2e6fca6b7fdc3c008a41b650338050ae78643484..ba10a48b063eb1701bf0bece1b89f255127b752b 100644 (file)
@@ -22,12 +22,14 @@ Fetching similar artists from last.fm web services
 """
 
 # standard library import
+from os.path import join
 
 # third parties components
 
 # local import
 from ...lib.simafm import SimaFM
 from ...lib.webserv import WebService
+from ...lib.cache import FileCache
 
 
 class Lastfm(WebService):
@@ -37,6 +39,9 @@ class Lastfm(WebService):
     def __init__(self, daemon):
         WebService.__init__(self, daemon)
         self.ws = SimaFM
+        # Set persitent cache
+        vardir = daemon.config['sima']['var_dir']
+        SimaFM.cache = FileCache(join(vardir, 'http', 'LastFM'))
 
 
 # VIM MODLINE