]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/simaecho.py
Migrate simafm to persistent http caching
[mpd-sima.git] / sima / lib / simaecho.py
index 592ea0387f9fd718312cf50c3028e3f70f271f07..36c985e6d14b5b652b99d69ab10009fe2a850b8e 100644 (file)
@@ -32,41 +32,39 @@ from requests import Session, Request, Timeout, ConnectionError
 from sima import ECH
 from sima.lib.meta import Artist
 from sima.lib.track import Track
 from sima import ECH
 from sima.lib.meta import Artist
 from sima.lib.track import Track
-from sima.lib.httpcli.controller import CacheController
-from sima.lib.httpcli.cache import FileCache
+from sima.lib.http import CacheController
 from sima.utils.utils import WSError, WSNotFound, WSTimeout, WSHTTPError
 from sima.utils.utils import getws, Throttle
 if len(ECH.get('apikey')) == 23:  # simple hack allowing imp.reload
     getws(ECH)
 
 # Some definitions
 from sima.utils.utils import WSError, WSNotFound, WSTimeout, WSHTTPError
 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, 1)
-SOCKET_TIMEOUT = 4
+WAIT_BETWEEN_REQUESTS = timedelta(0, 2)
+SOCKET_TIMEOUT = 6
 
 
 class SimaEch:
     """EchoNest http client
     """
     root_url = 'http://{host}/api/{version}'.format(**ECH)
 
 
 class SimaEch:
     """EchoNest http client
     """
     root_url = 'http://{host}/api/{version}'.format(**ECH)
-    timestamp = datetime.utcnow()
     ratelimit = None
     name = 'EchoNest'
     ratelimit = None
     name = 'EchoNest'
-    cache = FileCache('/home/kaliko/.local/share/mpd_sima/http')
+    cache = False
 
     def __init__(self):
 
     def __init__(self):
-        self._ressource = None
-        self.current_element = None
         self.controller = CacheController(self.cache)
 
         self.controller = CacheController(self.cache)
 
-    def _fetch(self, payload):
-        """Use cached elements or proceed http request"""
-        req = Request('GET', self._ressource, params=payload,
+    def _fetch(self, ressource, payload):
+        """
+        Prepare http request
+        Use cached elements or proceed http request
+        """
+        req = Request('GET', ressource, params=payload,
                       ).prepare()
         if self.cache:
             cached_response = self.controller.cached_request(req.url, req.headers)
             if cached_response:
                 return cached_response.json()
                       ).prepare()
         if self.cache:
             cached_response = self.controller.cached_request(req.url, req.headers)
             if cached_response:
                 return cached_response.json()
-
         try:
             return self._fetch_ws(req)
         except Timeout:
         try:
             return self._fetch_ws(req)
         except Timeout:
@@ -129,8 +127,8 @@ class SimaEch:
         """
         payload = self._forge_payload(artist)
         # Construct URL
         """
         payload = self._forge_payload(artist)
         # Construct URL
-        self._ressource = '{0}/artist/similar'.format(SimaEch.root_url)
-        ans = self._fetch(payload)
+        ressource = '{0}/artist/similar'.format(SimaEch.root_url)
+        ans = self._fetch(ressource, payload)
         for art in ans.get('response').get('artists'):
             artist = {}
             mbid = None
         for art in ans.get('response').get('artists'):
             artist = {}
             mbid = None
@@ -146,8 +144,8 @@ class SimaEch:
         """
         payload = self._forge_payload(artist, top=True)
         # Construct URL
         """
         payload = self._forge_payload(artist, top=True)
         # Construct URL
-        self._ressource = '{0}/song/search'.format(SimaEch.root_url)
-        ans = self._fetch(payload)
+        ressource = '{0}/song/search'.format(SimaEch.root_url)
+        ans = self._fetch(ressource, payload)
         titles = list()
         artist = {
                 'artist': artist.name,
         titles = list()
         artist = {
                 'artist': artist.name,