add support in calculation when option is in a dynoptiondescription
This commit is contained in:
@ -9,7 +9,9 @@ from tiramisu import BoolOption, StrOption, ChoiceOption, IPOption, \
|
||||
StrOption, PortOption, BroadcastOption, DomainnameOption, \
|
||||
EmailOption, URLOption, UsernameOption, FilenameOption, SymLinkOption, \
|
||||
OptionDescription, DynOptionDescription, SynDynOption, submulti, Leadership, \
|
||||
Config, Params, ParamOption, ParamValue, ParamSuffix, ParamSelfOption, ParamIndex, Calculation, calc_value, \
|
||||
Config, \
|
||||
Params, ParamOption, ParamValue, ParamSuffix, ParamSelfOption, ParamDynOption, ParamIndex, \
|
||||
Calculation, calc_value, \
|
||||
delete_session
|
||||
from tiramisu.error import PropertiesOptionError, ConfigError, ConflictError
|
||||
from tiramisu.storage import list_sessions
|
||||
@ -145,8 +147,8 @@ async def test_getdoc_dyndescription():
|
||||
assert await cfg.option('od.dodval2.stval2').option.name() == 'stval2'
|
||||
assert await cfg.option('od.dodval1').option.name() == 'dodval1'
|
||||
assert await cfg.option('od.dodval2').option.name() == 'dodval2'
|
||||
assert await cfg.option('od.dodval1.stval1').option.doc() == 'doc1'
|
||||
assert await cfg.option('od.dodval2.stval2').option.doc() == 'doc1'
|
||||
assert await cfg.option('od.dodval1.stval1').option.doc() == 'doc1val1'
|
||||
assert await cfg.option('od.dodval2.stval2').option.doc() == 'doc1val2'
|
||||
assert await cfg.option('od.dodval1').option.doc() == 'doc2val1'
|
||||
assert await cfg.option('od.dodval2').option.doc() == 'doc2val2'
|
||||
assert not await list_sessions()
|
||||
@ -289,6 +291,56 @@ async def test_callback_dyndescription():
|
||||
assert not await list_sessions()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_callback_dyndescription_outside_wrong_param():
|
||||
lst = StrOption('lst', '', ['val1', 'val2'], multi=True)
|
||||
st = StrOption('st', '', Calculation(return_dynval))
|
||||
dod = DynOptionDescription('dod', '', [st], suffixes=Calculation(return_list, Params(ParamOption(lst))))
|
||||
out = StrOption('out', '', Calculation(return_dynval, Params(ParamOption(st))))
|
||||
od = OptionDescription('od', '', [dod, out])
|
||||
od2 = OptionDescription('od', '', [od, lst])
|
||||
async with await Config(od2) as cfg:
|
||||
with pytest.raises(ConfigError):
|
||||
await cfg.value.dict()
|
||||
assert not await list_sessions()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_callback_dyndescription_outside1():
|
||||
lst = StrOption('lst', '', ['val1', 'val2'], multi=True)
|
||||
st = StrOption('st', '', Calculation(return_dynval))
|
||||
dod = DynOptionDescription('dod', '', [st], suffixes=Calculation(return_list, Params(ParamOption(lst))))
|
||||
out = StrOption('out', '', Calculation(return_dynval, Params(ParamDynOption(st, 'val1', dod))))
|
||||
od = OptionDescription('od', '', [dod, out])
|
||||
od2 = OptionDescription('od', '', [od, lst])
|
||||
async with await Config(od2) as cfg:
|
||||
assert await cfg.value.dict() == {'od.dodval1.stval1': 'val', 'od.dodval2.stval2': 'val', 'od.out': 'val', 'lst': ['val1', 'val2']}
|
||||
await cfg.option('od.dodval1.stval1').value.set('val1')
|
||||
await cfg.option('od.dodval2.stval2').value.set('val2')
|
||||
assert await cfg.value.dict() == {'od.dodval1.stval1': 'val1', 'od.dodval2.stval2': 'val2', 'od.out': 'val1', 'lst': ['val1', 'val2']}
|
||||
await cfg.option('lst').value.set(['val2'])
|
||||
with pytest.raises(ConfigError):
|
||||
await cfg.value.dict()
|
||||
await cfg.option('lst').value.set(['val1'])
|
||||
assert await cfg.value.dict() == {'od.dodval1.stval1': 'val1', 'od.out': 'val1', 'lst': ['val1']}
|
||||
assert not await list_sessions()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_callback_dyndescription_outside2():
|
||||
lst = StrOption('lst', '', ['val1', 'val2'], multi=True)
|
||||
out = StrOption('out', '')
|
||||
st = StrOption('st', '', Calculation(return_dynval, Params(ParamOption(out))))
|
||||
dod = DynOptionDescription('dod', '', [st], suffixes=Calculation(return_list, Params(ParamOption(lst))))
|
||||
od = OptionDescription('od', '', [dod, out])
|
||||
od2 = OptionDescription('od', '', [od, lst])
|
||||
async with await Config(od2) as cfg:
|
||||
assert await cfg.value.dict() == {'od.dodval1.stval1': None, 'od.dodval2.stval2': None, 'od.out': None, 'lst': ['val1', 'val2']}
|
||||
await cfg.option('od.out').value.set('val1')
|
||||
assert await cfg.value.dict() == {'od.dodval1.stval1': 'val1', 'od.dodval2.stval2': 'val1', 'od.out': 'val1', 'lst': ['val1', 'val2']}
|
||||
assert not await list_sessions()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_callback_list_dyndescription():
|
||||
st = StrOption('st', '', Calculation(return_list2, Params(ParamSuffix())), multi=True, properties=('notunique',))
|
||||
|
@ -358,6 +358,27 @@ async def test_meta_new_config_wrong_name():
|
||||
await delete_sessions(meta)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_meta_load_config():
|
||||
od = make_description()
|
||||
meta = await MetaConfig(['name1', 'name2'], optiondescription=od)
|
||||
assert len(list(await meta.config.list())) == 2
|
||||
await meta.config.load('name1')
|
||||
assert len(list(await meta.config.list())) == 3
|
||||
await delete_sessions(meta)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_meta_load_config_wrong_name():
|
||||
od = make_description()
|
||||
meta = await MetaConfig(['name1', 'name2'], optiondescription=od)
|
||||
assert len(list(await meta.config.list())) == 2
|
||||
with pytest.raises(ConfigError):
|
||||
await meta.config.load('name3')
|
||||
assert len(list(await meta.config.list())) == 2
|
||||
await delete_sessions(meta)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_meta_meta_set():
|
||||
meta = await make_metaconfig(double=True)
|
||||
|
Reference in New Issue
Block a user