diff --git a/tests/test_mandatory.py b/tests/test_mandatory.py index 165bcec..200fa88 100644 --- a/tests/test_mandatory.py +++ b/tests/test_mandatory.py @@ -470,7 +470,9 @@ def test_mandatory_follower(): cfg = Config(descr) cfg.property.read_only() assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] - # + assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': [], + 'ip_admin_eth0.netmask_admin_eth0': []} + cfg.property.read_write() cfg.option('ip_admin_eth0.ip_admin_eth0').value.set(['ip']) cfg.property.read_only() @@ -488,6 +490,8 @@ def test_mandatory_follower(): cfg.property.read_only() assert cfg.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['ip'] assert cfg.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == 'ip' + assert cfg.value.dict() == {'ip_admin_eth0.ip_admin_eth0': ['ip'], + 'ip_admin_eth0.netmask_admin_eth0': ['ip']} def test_mandatory_warnings_follower(): diff --git a/tiramisu/setting.py b/tiramisu/setting.py index f8664c6..68491a8 100644 --- a/tiramisu/setting.py +++ b/tiramisu/setting.py @@ -54,9 +54,13 @@ permissive mandatory should set value for option with this properties if 'mandatory' is set in config + example: 'a', ['a'], [None] are valid + None, [] are not valid empty raise mandatory PropertiesOptionError if multi or leader have empty value + example: ['a'] is valid + [None] is not valid unique raise ValueError if a value is set twice or more in a multi Option @@ -702,10 +706,15 @@ class Settings(object): option_bag): if 'mandatory' in option_bag.config_bag.properties: values = option_bag.config_bag.context.cfgimpl_get_values() + if option_bag.option.impl_is_follower(): + force_allow_empty_list = True + else: + force_allow_empty_list = False if not ('permissive' in option_bag.config_bag.properties and 'mandatory' in option_bag.config_bag.permissives) and \ 'mandatory' in option_bag.properties and values.isempty(option_bag.option, value, + force_allow_empty_list=force_allow_empty_list, index=option_bag.index): raise PropertiesOptionError(option_bag, ['mandatory'],