from py.test import raises
-from tiramisu.setting import owners
+from tiramisu.setting import owners, groups
from tiramisu.config import Config
from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
StrOption, OptionDescription, SymLinkOption
descr1 = OptionDescription('tiramisu', '', [gcdummy])
descr = OptionDescription('tiramisu', '', [descr1])
cfg = Config(descr)
+ cfg
raises(ConfigError, 'cfg.cfgimpl_get_values().getowner(descr1)')
raises(ConfigError, 'cfg.cfgimpl_get_values().setowner(descr1, owners.user)')
cfg.tiramisu.dummy = True
assert cfg.cfgimpl_get_values().getowner(s) == owners.user
raises(ConfigError, 'cfg.cfgimpl_get_values().setowner(s, owners.user)')
+
+
+def test_owner_masterslaves():
+ b = IntOption('int', 'Test int option', default=[0], multi=True)
+ c = StrOption('str', 'Test string option', multi=True)
+ descr = OptionDescription("int", "", [b, c])
+ descr.impl_set_group_type(groups.master)
+ cfg = Config(descr)
+ raises(ConfigError, 'cfg.cfgimpl_get_values().setowner(c, owners.user)')
+
+ cfg.int.append(1)
+ cfg.str[0] = 'yes'
+ assert cfg.cfgimpl_get_values().getowner(c, 0) == owners.user
+ cfg.cfgimpl_get_values().setowner(c, owners.user, 0)
+ assert cfg.cfgimpl_get_values().getowner(c, 0) == owners.user
idx = self._values[0].index(path)
if isinstance(self._values[3][idx], list):
if index is None:
- raise ValueError('list but no index')
- owner = list(self._values[3][idx])[index] = owner
+ raise ValueError('Slave need index to set owner')
+ towner = list(self._values[3][idx])
+ towner[index] = owner
+ owner = towner
elif index is not None:
- raise ValueError('index set but not a list')
+ raise ValueError('Only slave option needs index to set owner')
lst = list(self._values[3])
lst[idx] = owner
values = list(self._values)
only_default=only_default, index=index)
return owner
- def setowner(self, opt, owner):
+ def setowner(self, opt, owner, index=None):
"""
sets a owner to an option
props = self._getcontext().cfgimpl_get_settings().validate_properties(opt,
False,
True,
- path)
+ path,
+ index=index)
if props:
raise props
- self._p_.setowner(path, owner)
+ self._p_.setowner(path, owner, index=index)
def is_default_owner(self, opt, validate_properties=True,
validate_meta=True, index=None):
True, False, True,
index=index)
- def append(self, value=undefined, force=False, setitem=True, validate=True):
+ def append(self, value=undefined, force=False, setitem=True, validate=True,
+ force_permissive=False):
"""the list value can be updated (appened)
only if the option is a master
"""
if 'validator' in setting_properties:
fake_context = context._gen_fake_values()
fake_multi = fake_context.cfgimpl_get_values()._get_cached_value(
- self.opt, path=self.path, validate=False)
+ self.opt, path=self.path, validate=False,
+ force_permissive=force_permissive)
fake_multi.append(value, validate=False, force=True)
self._validate(value, fake_context, index, True)
if not '_index' in self.__slots__ and self.opt.impl_is_submulti():