Source code for configmodel.MixinCachedValues
# -*- coding: utf-8 -*-
[docs]
class MixinCachedValues:
"""
Mixin for caching values
"""
[docs]
class CachedValue:
"""
Cached value
"""
def __init__(self, path, value, is_dirty=False):
self.path = path
self.value = value
self.is_dirty = is_dirty
def __init__(self):
self._cached_values = None
self._is_dirty = False
@staticmethod
def _path_to_str(path):
"""
Convert path to string
"""
return ".".join(path)
def _set_not_dirty(self):
"""
Set all cached values to not dirty
"""
self._is_dirty = False
if self._cached_values:
for cached_value in self._cached_values.values():
cached_value.is_dirty = False
[docs]
def get_cached_value(self, path):
"""
Get cached value
"""
if self._cached_values is None:
return None
full_name = self._path_to_str(path)
cached_value = self._cached_values.get(full_name)
if cached_value is None:
return None
return cached_value.value
[docs]
def set_cached_value(self, path, value, is_dirty=True):
"""
Set cached value
"""
if is_dirty:
self._is_dirty = True
if self._cached_values is None:
self._cached_values = {}
full_name = self._path_to_str(path)
if full_name not in self._cached_values:
self._cached_values[full_name] = self.CachedValue(path, value, is_dirty)
else:
self._cached_values[full_name].value = value
self._cached_values[full_name].is_dirty = is_dirty
[docs]
def assign_cached_values(self, cached_values):
"""
Assign cached values
"""
self._cached_values = cached_values
self._is_dirty = False