-class EchoError(Exception):
- pass
-
-class EchoNotFound(EchoError):
- pass
-
-class EchoTimeout(EchoError):
- pass
-
-class EchoHTTPError(EchoError):
- pass
-
-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
-
-
-def purge_cache(age=4):
- now = datetime.utcnow()
- if now.hour == SimaEch.timestamp.hour:
- return
- SimaEch.timestamp = datetime.utcnow()
- cache = SimaEch.cache
- delta = timedelta(hours=age)
- for url in list(cache.keys()):
- timestamp = cache.get(url).created()
- if now - timestamp > delta:
- cache.pop(url)
-
-