conf = Config(descr)
assert conf.cfgimpl_get_values()._p_.get_modified_values() == {'wantref': ('forced', False),
'wantref2': ('forced', False),
- 'wantref3': ('forced', [False])}
+ 'wantref3': ('forced', (False,))}
conf.wantref = True
assert conf.cfgimpl_get_values()._p_.get_modified_values() == {'wantref': ('user', True),
'wantref2': ('forced', False),
- 'wantref3': ('forced', [False])}
+ 'wantref3': ('forced', (False,))}
del(conf.wantref)
assert conf.cfgimpl_get_values()._p_.get_modified_values() == {'wantref': ('forced', False),
'wantref2': ('forced', False),
- 'wantref3': ('forced', [False])}
+ 'wantref3': ('forced', (False,))}
def test_force_store_value_no_requirement():
descr = OptionDescription("int", "", [b, c])
descr.impl_set_group_type(groups.master)
conf = Config(descr)
- assert conf.cfgimpl_get_values()._p_.get_modified_values() == {'int': ('forced', [])}
+ assert conf.cfgimpl_get_values()._p_.get_modified_values() == {'int': ('forced', ())}
def test_force_store_value_callback():
"""
values = []
vidx = None
- if index is None:
-# raise Exception('arf')
- pass
def _setvalue_info(nb, idx, value, vidx):
lst = list(self._values[nb])
if index is None or nb == 0:
lst.append(value)
else:
- lst.append([value])
+ lst.append((value,))
else:
if index is None or nb == 0:
lst[idx] = value
else:
vidx = None
if vidx is None:
- lst[idx].append(value)
+ tval = list(lst[idx])
+ tval.append(value)
+ lst[idx] = tuple(tval)
elif nb != 1:
- lst[idx][vidx] = value
+ tval = list(lst[idx])
+ tval[vidx] = value
+ lst[idx] = tuple(tval)
+ lst[idx] = tuple(lst[idx])
values.append(tuple(lst))
return vidx
if path in self._values[0]:
idx = None
vidx = _setvalue_info(0, idx, path, vidx)
vidx = _setvalue_info(1, idx, index, vidx)
+ if isinstance(value, list):
+ value = tuple(value)
vidx = _setvalue_info(2, idx, value, vidx)
_setvalue_info(3, idx, owner, vidx)
self._values = tuple(values)
"""change owner for a path
"""
idx = self._values[0].index(path)
- if isinstance(self._values[3][idx], list):
+ if isinstance(self._values[3][idx], tuple):
if index is None:
raise ValueError('Slave need index to set owner')
towner = list(self._values[3][idx])
"""
if path in self._values[0]:
idx = self._values[0].index(path)
- if isinstance(self._values[1][idx], list):
+ if isinstance(self._values[1][idx], tuple):
if index is None:
raise ValueError('index is mandatory')
elif index is not None:
value.append(undefined)
else:
value = None
+ if isinstance(value, tuple):
+ value = list(value)
return value
def set_information(self, key, value):
raise err
self._setvalue(opt, path, value)
- def _setvalue(self, opt, path, value, force_owner=undefined):
+ def _setvalue(self, opt, path, value, force_owner=undefined, index=None):
context = self._getcontext()
context.cfgimpl_reset_cache()
if force_owner is undefined:
value[idx] = list(val)
#FIXME pourquoi là et pas dans masterslaves ??
if opt.impl_is_master_slaves('slave'):
- self._p_.resetvalue(path)
- for idx, val in enumerate(value):
- self._p_.setvalue(path, val, owner, idx)
+ if index is not None:
+ self._p_.setvalue(path, value[index], owner, index)
+ else:
+ self._p_.resetvalue(path)
+ for idx, val in enumerate(value):
+ self._p_.setvalue(path, val, owner, idx)
else:
self._p_.setvalue(path, value, owner, None)
self._validate(value, fake_context, index, True)
#assume not checking mandatory property
super(Multi, self).__setitem__(index, value)
- self._store()
+ self._store(index=index)
#def __repr__(self, *args, **kwargs):
# return super(Multi, self).__repr__(*args, **kwargs)
fake_multi = fake_context.cfgimpl_get_values()._get_cached_value(
self.opt, path=self.path, validate=False,
force_permissive=force_permissive)
- fake_multi.append(value, validate=False, force=True)
+ fake_multi.append(value, validate=False, force=True,
+ setitem=setitem)
self._validate(value, fake_context, index, True)
if not '_index' in self.__slots__ and self.opt.impl_is_submulti():
if not isinstance(value, SubMulti):
self._store(force=force)
return ret
- def _store(self, force=False):
+ def _store(self, force=False, index=None):
values = self._getcontext().cfgimpl_get_values()
if not force:
#FIXME could get properties an pass it
values.validate(self.opt, self, self.path,
valid_masterslave=False)
- values._setvalue(self.opt, self.path, self)
+ values._setvalue(self.opt, self.path, self, index=index)
class SubMulti(Multi):
def __setitem__(self, index, value):
self._setitem(index, value)
- def _store(self, force=False):
+ def _store(self, force=False, index=None):
#force is unused here
values = self._getcontext().cfgimpl_get_values()
values.validate(self.opt, self, self.path, valid_masterslave=False)