if slave has a callback with a slave that has a callback with a default_multi's slave, now it's works
This commit is contained in:
parent
463fc8e88a
commit
76a43a7ff9
|
@ -444,6 +444,22 @@ def test_callback_master_and_slaves_master():
|
||||||
assert cfg.val1.val2 == [None, None]
|
assert cfg.val1.val2 == [None, None]
|
||||||
|
|
||||||
|
|
||||||
|
def test_callback_master_and_slaves_master2():
|
||||||
|
val1 = StrOption('val1', "", multi=True)
|
||||||
|
val2 = StrOption('val2', "", multi=True, default_multi='val2')
|
||||||
|
val3 = StrOption('val3', "", multi=True, callback=return_value, callback_params={'': ((val2, False),)})
|
||||||
|
val4 = StrOption('val4', "", multi=True, callback=return_value, callback_params={'': ((val3, False),)})
|
||||||
|
interface1 = OptionDescription('val1', '', [val1, val2, val3, val4])
|
||||||
|
interface1.impl_set_group_type(groups.master)
|
||||||
|
maconfig = OptionDescription('rootconfig', '', [interface1])
|
||||||
|
cfg = Config(maconfig)
|
||||||
|
cfg.read_write()
|
||||||
|
cfg.val1.val1.append('val')
|
||||||
|
assert cfg.val1.val4 == ['val2']
|
||||||
|
assert cfg.val1.val3 == ['val2']
|
||||||
|
assert cfg.val1.val2 == ['val2']
|
||||||
|
|
||||||
|
|
||||||
def test_callback_master_and_slaves_master_list():
|
def test_callback_master_and_slaves_master_list():
|
||||||
val1 = StrOption('val1', "", multi=True, callback=return_list)
|
val1 = StrOption('val1', "", multi=True, callback=return_list)
|
||||||
val2 = StrOption('val2', "", multi=True)
|
val2 = StrOption('val2', "", multi=True)
|
||||||
|
@ -499,6 +515,16 @@ def test_callback_master_and_slaves_slave():
|
||||||
assert cfg.val1.val2 == ['val2', 'val2', 'val']
|
assert cfg.val1.val2 == ['val2', 'val2', 'val']
|
||||||
|
|
||||||
|
|
||||||
|
def test_callback_master_and_slaves():
|
||||||
|
val1 = StrOption('val1', "", multi=True)
|
||||||
|
val2 = StrOption('val2', "", multi=True, callback=return_val)
|
||||||
|
interface1 = OptionDescription('val1', '', [val1, val2])
|
||||||
|
interface1.impl_set_group_type(groups.master)
|
||||||
|
maconfig = OptionDescription('rootconfig', '', [interface1])
|
||||||
|
cfg = Config(maconfig)
|
||||||
|
cfg.read_write()
|
||||||
|
|
||||||
|
|
||||||
def test_callback_master_and_slaves_slave_cal():
|
def test_callback_master_and_slaves_slave_cal():
|
||||||
val3 = StrOption('val3', "", multi=True)
|
val3 = StrOption('val3', "", multi=True)
|
||||||
val1 = StrOption('val1', "", multi=True, callback=return_value, callback_params={'': ((val3, False),)})
|
val1 = StrOption('val1', "", multi=True, callback=return_value, callback_params={'': ((val3, False),)})
|
||||||
|
|
|
@ -154,8 +154,15 @@ def carry_out_calculation(option, config, callback, callback_params,
|
||||||
).impl_get_path_by_opt(opt)
|
).impl_get_path_by_opt(opt)
|
||||||
# get value
|
# get value
|
||||||
try:
|
try:
|
||||||
|
if option.impl_is_multi() and \
|
||||||
|
(option.impl_get_multitype() == multitypes.master or
|
||||||
|
(option.impl_get_multitype() == multitypes.slave and
|
||||||
|
option.impl_get_master_slaves() != opt)):
|
||||||
|
validate = True
|
||||||
|
else:
|
||||||
|
validate = False
|
||||||
value = config.getattr(path, force_permissive=True,
|
value = config.getattr(path, force_permissive=True,
|
||||||
validate=False)
|
validate=validate)
|
||||||
# convert to list, not modifie this multi
|
# convert to list, not modifie this multi
|
||||||
if value.__class__.__name__ == 'Multi':
|
if value.__class__.__name__ == 'Multi':
|
||||||
value = list(value)
|
value = list(value)
|
||||||
|
@ -192,7 +199,7 @@ def carry_out_calculation(option, config, callback, callback_params,
|
||||||
# if no index, return a list
|
# if no index, return a list
|
||||||
if one_is_multi:
|
if one_is_multi:
|
||||||
ret = []
|
ret = []
|
||||||
if index:
|
if index is not None:
|
||||||
range_ = [index]
|
range_ = [index]
|
||||||
else:
|
else:
|
||||||
range_ = range(len_multi)
|
range_ = range(len_multi)
|
||||||
|
@ -211,7 +218,7 @@ def carry_out_calculation(option, config, callback, callback_params,
|
||||||
else:
|
else:
|
||||||
kwargs[key] = val
|
kwargs[key] = val
|
||||||
calc = calculate(callback, args, kwargs)
|
calc = calculate(callback, args, kwargs)
|
||||||
if index:
|
if index is not None:
|
||||||
ret = calc
|
ret = calc
|
||||||
else:
|
else:
|
||||||
ret.append(calc)
|
ret.append(calc)
|
||||||
|
@ -234,7 +241,7 @@ def carry_out_calculation(option, config, callback, callback_params,
|
||||||
ret = ret[:max_len]
|
ret = ret[:max_len]
|
||||||
if len(ret) < max_len:
|
if len(ret) < max_len:
|
||||||
ret = ret + [None] * (max_len - len(ret))
|
ret = ret + [None] * (max_len - len(ret))
|
||||||
if isinstance(ret, list) and index:
|
if isinstance(ret, list) and index is not None:
|
||||||
if len(ret) < index + 1:
|
if len(ret) < index + 1:
|
||||||
ret = None
|
ret = None
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -203,7 +203,7 @@ class Values(object):
|
||||||
if (opt.impl_is_multi() and
|
if (opt.impl_is_multi() and
|
||||||
opt.impl_get_multitype() == multitypes.slave):
|
opt.impl_get_multitype() == multitypes.slave):
|
||||||
masterp = self._get_opt_path(opt.impl_get_master_slaves())
|
masterp = self._get_opt_path(opt.impl_get_master_slaves())
|
||||||
mastervalue = context.getattr(masterp, validate=validate)
|
mastervalue = context.getattr(masterp, validate=False)
|
||||||
lenmaster = len(mastervalue)
|
lenmaster = len(mastervalue)
|
||||||
if lenmaster == 0:
|
if lenmaster == 0:
|
||||||
value = []
|
value = []
|
||||||
|
|
Loading…
Reference in New Issue