+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