]> kaliko git repositories - mpd-sima.git/blobdiff - sima/utils/utils.py
Use requests in lastfm module
[mpd-sima.git] / sima / utils / utils.py
index a75effd603ea3ccc87653942a35d8f3278ffa396..93bac25e78084dd94b92708fc7c83b5c91daefd8 100644 (file)
@@ -27,8 +27,10 @@ import sys
 from argparse import ArgumentError, Action
 from base64 import b64decode as push
 from codecs import getencoder
 from argparse import ArgumentError, Action
 from base64 import b64decode as push
 from codecs import getencoder
+from datetime import datetime, timedelta
 from os import environ, access, getcwd, W_OK, R_OK
 from os.path import dirname, isabs, join, normpath, exists, isdir, isfile
 from os import environ, access, getcwd, W_OK, R_OK
 from os.path import dirname, isabs, join, normpath, exists, isdir, isfile
+from time import sleep
 
 
 def getws(dic):
 
 
 def getws(dic):
@@ -76,6 +78,19 @@ def exception_log():
     log.info('Quiting now!')
     sys.exit(1)
 
     log.info('Quiting now!')
     sys.exit(1)
 
+def purge_cache(obj, age=4):
+    now = datetime.utcnow()
+    if now.hour == obj.timestamp.hour:
+        return
+    obj.timestamp = datetime.utcnow()
+    cache = obj.cache
+    delta = timedelta(hours=age)
+    for url in list(cache.keys()):
+        timestamp = cache.get(url).created()
+        if now - timestamp > delta:
+            cache.pop(url)
+
+
 class SigHup(Exception):
     pass
 
 class SigHup(Exception):
     pass
 
@@ -143,6 +158,32 @@ class Wdir(FileAction):
         if not access(self._file, W_OK):
             self.parser.error('no write access to "{0}"'.format(self._file))
 
         if not access(self._file, W_OK):
             self.parser.error('no write access to "{0}"'.format(self._file))
 
+class Throttle():
+    def __init__(self, wait):
+        self.wait = wait
+        self.last_called = datetime.now()
+
+    def __call__(self, func):
+        def wrapper(*args, **kwargs):
+            while self.last_called + self.wait > datetime.now():
+                sleep(0.1)
+            result = func(*args, **kwargs)
+            self.last_called = datetime.now()
+            return result
+        return wrapper
+
+class Cache():
+    def __init__(self, elem, last=None):
+        self.elem = elem
+        self.requestdate = last
+        if not last:
+            self.requestdate = datetime.utcnow()
+
+    def created(self):
+        return self.requestdate
+
+    def get(self):
+        return self.elem
 
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab
 
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab