calculation with options not in same dynoptiondescription
This commit is contained in:
parent
7fad2b5d7d
commit
4b41fd89fb
2 changed files with 62 additions and 11 deletions
|
@ -881,6 +881,51 @@ async def test_requires_dyndescription_in_dyn():
|
|||
assert not await list_sessions()
|
||||
|
||||
|
||||
def calc_value_not_same(param, condition, expected, default, suffix):
|
||||
if suffix == 'val1':
|
||||
index = 0
|
||||
else:
|
||||
index = 1
|
||||
return calc_value(param, condition=condition[index], expected=expected, default=default)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_requires_dyndescription_in_dyn_not_same():
|
||||
boolean = BoolOption('boolean', '', True)
|
||||
disabled_property = Calculation(calc_value_not_same,
|
||||
Params(ParamValue('disabled'),
|
||||
kwargs={'condition': ParamOption(boolean, raisepropertyerror=True),
|
||||
'expected': ParamValue(False),
|
||||
'default': ParamValue(None),
|
||||
'suffix': ParamSuffix()}))
|
||||
st = StrOption('st', '', properties=(disabled_property,))
|
||||
dod1 = DynOptionDescription('dod1', '', [boolean], suffixes=Calculation(return_list))
|
||||
dod2 = DynOptionDescription('dod2', '', [st], suffixes=Calculation(return_list))
|
||||
od = OptionDescription('od', '', [dod1, dod2])
|
||||
od2 = OptionDescription('od', '', [od])
|
||||
async with await Config(od2) as cfg:
|
||||
await cfg.property.read_write()
|
||||
|
||||
assert await cfg.option('od.dod2val1.stval1').value.get() is None
|
||||
assert await cfg.option('od.dod2val2.stval2').value.get() is None
|
||||
#
|
||||
await cfg.option('od.dod1val1.booleanval1').value.set(False)
|
||||
|
||||
props = []
|
||||
try:
|
||||
await cfg.option('od.dod2val1.stval1').value.get()
|
||||
except PropertiesOptionError as err:
|
||||
props = err.proptype
|
||||
assert props == frozenset(['disabled'])
|
||||
props = []
|
||||
await cfg.option('od.dod2val2.stval2').value.get()
|
||||
#
|
||||
await cfg.option('od.dod1val1.booleanval1').value.set(True)
|
||||
assert await cfg.option('od.dod2val1.stval1').value.get() is None
|
||||
assert await cfg.option('od.dod2val2.stval2').value.get() is None
|
||||
assert not await list_sessions()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_requires_dyndescription2():
|
||||
boolean = BoolOption('boolean', '', True)
|
||||
|
|
|
@ -359,6 +359,7 @@ async def manager_callback(callbk: Param,
|
|||
callbk_option = callbk.option
|
||||
callbk_options = None
|
||||
if callbk_option.issubdyn():
|
||||
found = False
|
||||
if isinstance(callbk, ParamDynOption):
|
||||
subdyn = callbk.dynoptiondescription
|
||||
rootpath = subdyn.impl_getpath() + callbk.suffix
|
||||
|
@ -366,7 +367,22 @@ async def manager_callback(callbk: Param,
|
|||
callbk_option = callbk_option.to_dynoption(rootpath,
|
||||
suffix,
|
||||
subdyn)
|
||||
elif not option.impl_is_dynsymlinkoption():
|
||||
found = True
|
||||
elif option.impl_is_dynsymlinkoption():
|
||||
rootpath = option.rootpath
|
||||
call_path = callbk_option.impl_getpath()
|
||||
if call_path.startswith(option.opt.impl_getpath().rsplit('.', 1)[0]):
|
||||
# in same dynoption
|
||||
if len(callbk_option.impl_getpath().split('.')) == len(rootpath.split('.')):
|
||||
rootpath = rootpath.rsplit('.', 1)[0]
|
||||
suffix = option.impl_getsuffix()
|
||||
subdyn = callbk_option.getsubdyn()
|
||||
callbk_option = callbk_option.to_dynoption(rootpath,
|
||||
suffix,
|
||||
subdyn,
|
||||
)
|
||||
found = True
|
||||
if not found:
|
||||
callbk_options = []
|
||||
dynopt = callbk_option.getsubdyn()
|
||||
rootpath = dynopt.impl_getpath()
|
||||
|
@ -378,16 +394,6 @@ async def manager_callback(callbk: Param,
|
|||
suffix,
|
||||
dynopt)
|
||||
callbk_options.append(doption)
|
||||
else:
|
||||
#FIXME in same dynamic option?
|
||||
rootpath = option.rootpath
|
||||
if len(callbk_option.impl_getpath().split('.')) == len(rootpath.split('.')):
|
||||
rootpath = rootpath.rsplit('.', 1)[0]
|
||||
suffix = option.impl_getsuffix()
|
||||
subdyn = callbk_option.getsubdyn()
|
||||
callbk_option = callbk_option.to_dynoption(rootpath,
|
||||
suffix,
|
||||
subdyn)
|
||||
if leadership_must_have_index and callbk_option.impl_is_follower() and index is None:
|
||||
raise Break()
|
||||
if config_bag is undefined:
|
||||
|
|
Loading…
Reference in a new issue