multi defaults value addition cinematics

This commit is contained in:
gwen 2013-01-10 12:03:59 +01:00
parent e70054c4d4
commit f9d6f62a70
2 changed files with 37 additions and 8 deletions

View File

@ -70,11 +70,16 @@ class Config(object):
- settles various default values for options
"""
self._validate_duplicates(self._cfgimpl_descr._children)
#max len for a master/slave group
max_len_child = 0
for child in self._cfgimpl_descr._children:
if isinstance(child, Option):
if child.is_multi():
#force_append to load values without append value to
#child/master
childdef = Multi(copy(child.getdefault()), config=self,
opt=child)
opt=child, force_append=False)
max_len_child = max(max_len_child, len(childdef))
self._cfgimpl_values[child._name] = childdef
self._cfgimpl_previous_values[child._name] = list(childdef)
else:
@ -85,7 +90,25 @@ class Config(object):
elif isinstance(child, OptionDescription):
self._validate_duplicates(child._children)
self._cfgimpl_values[child._name] = Config(child, parent=self)
# self.override(overrides)
try:
master = self._cfgimpl_descr.get_master_name()
except TypeError:
pass
else:
#if master/slave group, add default_multi value if length of valu
#if inferior to group length
for child in self._cfgimpl_descr._children:
value = self._cfgimpl_values[child._name]
if value is None:
len_child = 0
value = Multi([], config=self, opt=child, force_append=False)
else:
len_child = len(value)
if len_child < max_len_child:
for num in range(len_child, max_len_child):
value._append_default()
def cfgimpl_update(self):
"""dynamically adds `Option()` or `OptionDescription()`

View File

@ -42,15 +42,17 @@ for act1, act2 in requires_actions:
class Multi(list):
"""multi options values container
that support item notation for the values of multi options"""
def __init__(self, lst, config, opt):
def __init__(self, lst, config, opt, force_append=True):
"""
:lst: the Multi wraps a list value
:param lst: the Multi wraps a list value
:param config: the parent config
:param opt: the option object that have this Multi value
:param force_append: - True to append child value with master's one
- False to force lst value
"""
self.config = config
self.opt = opt
if self.opt.is_master(config):
if force_append and self.opt.is_master(config):
# we pass the list at the list type's init
# because a normal init cannot return anything
super(Multi, self).__init__(lst)
@ -61,7 +63,8 @@ class Multi(list):
except Exception, err:
print err
else:
self.config._valid_len(self.opt._name, lst)
if force_append:
self.config._valid_len(self.opt._name, lst)
super(Multi, self).__init__(lst)
def __setitem__(self, key, value):
@ -90,10 +93,13 @@ class Multi(list):
else:
ret = value
else:
default_value = multi.opt.getdefault_multi()
multi._setvalue(default_value)
multi._append_default()
return ret
def _append_default(self):
default_value = self.opt.getdefault_multi()
self._setvalue(default_value)
def _setvalue(self, value, key=None, who=None):
if value != None:
if not self.opt._validate(value):