You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
18 lines
612 B
18 lines
612 B
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
|
|
|