can set owner for a slave
This commit is contained in:
parent
8a21d49948
commit
51d14f30a4
@ -3,7 +3,7 @@ do_autopath()
|
||||
|
||||
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
|
||||
@ -131,6 +131,7 @@ def test_setowner_optiondescription():
|
||||
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)')
|
||||
|
||||
@ -145,3 +146,18 @@ def test_setowner_symlinkoption():
|
||||
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
|
||||
|
@ -115,10 +115,12 @@ class Values(Cache):
|
||||
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)
|
||||
|
@ -506,7 +506,7 @@ class Values(object):
|
||||
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
|
||||
|
||||
@ -523,10 +523,11 @@ class Values(object):
|
||||
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):
|
||||
@ -752,7 +753,8 @@ class Multi(list):
|
||||
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
|
||||
"""
|
||||
@ -769,7 +771,8 @@ class Multi(list):
|
||||
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():
|
||||
|
Loading…
Reference in New Issue
Block a user