diff --git a/__init__.py b/__init__.py index 85ed017..6fb492e 100644 --- a/__init__.py +++ b/__init__.py @@ -87,13 +87,13 @@ class property_cache_pickle(object): # STORAGE_VERSION = 1 - def __init__(self, source_instance, cache_filename, load_all_on_init=False, callback_on_data_storage=None, max_age=None, store_none_value=False): + def __init__(self, source_instance, cache_filename, load_all_on_init=False, callback_on_data_storage=None, max_age=None, store_on_get=True): self._source_instance = source_instance self._cache_filename = cache_filename self._load_all_on_init = load_all_on_init self._callback_on_data_storage = callback_on_data_storage self._max_age = max_age - self._store_none_value = store_none_value + self._store_on_get = store_on_get self._cached_props = None def get(self, key, default=None): @@ -116,7 +116,7 @@ class property_cache_pickle(object): if self._key_filter(key) not in self._cached_props[self.DATA_TAG] or cache_old: val = self._source_instance.get(key, None) logger.debug("%s Loading property for '%s' from source instance (%s)", self.LOG_PREFIX, key, repr(val)) - if val or self._store_none_value: + if self._store_on_get: tm = int(time.time()) logger.debug("Storing value=%s with timestamp=%d to chache", val, tm) self._cached_props[self.DATA_TAG][self._key_filter(key)] = val @@ -132,6 +132,10 @@ class property_cache_pickle(object): logger.info("%s Key '%s' is not in cached_keys. Uncached data will be returned.", self.LOG_PREFIX, key) return self._source_instance.get(key, default) + def full_update(self): + self._load_source() + self._save_cache() + def keys(self): """ Method to get the available keys (from :data:`source_instance`). @@ -163,12 +167,13 @@ class property_cache_pickle(object): storage_version = True # if not load_cache or uid or data_version or storage_version: - if self._uid() is not None and uid: - logger.debug("%s Source uid changed, ignoring previous cache data", self.LOG_PREFIX) - if self._data_version() is not None and data_version: - logger.debug("%s Data version increased, ignoring previous cache data", self.LOG_PREFIX) - if storage_version: - logger.debug("%s Storage version changed, ignoring previous cache data", self.LOG_PREFIX) + if load_cache: + if self._uid() is not None and uid: + logger.debug("%s Source uid changed, ignoring previous cache data", self.LOG_PREFIX) + if self._data_version() is not None and data_version: + logger.debug("%s Data version increased, ignoring previous cache data", self.LOG_PREFIX) + if storage_version: + logger.debug("%s Storage version changed, ignoring previous cache data", self.LOG_PREFIX) self._cached_props = {self.AGE_TAG: {}, self.DATA_TAG: {}} if self._load_all_on_init: self._load_source() @@ -191,10 +196,11 @@ class property_cache_pickle(object): return key def _load_source(self): + if self._cached_props is None: + self._init_cache() logger.debug('%s Loading all data from source - %s', self.LOG_PREFIX, repr(self._source_instance.keys())) for key in self._source_instance.keys(): - val = self._source_instance.get(key) - self._cached_props[self.DATA_TAG][self._key_filter(key)] = val + self._cached_props[self.DATA_TAG][self._key_filter(key)] = self._source_instance.get(key) self._cached_props[self.AGE_TAG][self._key_filter(key)] = int(time.time()) def _save_cache(self):