19 lines
612 B
Python
19 lines
612 B
Python
|
from datetime import date, datetime, timedelta
|
||
|
|
||
|
_NO_DEFAULT = object()
|
||
|
|
||
|
class CachedData:
|
||
|
def __init__(self, getter, initial_data=_NO_DEFAULT, validity=1000):
|
||
|
self.getter = getter
|
||
|
self.data = initial_data
|
||
|
self.last_refresh_date = datetime.now()
|
||
|
self.validity = timedelta(milliseconds=validity)
|
||
|
if initial_data == _NO_DEFAULT:
|
||
|
self.last_refresh_date -= self.validity
|
||
|
|
||
|
def __call__(self, *args, **kwds):
|
||
|
if self.last_refresh_date + self.validity < datetime.now():
|
||
|
self.data = self.getter()
|
||
|
self.last_refresh_date = datetime.now()
|
||
|
return self.data, self.last_refresh_date
|