improve GroupConfig/MetaConfig
add set_value in GroupConfig
This commit is contained in:
@ -100,13 +100,11 @@ class MasterSlaves(object):
|
||||
else: # pragma: no dynoptiondescription cover
|
||||
return opt == self.master or opt in self.slaves
|
||||
|
||||
def reset(self, opt, values):
|
||||
#FIXME pas de opt ???
|
||||
def reset(self, opt, values, validate):
|
||||
for slave in self.getslaves(opt):
|
||||
values.reset(slave)
|
||||
values.reset(slave, validate=validate)
|
||||
|
||||
def pop(self, opt, values, index):
|
||||
#FIXME pas test de meta ...
|
||||
for slave in self.getslaves(opt):
|
||||
if not values.is_default_owner(slave, validate_properties=False,
|
||||
validate_meta=False):
|
||||
@ -157,52 +155,6 @@ class MasterSlaves(object):
|
||||
|
||||
def _getslave(self, values, opt, path, validate, force_permissive,
|
||||
force_properties, validate_properties):
|
||||
value = values._get_validated_value(opt, path, validate,
|
||||
force_permissive,
|
||||
force_properties,
|
||||
validate_properties,
|
||||
None) # not undefined
|
||||
return self.get_slave_value(values, opt, value, validate,
|
||||
validate_properties, force_permissive)
|
||||
|
||||
def setitem(self, values, opt, value, path):
|
||||
if self.is_master(opt):
|
||||
masterlen = len(value)
|
||||
for slave in self.getslaves(opt):
|
||||
slave_path = slave.impl_getpath(values._getcontext())
|
||||
slave_value = values._get_validated_value(slave,
|
||||
slave_path,
|
||||
False,
|
||||
False,
|
||||
None, False,
|
||||
None) # not undefined
|
||||
slavelen = len(slave_value)
|
||||
self.validate_slave_length(masterlen, slavelen, slave.impl_getname(), opt)
|
||||
else:
|
||||
self.validate_slave_length(self.get_length(values, opt,
|
||||
slave_path=path), len(value),
|
||||
opt.impl_getname(), opt, setitem=True)
|
||||
|
||||
def get_length(self, values, opt, validate=True, slave_path=undefined,
|
||||
slave_value=undefined, force_permissive=False):
|
||||
"""get master len with slave option"""
|
||||
masterp = self.getmaster(opt).impl_getpath(values._getcontext())
|
||||
if slave_value is undefined:
|
||||
slave_path = undefined
|
||||
return len(self.getitem(values, self.getmaster(opt), masterp, validate,
|
||||
force_permissive, None, True, slave_path,
|
||||
slave_value))
|
||||
|
||||
def validate_slave_length(self, masterlen, valuelen, name, opt, setitem=False):
|
||||
if valuelen > masterlen or (valuelen < masterlen and setitem): # pragma: optional cover
|
||||
log.debug('validate_slave_length: masterlen: {0}, valuelen: {1}, '
|
||||
'setitem: {2}'.format(masterlen, valuelen, setitem))
|
||||
raise SlaveError(_("invalid len for the slave: {0}"
|
||||
" which has {1} as master").format(
|
||||
name, self.getmaster(opt).impl_getname()))
|
||||
|
||||
def get_slave_value(self, values, opt, value, validate=True,
|
||||
validate_properties=True, force_permissive=False):
|
||||
"""
|
||||
if master has length 0:
|
||||
return []
|
||||
@ -224,20 +176,72 @@ class MasterSlaves(object):
|
||||
list is smaller than master: return list + None
|
||||
list is greater than master: raise SlaveError
|
||||
"""
|
||||
master = self.getmaster(opt)
|
||||
masterp = master.impl_getpath(values._getcontext())
|
||||
masterlen = self.get_length(values, opt, validate, undefined,
|
||||
undefined, force_permissive,
|
||||
master=master)
|
||||
master_is_meta = values._is_meta(opt, masterp)
|
||||
value = values._get_validated_value(opt, path, validate,
|
||||
force_permissive,
|
||||
force_properties,
|
||||
validate_properties,
|
||||
None, # not undefined
|
||||
with_meta=master_is_meta)
|
||||
#if slave, had values until master's one
|
||||
path = opt.impl_getpath(values._getcontext())
|
||||
masterlen = self.get_length(values, opt, validate, path, value,
|
||||
force_permissive)
|
||||
valuelen = len(value)
|
||||
if validate:
|
||||
self.validate_slave_length(masterlen, valuelen, opt.impl_getname(), opt)
|
||||
self.validate_slave_length(masterlen, valuelen,
|
||||
opt.impl_getname(), opt)
|
||||
if valuelen < masterlen:
|
||||
for num in range(0, masterlen - valuelen):
|
||||
index = valuelen + num
|
||||
value.append(values._get_validated_value(opt, path, True,
|
||||
False, None,
|
||||
validate_properties,
|
||||
with_meta=master_is_meta,
|
||||
index=index),
|
||||
setitem=False,
|
||||
force=True)
|
||||
return value
|
||||
|
||||
def setitem(self, values, opt, value, path):
|
||||
if self.is_master(opt):
|
||||
masterlen = len(value)
|
||||
for slave in self.getslaves(opt):
|
||||
slave_path = slave.impl_getpath(values._getcontext())
|
||||
slave_value = values._get_validated_value(slave,
|
||||
slave_path,
|
||||
False,
|
||||
False,
|
||||
None, False,
|
||||
None) # not undefined
|
||||
slavelen = len(slave_value)
|
||||
self.validate_slave_length(masterlen, slavelen, slave.impl_getname(), opt)
|
||||
else:
|
||||
self.validate_slave_length(self.get_length(values, opt,
|
||||
slave_path=path), len(value),
|
||||
opt.impl_getname(), opt, setitem=True)
|
||||
|
||||
def get_length(self, values, opt, validate=True, slave_path=undefined,
|
||||
slave_value=undefined, force_permissive=False, master=None,
|
||||
masterp=None):
|
||||
"""get master len with slave option"""
|
||||
if master is None:
|
||||
master = self.getmaster(opt)
|
||||
if masterp is None:
|
||||
masterp = master.impl_getpath(values._getcontext())
|
||||
if slave_value is undefined:
|
||||
slave_path = undefined
|
||||
return len(self.getitem(values, master, masterp, validate,
|
||||
force_permissive, None, True, slave_path,
|
||||
slave_value))
|
||||
|
||||
def validate_slave_length(self, masterlen, valuelen, name, opt, setitem=False):
|
||||
if valuelen > masterlen or (valuelen < masterlen and setitem): # pragma: optional cover
|
||||
log.debug('validate_slave_length: masterlen: {0}, valuelen: {1}, '
|
||||
'setitem: {2}'.format(masterlen, valuelen, setitem))
|
||||
raise SlaveError(_("invalid len for the slave: {0}"
|
||||
" which has {1} as master").format(
|
||||
name, self.getmaster(opt).impl_getname()))
|
||||
|
Reference in New Issue
Block a user