Cache ordered values in ValueList section
This commit is contained in:
parent
be86ca03e2
commit
3b015cd5df
@ -137,10 +137,10 @@ class ValueList(Section):
|
|||||||
They basically consist of two different SettingValues.
|
They basically consist of two different SettingValues.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
default: An OrderedDict with the default configuration as strings.
|
layers: An OrderedDict of the config layers.
|
||||||
keytype: The type to use for the key (only used for validating)
|
keytype: The type to use for the key (only used for validating)
|
||||||
valtype: The type to use for the value.
|
valtype: The type to use for the value.
|
||||||
valdict: The "true value" dict.
|
_ordered_value_cache: A ChainMap-like OrderedDict of all values.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# FIXME how to handle value layers here?
|
# FIXME how to handle value layers here?
|
||||||
@ -154,6 +154,7 @@ class ValueList(Section):
|
|||||||
*defaults: A (key, value) list of default values.
|
*defaults: A (key, value) list of default values.
|
||||||
"""
|
"""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self._ordered_value_cache = None
|
||||||
self.keytype = keytype
|
self.keytype = keytype
|
||||||
self.valtype = valtype
|
self.valtype = valtype
|
||||||
self.layers = OrderedDict([
|
self.layers = OrderedDict([
|
||||||
@ -172,10 +173,11 @@ class ValueList(Section):
|
|||||||
This is more expensive than the ChainMap, but we need this for
|
This is more expensive than the ChainMap, but we need this for
|
||||||
iterating/items/etc. when order matters.
|
iterating/items/etc. when order matters.
|
||||||
"""
|
"""
|
||||||
d = OrderedDict()
|
if self._ordered_value_cache is None:
|
||||||
for layer in self.layers.values():
|
self._ordered_value_cache = OrderedDict()
|
||||||
d.update(layer)
|
for layer in self.layers.values():
|
||||||
return d
|
self._ordered_value_cache.update(layer)
|
||||||
|
return self._ordered_value_cache
|
||||||
|
|
||||||
def setv(self, layer, key, value, interpolated):
|
def setv(self, layer, key, value, interpolated):
|
||||||
self.keytype.validate(key)
|
self.keytype.validate(key)
|
||||||
@ -185,6 +187,7 @@ class ValueList(Section):
|
|||||||
val = SettingValue(self.valtype)
|
val = SettingValue(self.valtype)
|
||||||
val.setv(layer, value, interpolated)
|
val.setv(layer, value, interpolated)
|
||||||
self.layers[layer][key] = val
|
self.layers[layer][key] = val
|
||||||
|
self._ordered_value_cache = None
|
||||||
|
|
||||||
def dump_userconfig(self):
|
def dump_userconfig(self):
|
||||||
changed = []
|
changed = []
|
||||||
|
Loading…
Reference in New Issue
Block a user