911 lines
43 KiB
Python
911 lines
43 KiB
Python
"config.set() or config.setoption() or option.setoption()"
|
|
from .autopath import do_autopath
|
|
do_autopath()
|
|
|
|
import pytest
|
|
from os import environ
|
|
|
|
from tiramisu.i18n import _
|
|
from tiramisu.error import display_list, ConfigError
|
|
from tiramisu.setting import owners, groups
|
|
from tiramisu import ChoiceOption, BoolOption, IntOption, FloatOption, \
|
|
StrOption, OptionDescription, Leadership, Config, undefined, \
|
|
Calculation, Params, ParamOption, ParamValue, ParamIndex, \
|
|
calc_value, calc_value_property_help, ParamInformation
|
|
from tiramisu.error import PropertiesOptionError
|
|
import warnings
|
|
from .config import config_type, get_config
|
|
|
|
|
|
def make_description():
|
|
gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref')
|
|
gcdummy = BoolOption('dummy', 'dummy', default=False)
|
|
objspaceoption = ChoiceOption('objspace', 'Object space',
|
|
('std', 'thunk'), 'std')
|
|
booloption = BoolOption('bool', 'Test boolean option', default=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
floatoption = FloatOption('float', 'Test float option', default=2.3)
|
|
stroption = StrOption('str', 'Test string option', default="abc")
|
|
boolop = BoolOption('boolop', 'Test boolean option op', default=True)
|
|
wantref_option = BoolOption('wantref', 'Test requires', default=False)
|
|
wantframework_option = BoolOption('wantframework', 'Test requires',
|
|
default=False)
|
|
gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
|
|
descr = OptionDescription('tiramisu', '', [gcgroup, booloption, objspaceoption,
|
|
wantref_option, stroption,
|
|
wantframework_option,
|
|
intoption, boolop])
|
|
return descr
|
|
|
|
|
|
#____________________________________________________________
|
|
# change with __setattr__
|
|
def test_attribute_access(config_type):
|
|
"Once set, option values can't be changed again by attribute access"
|
|
s = StrOption("string", "", default="string")
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
# let's try to change it again
|
|
cfg.option('string').value.set('foo')
|
|
assert cfg.option('string').value.get() == 'foo'
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_mod_read_only_write():
|
|
"default with multi is a list"
|
|
s = StrOption("string", "", default=[], default_multi="string", multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
config = Config(od1)
|
|
config2 = Config(od1)
|
|
assert config.property.default() == {'cache', 'validator', 'warnings'}
|
|
assert config.property.default('read_only', 'append') == {'frozen',
|
|
'disabled',
|
|
'validator',
|
|
'everything_frozen',
|
|
'mandatory',
|
|
'empty',
|
|
'force_store_value',
|
|
}
|
|
assert config.property.default('read_only', 'remove') == {'permissive',
|
|
'hidden',
|
|
}
|
|
assert config.property.default('read_write', 'append') == {'frozen',
|
|
'disabled',
|
|
'validator',
|
|
'hidden',
|
|
'force_store_value',
|
|
}
|
|
assert config.property.default('read_write', 'remove') == {'permissive',
|
|
'everything_frozen',
|
|
'mandatory',
|
|
'empty',
|
|
}
|
|
#
|
|
config.property.setdefault(frozenset(['cache']))
|
|
config.property.setdefault(type='read_only', when='append', properties=frozenset(['disabled']))
|
|
config.property.setdefault(type='read_only', when='remove', properties=frozenset(['hidden']))
|
|
config.property.setdefault(type='read_write', when='append', properties=frozenset(['disabled', 'hidden']))
|
|
config.property.setdefault(type='read_write', when='remove', properties=frozenset([]))
|
|
with pytest.raises(ValueError):
|
|
config.property.setdefault(type='unknown', when='append', properties=frozenset(['disabled']))
|
|
with pytest.raises(ValueError):
|
|
config.property.setdefault(type='read_only', when='unknown', properties=frozenset(['disabled']))
|
|
with pytest.raises(TypeError):
|
|
config.property.setdefault(type='read_only', when='append', properties=['disabled'])
|
|
|
|
assert config.property.default() == {'cache'}
|
|
assert config.property.default('read_only', 'append') == {'disabled'}
|
|
assert config.property.default('read_only', 'remove') == {'hidden'}
|
|
assert config.property.default('read_write', 'append') == {'disabled',
|
|
'hidden'}
|
|
assert config.property.default('read_write', 'remove') == set([])
|
|
#
|
|
config.property.read_only()
|
|
assert config.property.get() == {'cache', 'disabled'}
|
|
config.property.read_write()
|
|
assert config.property.get() == {'cache', 'disabled', 'hidden'}
|
|
config.property.read_only()
|
|
assert config.property.get() == {'cache', 'disabled'}
|
|
#
|
|
assert config2.property.default() == {'cache', 'validator', 'warnings'}
|
|
assert config2.property.default('read_only', 'append') == {'frozen',
|
|
'disabled',
|
|
'validator',
|
|
'everything_frozen',
|
|
'mandatory',
|
|
'empty',
|
|
'force_store_value',
|
|
}
|
|
assert config2.property.default('read_only', 'remove') == {'permissive',
|
|
'hidden',
|
|
}
|
|
assert config2.property.default('read_write', 'append') == {'frozen',
|
|
'disabled',
|
|
'validator',
|
|
'hidden',
|
|
'force_store_value',
|
|
}
|
|
assert config2.property.default('read_write', 'remove') == {'permissive',
|
|
'everything_frozen',
|
|
'mandatory',
|
|
'empty',
|
|
}
|
|
with pytest.raises(ValueError):
|
|
config2.property.default('unknown', 'remove')
|
|
with pytest.raises(ValueError):
|
|
config2.property.default('read_write', 'unknown')
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_setitem(config_type):
|
|
s = StrOption("string", "", default=["string", "sdfsdf"], default_multi="prout", multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('string').value.set([undefined, 'foo'])
|
|
assert cfg.option('string').value.get() == ['string', 'foo']
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_reset(config_type):
|
|
"if value is None, resets to default owner"
|
|
s = StrOption("string", "", default="string")
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('string').value.set('foo')
|
|
assert cfg.option('string').value.get() == "foo"
|
|
assert cfg.option('string').owner.get() ==owners.user
|
|
cfg.option('string').value.reset()
|
|
assert cfg.option('string').value.get() == 'string'
|
|
assert cfg.option('string').owner.get() ==owners.default
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_reset_with_multi(config_type):
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('string').value.reset()
|
|
assert cfg.option('string').value.get() == ["string"]
|
|
assert cfg.option('string').owner.get() =='default'
|
|
cfg.option('string').value.set(["eggs", "spam", "foo"])
|
|
assert cfg.option('string').owner.get() =='user'
|
|
cfg.option('string').value.set([])
|
|
cfg.option('string').value.reset()
|
|
assert cfg.option('string').owner.get() =='default'
|
|
with pytest.raises(ValueError):
|
|
cfg.option('string').value.set(None)
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_property_get_unique_empty():
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
|
s2 = StrOption("string2", "", default=["string"], default_multi="string", multi=True, properties=('notunique',))
|
|
s3 = StrOption("string3", "", default=["string"], default_multi="string", multi=True, properties=('notempty',))
|
|
s4 = StrOption("string4", "", default=["string"], default_multi="string", multi=True, properties=('notunique', 'notempty'))
|
|
od1 = OptionDescription("options", "", [s, s2, s3, s4])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert cfg.option('string').property.get() == {'empty', 'unique'}
|
|
assert cfg.option('string2').property.get() == {'empty', 'notunique'}
|
|
assert cfg.option('string3').property.get() == {'unique', 'notempty'}
|
|
assert cfg.option('string4').property.get() == {'notunique', 'notempty'}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_property_only_raises():
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc", properties=(hidden_property,), multi=True)
|
|
od1 = OptionDescription("options", "", [s, intoption, stroption])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert cfg.option('str').property.get() == {'empty', 'unique'}
|
|
assert cfg.option('str').property.get(only_raises=True) == set()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_default_with_multi():
|
|
"default with multi is a list"
|
|
s = StrOption("string", "", default=[], default_multi="string", multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
assert cfg.option('string').value.get() == []
|
|
s = StrOption("string", "", default=None, default_multi="string", multi=True)
|
|
descr = OptionDescription("options", "", [s])
|
|
cfg = Config(descr)
|
|
assert cfg.option('string').value.get() == []
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_idontexist():
|
|
od1 = make_description()
|
|
cfg = Config(od1)
|
|
cfg.value.dict()
|
|
with pytest.raises(AttributeError):
|
|
cfg.option('idontexist').value.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
# ____________________________________________________________
|
|
def test_attribute_access_with_multi(config_type):
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('string').value.set(["foo", "bar"])
|
|
assert cfg.option('string').value.get() == ["foo", "bar"]
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_item_access_with_multi(config_type):
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
cfg.option('string').value.set(["foo", "bar"])
|
|
assert cfg.option('string').value.get() == ["foo", "bar"]
|
|
cfg.option('string').value.set(["changetest", "bar"])
|
|
assert cfg.option('string').value.get() == ["changetest", "bar"]
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_access_with_multi_default(config_type):
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg = get_config(cfg, config_type)
|
|
assert cfg.option('string').owner.get() =='default'
|
|
cfg.option('string').value.set(["foo", "bar"])
|
|
assert cfg.option('string').value.get() == ["foo", "bar"]
|
|
assert cfg.option('string').owner.get() =='user'
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_requires():
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc", properties=(hidden_property,), multi=True)
|
|
od1 = OptionDescription("options", "", [s, intoption, stroption])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert not 'hidden' in cfg.option('str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('str').value.set(['a', 'b'])
|
|
assert 'hidden' in cfg.forcepermissive.option('str').property.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_requires_with_inverted():
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hide_property = Calculation(calc_value,
|
|
Params(ParamValue('hide'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1),
|
|
'reverse_condition': ParamValue(True)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], default_multi="abc", properties=(hide_property,), multi=True)
|
|
od1 = OptionDescription("options", "", [s, intoption, stroption])
|
|
cfg = Config(od1)
|
|
assert not 'hidden' in cfg.option('str').property.get()
|
|
assert 'hide' in cfg.option('str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
assert not 'hidden' in cfg.option('str').property.get()
|
|
assert not 'hide' in cfg.option('str').property.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_requires_in_another_group():
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], properties=(hidden_property,), multi=True)
|
|
descr = OptionDescription("opt", "", [stroption])
|
|
od1 = OptionDescription("opt2", "", [intoption, s, descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert not 'hidden' in cfg.option('opt.str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('opt.str').value.set(['a', 'b'])
|
|
assert 'hidden' in cfg.forcepermissive.option('opt.str').property.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_requires_in_another_group_inverse():
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
# requires=[{'option': intoption, 'expected': 1, 'action': 'hidden'}], multi=True)
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], properties=(hidden_property,), multi=True)
|
|
descr = OptionDescription("opt", "", [stroption])
|
|
od1 = OptionDescription("opt2", "", [intoption, s, descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert not 'hidden' in cfg.option('opt.str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('opt.str').value.set(['a', 'b'])
|
|
assert 'hidden' in cfg.forcepermissive.option('opt.str').property.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_apply_requires_from_config():
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], properties=(hidden_property,), multi=True)
|
|
descr = OptionDescription("opt", "", [stroption])
|
|
od1 = OptionDescription("opt2", "", [intoption, s, descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert not 'hidden' in cfg.option('opt.str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('opt.str').value.get()
|
|
assert 'hidden' in cfg.forcepermissive.option('opt.str').property.get()
|
|
assert 'hidden' not in cfg.forcepermissive.option('opt.str').properties()
|
|
assert 'hidden' not in cfg.forcepermissive.option('opt.str').properties(only_raises=True)
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_apply_requires_with_disabled():
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], properties=(disabled_property,), multi=True)
|
|
descr = OptionDescription("opt", "", [stroption])
|
|
od1 = OptionDescription("opt2", "", [intoption, s, descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert not 'disabled' in cfg.option('opt.str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('opt.str').value.get()
|
|
assert 'disabled' not in cfg.unrestraint.option('opt.str').properties()
|
|
assert 'disabled' not in cfg.unrestraint.option('opt.str').properties(only_raises=True)
|
|
assert 'disabled' in cfg.unrestraint.option('opt.str').property.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_requires_with_disabled_in_another_group():
|
|
s = StrOption("string", "", default=["string"], multi=True)
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}))
|
|
stroption = StrOption('str', 'Test string option', default=["abc"], properties=(disabled_property,), multi=True)
|
|
descr = OptionDescription("opt", "", [stroption])
|
|
od1 = OptionDescription("opt2", "", [intoption, s, descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert not 'disabled' in cfg.option('opt.str').property.get()
|
|
cfg.option('int').value.set(1)
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('opt.str').value.set(['a', 'b'])
|
|
assert 'disabled' in cfg.unrestraint.option('opt.str').property.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_requires_that_is_leadership_follower():
|
|
b = IntOption('int', 'Test int option', default=[0], multi=True)
|
|
c = StrOption('str', 'Test string option', multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(c),
|
|
'index': ParamIndex(),
|
|
'expected': ParamValue('1')}))
|
|
d = StrOption('str1', 'Test string option', properties=(hidden_property,), multi=True)
|
|
descr = Leadership("int", "", [b, c, d])
|
|
od1 = OptionDescription('od', '', [descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert cfg.option('int.int').value.get() == [0]
|
|
assert cfg.option('int.str', 0).value.get() == None
|
|
assert cfg.option('int.str1', 0).value.get() == None
|
|
cfg.option('int.int').value.set([0, 1])
|
|
assert cfg.option('int.int').value.get() == [0, 1]
|
|
assert cfg.option('int.str', 0).value.get() == None
|
|
assert cfg.option('int.str', 1).value.get() == None
|
|
assert cfg.option('int.str1', 0).value.get() == None
|
|
assert cfg.option('int.str1', 1).value.get() == None
|
|
cfg.option('int.str', 1).value.set('1')
|
|
cfg.property.read_only()
|
|
assert cfg.option('int.str1', 0).value.get() == None
|
|
assert cfg.option('int.str1', 1).value.get() == None
|
|
cfg.property.read_write()
|
|
assert cfg.option('int.str1', 0).value.get() == None
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('int.str1', 1).value.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_requires_that_is_leadership_follower_inverse():
|
|
b = IntOption('int', 'Test int option', default=[0], multi=True)
|
|
c = StrOption('str', 'Test string option', multi=True)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(c),
|
|
'index': ParamIndex(),
|
|
'reverse_condition': ParamValue(True),
|
|
'expected': ParamValue(None)}))
|
|
d = StrOption('str1', 'Test string option', properties=(hidden_property,), multi=True)
|
|
descr = Leadership("int", "", [b, c, d])
|
|
od1 = OptionDescription('od', '', [descr])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert cfg.option('int.int').value.get() == [0]
|
|
assert cfg.option('int.str', 0).value.get() is None
|
|
assert cfg.option('int.str1', 0).value.get() is None
|
|
cfg.option('int.int').value.set([0, 1])
|
|
assert cfg.option('int.int').value.get() == [0, 1]
|
|
assert cfg.option('int.str', 0).value.get() is None
|
|
assert cfg.option('int.str', 1).value.get() is None
|
|
assert cfg.option('int.str1', 0).value.get() is None
|
|
assert cfg.option('int.str1', 1).value.get() is None
|
|
cfg.option('int.str', 1).value.set('1')
|
|
cfg.property.read_only()
|
|
assert cfg.option('int.str1', 0).value.get() is None
|
|
assert cfg.option('int.str1', 1).value.get() is None
|
|
cfg.property.read_write()
|
|
assert cfg.option('int.str1', 0).value.get() is None
|
|
with pytest.raises(PropertiesOptionError):
|
|
cfg.option('int.str1', 1).value.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_multi_with_bool():
|
|
s = BoolOption("bool", "", default=[False], multi=True)
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg.option('bool').value.set([True, False])
|
|
assert cfg.option('bool').value.get() == [True, False]
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_choice_access_with_multi():
|
|
ch = ChoiceOption("t1", "", ("a", "b"), default=["a"], multi=True, properties=('notunique',))
|
|
od1 = OptionDescription("options", "", [ch])
|
|
cfg = Config(od1)
|
|
cfg.option('t1').value.set(["a", "b", "a", "b"])
|
|
assert cfg.option('t1').value.get() == ["a", "b", "a", "b"]
|
|
# assert not list_sessions()
|
|
|
|
|
|
#____________________________________________________________
|
|
def test_accepts_multiple_changes_from_option():
|
|
s = StrOption("string", "", default="string")
|
|
od1 = OptionDescription("options", "", [s])
|
|
cfg = Config(od1)
|
|
cfg.option('string').value.set("egg")
|
|
assert cfg.option('string').default() == "string"
|
|
assert cfg.option('string').value.get() == "egg"
|
|
cfg.option('string').value.set('blah')
|
|
assert cfg.option('string').default() == "string"
|
|
assert cfg.option('string').value.get() == "blah"
|
|
cfg.option('string').value.set('bol')
|
|
assert cfg.option('string').value.get() == 'bol'
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_allow_multiple_changes_from_config():
|
|
"""
|
|
a `setoption` from the config object is much like the attribute access,
|
|
except the fact that value owner can bet set
|
|
"""
|
|
s = StrOption("string", "", default="string")
|
|
s2 = StrOption("string2", "", default="string")
|
|
suboption = OptionDescription("bip", "", [s2])
|
|
od1 = OptionDescription("options", "", [s, suboption])
|
|
cfg = Config(od1)
|
|
cfg.option('string').value.set("oh")
|
|
assert cfg.option('string').value.get() == "oh"
|
|
cfg.option('string').value.set("blah")
|
|
assert cfg.option('string').value.get() == "blah"
|
|
# assert not list_sessions()
|
|
|
|
|
|
# ____________________________________________________________
|
|
# accessing a value by the get method
|
|
def test_access_by_get():
|
|
od1 = make_description()
|
|
cfg = Config(od1)
|
|
with pytest.raises(AttributeError):
|
|
list(cfg.option.find('idontexist'))
|
|
ret = cfg.option.find('wantref', first=True)
|
|
assert ret.value.get() is False
|
|
ret = cfg.option.find('dummy', first=True)
|
|
assert ret.value.get() is False
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_access_by_get_whith_hide():
|
|
b1 = BoolOption("b1", "", properties=(('hidden'),))
|
|
od1 = OptionDescription("opt", "",
|
|
[OptionDescription("sub", "",
|
|
[b1, ChoiceOption("c1", "", ('a', 'b', 'c'), 'a'),
|
|
BoolOption("d1", "")]),
|
|
BoolOption("b2", ""),
|
|
BoolOption("d1", "")])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
with pytest.raises(AttributeError):
|
|
ret = cfg.option.find('b1')
|
|
ret.value.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_append_properties():
|
|
od1 = make_description()
|
|
cfg = Config(od1)
|
|
assert cfg.option('gc.dummy').property.get() == set()
|
|
cfg.option('gc.dummy').property.add('test')
|
|
assert cfg.option('gc.dummy').property.get() == {'test'}
|
|
with pytest.raises(ConfigError):
|
|
cfg.option('gc.dummy').property.add('force_store_value')
|
|
assert cfg.option('gc.dummy').property.get() == {'test'}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_reset_properties():
|
|
od1 = make_description()
|
|
cfg = Config(od1)
|
|
assert cfg.option('gc.dummy').property.get() == set()
|
|
cfg.option('gc.dummy').property.add('frozen')
|
|
assert cfg.option('gc.dummy').property.get() == {'frozen'}
|
|
cfg.option('gc.dummy').property.reset()
|
|
assert cfg.option('gc.dummy').property.get() == set()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_properties_cached():
|
|
b1 = BoolOption("b1", "", properties=('test',))
|
|
od1 = OptionDescription("opt", "", [OptionDescription("sub", "", [b1])])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
assert cfg.option('sub.b1').property.get() == {'test'}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_append_properties_force_store_value():
|
|
gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('force_store_value',))
|
|
gcgroup = OptionDescription('gc', '', [gcdummy])
|
|
od1 = OptionDescription('tiramisu', '', [gcgroup])
|
|
cfg = Config(od1)
|
|
assert cfg.option('gc.dummy').property.get() == {'force_store_value'}
|
|
cfg.option('gc.dummy').property.add('test')
|
|
assert cfg.option('gc.dummy').property.get() == {'force_store_value', 'test'}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_properties_get_add_reset():
|
|
gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('force_store_value',))
|
|
gcgroup = OptionDescription('gc', '', [gcdummy])
|
|
od1 = OptionDescription('tiramisu', '', [gcgroup])
|
|
cfg = Config(od1)
|
|
assert cfg.property.get() == {'validator', 'warnings', 'cache'}
|
|
cfg.property.add('frozen')
|
|
assert cfg.property.get() == {'validator', 'warnings', 'cache', 'frozen'}
|
|
cfg.property.reset()
|
|
assert cfg.property.get() == {'validator', 'warnings', 'cache'}
|
|
|
|
|
|
def test_reset_properties_force_store_value():
|
|
gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('force_store_value',))
|
|
gcgroup = OptionDescription('gc', '', [gcdummy])
|
|
od1 = OptionDescription('tiramisu', '', [gcgroup])
|
|
cfg = Config(od1)
|
|
assert cfg.property.exportation() == {}
|
|
cfg.property.add('frozen')
|
|
assert cfg.property.exportation() == \
|
|
{None: {None: set(('frozen', 'cache', 'validator', 'warnings'))}}
|
|
cfg.property.reset()
|
|
assert cfg.property.exportation() == {None: {}}
|
|
cfg.option('gc.dummy').property.add('test')
|
|
assert cfg.property.exportation() == {None: {}, 'gc.dummy': {None: set(('test', 'force_store_value'))}}
|
|
cfg.property.reset()
|
|
assert cfg.property.exportation() == {None: {}, 'gc.dummy': {None: set(('test', 'force_store_value'))}}
|
|
cfg.property.add('frozen')
|
|
assert cfg.property.exportation() == \
|
|
{None: {None: set(('frozen', 'validator', 'cache', 'warnings'))},
|
|
'gc.dummy': {None: set(('test', 'force_store_value'))}}
|
|
cfg.property.add('frozen')
|
|
assert cfg.property.exportation() == \
|
|
{None: {None: set(('frozen', 'validator', 'cache', 'warnings'))},
|
|
'gc.dummy': {None: set(('test', 'force_store_value'))}}
|
|
cfg.option('gc.dummy').property.add('test')
|
|
assert cfg.property.exportation() == \
|
|
{None: {None: set(('frozen', 'validator', 'cache', 'warnings'))},
|
|
'gc.dummy': {None: set(('test', 'force_store_value'))}}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_importation_force_store_value():
|
|
gcdummy = BoolOption('dummy', 'dummy', default=False,
|
|
properties=('force_store_value',))
|
|
gcgroup = OptionDescription('gc', '', [gcdummy])
|
|
od1 = OptionDescription('tiramisu', '', [gcgroup])
|
|
config1 = Config(od1)
|
|
assert config1.value.exportation() == {}
|
|
config1.property.add('frozen')
|
|
assert config1.value.exportation() == {}
|
|
config1.property.add('force_store_value')
|
|
assert config1.value.exportation() == {'gc.dummy': {None: [False, 'forced']}}
|
|
exportation = config1.property.exportation()
|
|
config2 = Config(od1)
|
|
assert config2.value.exportation() == {}
|
|
config2.property.importation(exportation)
|
|
assert config2.value.exportation() == {'gc.dummy': {None: [False, 'forced']}}
|
|
config2.property.importation(exportation)
|
|
assert config2.value.exportation() == {'gc.dummy': {None: [False, 'forced']}}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_set_modified_value():
|
|
gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('force_store_value',))
|
|
gcgroup = OptionDescription('gc', '', [gcdummy])
|
|
od1 = OptionDescription('tiramisu', '', [gcgroup])
|
|
cfg = Config(od1)
|
|
assert cfg.property.exportation() == {}
|
|
cfg.property.importation({None: {None: set(('frozen', 'cache', 'validator', 'warnings'))}})
|
|
assert cfg.property.exportation() == \
|
|
{None: {None: set(('frozen', 'cache', 'validator', 'warnings'))}}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_none_is_not_modified():
|
|
gcdummy = StrOption('dummy', 'dummy', properties=('force_store_value',))
|
|
gcdummy1 = StrOption('dummy1', 'dummy1', default="str", properties=('force_store_value',))
|
|
gcgroup = OptionDescription('gc', '', [gcdummy, gcdummy1])
|
|
od1 = OptionDescription('tiramisu', '', [gcgroup])
|
|
cfg = Config(od1)
|
|
assert cfg.value.exportation() == {}
|
|
cfg.property.read_write()
|
|
assert cfg.value.exportation() == {'gc.dummy1': {None: ['str', 'forced']}}
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_pprint():
|
|
msg_error = _("cannot access to {0} \"{1}\" because has {2} {3}")
|
|
msg_is_not = _('the value of "{0}" is not {1}')
|
|
msg_is = _('the value of "{0}" is {1}')
|
|
properties = _('properties')
|
|
prop = _('property')
|
|
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True, properties=('hidden', 'disabled'))
|
|
s2 = StrOption("string2", "", default="string")
|
|
s3 = StrOption("string3", "", default=["string"], default_multi="string", multi=True, properties=('hidden',))
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected_0': ParamValue(2),
|
|
'expected_1': ParamValue(3),
|
|
'expected_2': ParamValue(4),
|
|
'reverse_condition': ParamValue(True)}),
|
|
calc_value_property_help)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition_0': ParamOption(intoption),
|
|
'expected_0': ParamValue(1),
|
|
'condition_1': ParamOption(s2),
|
|
'expected_1': ParamValue('string')}),
|
|
calc_value_property_help)
|
|
stroption = StrOption('str', 'Test string option', default="abc", properties=(hidden_property, disabled_property))
|
|
|
|
val2 = StrOption('val2', "")
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}),
|
|
calc_value_property_help)
|
|
descr2 = OptionDescription("options", "options", [val2], properties=(hidden_property,))
|
|
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(stroption),
|
|
'expected': ParamValue('2'),
|
|
'reverse_condition': ParamValue(True)}),
|
|
calc_value_property_help)
|
|
val3 = StrOption('val3', "", properties=(hidden_property,))
|
|
|
|
od1 = OptionDescription("options", "root option", [s, s2, s3, intoption, stroption, descr2, val3])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
cfg.option('int').value.set(1)
|
|
err = None
|
|
try:
|
|
cfg.option('str').value.get()
|
|
except PropertiesOptionError as error:
|
|
err = error
|
|
|
|
list_disabled = '"disabled" (' + display_list([msg_is.format('Test int option', '"1"'), msg_is.format('string2', '"string"')], add_quote=False) + ')'
|
|
list_hidden = '"hidden" (' + msg_is_not.format('Test int option', display_list([2, 3, 4], 'or', add_quote=True)) + ')'
|
|
assert str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_disabled, list_hidden], add_quote=False)))
|
|
del err
|
|
|
|
err = None
|
|
try:
|
|
cfg.option('options.val2').value.get()
|
|
except PropertiesOptionError as error:
|
|
err = error
|
|
|
|
assert str(err) == msg_error.format('optiondescription', 'options', prop, '"hidden" (' + msg_is.format('Test int option', '"1"') + ')')
|
|
|
|
#err = None
|
|
#try:
|
|
# cfg.option('val3').value.get()
|
|
#except PropertiesOptionError as error:
|
|
# err = error
|
|
|
|
#msg_1 = msg_is.format('string2', 'string')
|
|
#msg_2 = msg_is.format('Test int option', 1)
|
|
#msg_3 = msg_is_not.format('Test int option', display_list([2, 3, 4], 'or', add_quote=True))
|
|
#list_hidden = '"hidden" (' + display_list([msg_2, msg_3, msg_1]) + ')'
|
|
|
|
#assert str(err) == msg_error.format('option', 'val3', prop, list_hidden)
|
|
|
|
err = None
|
|
try:
|
|
cfg.option('string').value.get()
|
|
except Exception as error:
|
|
err = error
|
|
|
|
assert str(err) == msg_error.format('option', 'string', properties, display_list(['disabled', 'hidden'], add_quote=True))
|
|
del err
|
|
|
|
err = None
|
|
try:
|
|
cfg.option('string3').value.get()
|
|
except Exception as error:
|
|
err = error
|
|
|
|
assert str(err) == msg_error.format('option', 'string3', prop, '"hidden"')
|
|
del err
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_pprint_not_todict():
|
|
msg_error = _("cannot access to {0} \"{1}\" because has {2} {3}")
|
|
msg_is_not = _('the value of "{0}" is not {1}')
|
|
msg_is = _('the value of "{0}" is {1}')
|
|
properties = _('properties')
|
|
prop = _('property')
|
|
|
|
s = StrOption("string", "", default=["string"], default_multi="string", multi=True, properties=('hidden', 'disabled'))
|
|
s2 = StrOption("string2", "", default="string")
|
|
s3 = StrOption("string3", "", default=["string"], default_multi="string", multi=True, properties=('hidden',))
|
|
intoption = IntOption('int', 'Test int option', default=0)
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected_0': ParamValue(2),
|
|
'expected_1': ParamValue(3),
|
|
'expected_2': ParamValue(4),
|
|
'reverse_condition': ParamValue(True)}),
|
|
)
|
|
disabled_property = Calculation(calc_value,
|
|
Params(ParamValue('disabled'),
|
|
kwargs={'condition_0': ParamOption(intoption),
|
|
'expected_0': ParamValue(1),
|
|
'condition_1': ParamOption(s2),
|
|
'expected_1': ParamValue('string')}),
|
|
)
|
|
stroption = StrOption('str', 'Test string option', default="abc", properties=(hidden_property, disabled_property))
|
|
|
|
val2 = StrOption('val2', "")
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(intoption),
|
|
'expected': ParamValue(1)}),
|
|
)
|
|
descr2 = OptionDescription("options", "options", [val2], properties=(hidden_property,))
|
|
|
|
hidden_property = Calculation(calc_value,
|
|
Params(ParamValue('hidden'),
|
|
kwargs={'condition': ParamOption(stroption),
|
|
'expected': ParamValue('2'),
|
|
'reverse_condition': ParamValue(True)}),
|
|
)
|
|
val3 = StrOption('val3', "", properties=(hidden_property,))
|
|
|
|
od1 = OptionDescription("options", "root option", [s, s2, s3, intoption, stroption, descr2, val3])
|
|
cfg = Config(od1)
|
|
cfg.property.read_write()
|
|
cfg.option('int').value.set(1)
|
|
err = None
|
|
try:
|
|
cfg.option('str').value.get()
|
|
except PropertiesOptionError as error:
|
|
err = error
|
|
|
|
list_disabled = '"disabled"'
|
|
list_hidden = '"hidden"'
|
|
assert str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_disabled, list_hidden], add_quote=False)))
|
|
del err
|
|
|
|
err = None
|
|
try:
|
|
cfg.option('options.val2').value.get()
|
|
except PropertiesOptionError as error:
|
|
err = error
|
|
|
|
assert str(err) == msg_error.format('optiondescription', 'options', prop, '"hidden"')
|
|
|
|
err = None
|
|
try:
|
|
cfg.option('string').value.get()
|
|
except Exception as error:
|
|
err = error
|
|
|
|
assert str(err) == msg_error.format('option', 'string', properties, display_list(['disabled', 'hidden'], add_quote=True))
|
|
del err
|
|
|
|
err = None
|
|
try:
|
|
cfg.option('string3').value.get()
|
|
except Exception as error:
|
|
err = error
|
|
|
|
assert str(err) == msg_error.format('option', 'string3', prop, '"hidden"')
|
|
del err
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_property_invalid_type():
|
|
with pytest.raises(ValueError):
|
|
s3 = StrOption("string3", "", default=["string"], default_multi="string", multi=True, properties=(1,))
|
|
|
|
|
|
def test_settings_list_with_follower():
|
|
leader = StrOption("leader", "leader", default=['leader'], multi=True)
|
|
option = StrOption("str", "str", default_multi="dhcp", multi=True, properties=frozenset({'disabled'}))
|
|
ip = StrOption(name="ip",
|
|
doc="ip",
|
|
multi=True,
|
|
properties=frozenset({"basic", "mandatory", Calculation(calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option, notraisepropertyerror=True), 'expected': ParamValue("ipv4"), 'reverse_condition': ParamValue(True)}), calc_value_property_help)}),
|
|
)
|
|
descr = Leadership("root", "", [leader, option, ip])
|
|
cfg = Config(OptionDescription('root', 'root', [descr]))
|
|
cfg.property.read_write()
|
|
assert len(cfg.option('root').list('all')) == 2
|
|
|
|
|
|
def return_none(*args):
|
|
return
|
|
|
|
|
|
def test_settings_disable_set_information(config_type):
|
|
opt1 = StrOption('opt1', '', ['val'], multi=True)
|
|
opt2 = StrOption('opt2', '', default_multi='test', validators=[Calculation(return_none, Params((ParamInformation('key'))))], properties=frozenset([Calculation(return_none, Params((ParamInformation('key'))))]), multi=True)
|
|
od2 = Leadership('leadership', '', [opt1, opt2])
|
|
od1 = OptionDescription('root', '', [od2])
|
|
cfg = Config(od1)
|
|
cfg.property.read_only()
|
|
cfg.information.set('key', 'val')
|
|
assert cfg.value.dict() == {'leadership.opt1': [{'leadership.opt1': 'val', 'leadership.opt2': 'test'}]}
|