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 time import sleep
def getws(dic):
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
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