refactor
This commit is contained in:
@ -163,11 +163,11 @@ class CacheOptionDescription(BaseOption):
|
||||
raise ConfigError(_('a dynoption ({0}) cannot have '
|
||||
'force_store_value property').format(subpath))
|
||||
if force_store_values and not config._impl_values._p_.hasvalue(subpath, session):
|
||||
value = config.cfgimpl_get_values()._get_cached_value(option,
|
||||
path=subpath,
|
||||
validate=False,
|
||||
trusted_cached_properties=False,
|
||||
validate_properties=True)
|
||||
value = config.cfgimpl_get_values().get_cached_value(option,
|
||||
path=subpath,
|
||||
validate=False,
|
||||
trusted_cached_properties=False,
|
||||
validate_properties=True)
|
||||
value_set = True
|
||||
config._impl_values._p_.setvalue(subpath, value,
|
||||
owners.forced, None, session, False)
|
||||
@ -497,6 +497,9 @@ class OptionDescription(OptionDescriptionWalk):
|
||||
raise ValueError(_("invalid suffix: {0} for option").format(val))
|
||||
return values
|
||||
|
||||
def impl_validate_value(self, option, value, context):
|
||||
pass
|
||||
|
||||
|
||||
class DynOptionDescription(OptionDescription):
|
||||
def __init__(self, name, doc, children, requires=None, properties=None,
|
||||
@ -561,9 +564,13 @@ class SynDynOptionDescription(object):
|
||||
class MasterSlaves(OptionDescription):
|
||||
__slots__ = ('master', 'slaves')
|
||||
|
||||
def __init__(self, name, doc, children, requires=None, properties=None):
|
||||
#if master (same name has group) is set
|
||||
#for collect all slaves
|
||||
def __init__(self,
|
||||
name,
|
||||
doc,
|
||||
children,
|
||||
requires=None,
|
||||
properties=None):
|
||||
|
||||
super(MasterSlaves, self).__init__(name,
|
||||
doc,
|
||||
children,
|
||||
@ -572,10 +579,6 @@ class MasterSlaves(OptionDescription):
|
||||
self._group_type = groups.master
|
||||
slaves = []
|
||||
master = children[0]
|
||||
if master.impl_getname() != name:
|
||||
raise ValueError(_('master group with wrong'
|
||||
' master name for {0}'
|
||||
).format(name))
|
||||
for child in children[1:]:
|
||||
if child.impl_getdefault() != []:
|
||||
raise ValueError(_("not allowed default value for option {0} "
|
||||
@ -604,8 +607,6 @@ class MasterSlaves(OptionDescription):
|
||||
raise ValueError(_("callback of master's option shall "
|
||||
"not refered a slave's ones"))
|
||||
#everything is ok, store references
|
||||
#self.master = master
|
||||
#self.slaves = tuple(slaves)
|
||||
for child in children:
|
||||
child._master_slaves = self
|
||||
master._add_dependency(self)
|
||||
@ -644,41 +645,74 @@ class MasterSlaves(OptionDescription):
|
||||
c_opt = opt
|
||||
return c_opt in self._children[1]
|
||||
|
||||
def reset(self, opt, values, setting_properties, _commit=True, force_permissive=False):
|
||||
for slave in self.getslaves(opt):
|
||||
values.reset(slave, validate=False, _setting_properties=setting_properties,
|
||||
_commit=_commit, force_permissive=force_permissive)
|
||||
def reset(self,
|
||||
opt,
|
||||
values,
|
||||
setting_properties,
|
||||
_commit=True,
|
||||
force_permissive=False):
|
||||
|
||||
def pop(self, opt, values, index):
|
||||
for slave in self.getslaves(opt):
|
||||
slave_path = slave.impl_getpath(values._getcontext())
|
||||
slavelen = values._p_.get_max_length(slave_path, None)
|
||||
# just for raise if needed
|
||||
if not values.is_default_owner(slave, validate_properties=False,
|
||||
validate_meta=False, index=index):
|
||||
multi = values._get_cached_value(slave, validate=False,
|
||||
validate_properties=False,
|
||||
)
|
||||
if isinstance(multi, Exception):
|
||||
raise multi
|
||||
values.reset(slave,
|
||||
slave_path,
|
||||
setting_properties,
|
||||
validate=False,
|
||||
_commit=_commit,
|
||||
force_permissive=force_permissive)
|
||||
|
||||
def pop(self,
|
||||
opt,
|
||||
path,
|
||||
values,
|
||||
index):
|
||||
|
||||
for slave in self.getslaves(opt):
|
||||
slave_path = slave.impl_getpath(values._getcontext())
|
||||
slavelen = values._p_.get_max_length(slave_path)
|
||||
if not values.is_default_owner(slave,
|
||||
validate_properties=False,
|
||||
validate_meta=False,
|
||||
index=index):
|
||||
#FIXME # just for raise if needed
|
||||
#multi = values.get_cached_value(slave,
|
||||
# validate=False,
|
||||
# validate_properties=False,
|
||||
# )
|
||||
#if isinstance(multi, Exception):
|
||||
# raise multi
|
||||
if slavelen > index:
|
||||
values._p_.resetvalue_index(slave_path, index)
|
||||
values._p_.resetvalue_index(slave_path,
|
||||
index)
|
||||
if slavelen > index + 1:
|
||||
for idx in xrange(index + 1, slavelen):
|
||||
values._p_.reduce_index(slave_path, idx)
|
||||
values._p_.reduce_index(slave_path,
|
||||
idx)
|
||||
|
||||
|
||||
def getitem(self, values, opt, path, validate, force_permissive,
|
||||
trusted_cached_properties, validate_properties,
|
||||
slave_path=undefined, slave_value=undefined,
|
||||
setting_properties=undefined, self_properties=undefined, index=None,
|
||||
def getitem(self,
|
||||
values,
|
||||
opt,
|
||||
path,
|
||||
validate,
|
||||
force_permissive,
|
||||
trusted_cached_properties,
|
||||
validate_properties,
|
||||
setting_properties=undefined,
|
||||
self_properties=undefined,
|
||||
index=None,
|
||||
check_frozen=False):
|
||||
if self.is_master(opt):
|
||||
return self._getmaster(values, opt, path, validate,
|
||||
return self._getmaster(values,
|
||||
opt,
|
||||
path,
|
||||
validate,
|
||||
force_permissive,
|
||||
validate_properties, slave_path,
|
||||
slave_value, self_properties, index,
|
||||
setting_properties, check_frozen)
|
||||
validate_properties,
|
||||
self_properties,
|
||||
index,
|
||||
setting_properties,
|
||||
check_frozen)
|
||||
else:
|
||||
return self._getslave(values, opt, path, validate,
|
||||
force_permissive, trusted_cached_properties,
|
||||
@ -686,17 +720,26 @@ class MasterSlaves(OptionDescription):
|
||||
self_properties, index,
|
||||
check_frozen)
|
||||
|
||||
def _getmaster(self, values, opt, path, validate, force_permissive,
|
||||
validate_properties, c_slave_path,
|
||||
c_slave_value, self_properties, index,
|
||||
setting_properties, check_frozen):
|
||||
return values._get_cached_value(opt, path=path, validate=validate,
|
||||
force_permissive=force_permissive,
|
||||
validate_properties=validate_properties,
|
||||
self_properties=self_properties,
|
||||
from_masterslave=True, index=index,
|
||||
setting_properties=setting_properties,
|
||||
check_frozen=check_frozen)
|
||||
def _getmaster(self,
|
||||
values,
|
||||
opt,
|
||||
path,
|
||||
validate,
|
||||
force_permissive,
|
||||
validate_properties,
|
||||
self_properties,
|
||||
index,
|
||||
setting_properties,
|
||||
check_frozen):
|
||||
return values.get_cached_value(opt,
|
||||
path=path,
|
||||
validate=validate,
|
||||
force_permissive=force_permissive,
|
||||
validate_properties=validate_properties,
|
||||
self_properties=self_properties,
|
||||
index=index,
|
||||
setting_properties=setting_properties,
|
||||
check_frozen=check_frozen)
|
||||
|
||||
def _getslave(self, values, opt, path, validate, force_permissive,
|
||||
trusted_cached_properties, validate_properties, setting_properties,
|
||||
@ -725,20 +768,20 @@ class MasterSlaves(OptionDescription):
|
||||
master = self.getmaster(opt)
|
||||
context = values._getcontext()
|
||||
masterp = master.impl_getpath(context)
|
||||
mastervalue = values._get_cached_value(master, path=masterp, validate=validate,
|
||||
force_permissive=force_permissive,
|
||||
validate_properties=validate_properties,
|
||||
self_properties=self_properties,
|
||||
from_masterslave=True,
|
||||
setting_properties=setting_properties,
|
||||
check_frozen=check_frozen)
|
||||
mastervalue = values.get_cached_value(master, path=masterp, validate=validate,
|
||||
force_permissive=force_permissive,
|
||||
validate_properties=validate_properties,
|
||||
self_properties=self_properties,
|
||||
from_masterslave=True,
|
||||
setting_properties=setting_properties,
|
||||
check_frozen=check_frozen)
|
||||
if isinstance(mastervalue, Exception):
|
||||
if isinstance(mastervalue, PropertiesOptionError):
|
||||
mastervalue.set_orig_opt(opt)
|
||||
return mastervalue
|
||||
masterlen = len(mastervalue)
|
||||
master_is_meta = values._is_meta(master, masterp, force_permissive=force_permissive)
|
||||
multi = values._get_multi(opt, path)
|
||||
#self._master_is_meta = values._is_meta(master, masterp, force_permissive=force_permissive)
|
||||
multi = list() # values._get_multi(opt, path)
|
||||
if validate_properties:
|
||||
props = context.cfgimpl_get_settings().validate_properties(opt, False,
|
||||
check_frozen,
|
||||
@ -748,68 +791,84 @@ class MasterSlaves(OptionDescription):
|
||||
setting_properties=setting_properties)
|
||||
if props:
|
||||
return props
|
||||
#FIXME shouldn't have index!!!
|
||||
if index is None:
|
||||
indexes = xrange(0, masterlen)
|
||||
else:
|
||||
indexes = [index]
|
||||
for idx in indexes:
|
||||
value = values._get_cached_value(opt, path, validate,
|
||||
force_permissive,
|
||||
trusted_cached_properties,
|
||||
validate_properties,
|
||||
with_meta=master_is_meta,
|
||||
index=idx,
|
||||
# not self_properties,
|
||||
# depends to index
|
||||
#self_properties=self_properties,
|
||||
setting_properties=setting_properties,
|
||||
masterlen=masterlen,
|
||||
from_masterslave=True,
|
||||
check_frozen=check_frozen)
|
||||
value = values.get_cached_value(opt, path, validate,
|
||||
force_permissive,
|
||||
trusted_cached_properties,
|
||||
validate_properties,
|
||||
index=idx,
|
||||
# not self_properties,
|
||||
# depends to index
|
||||
#self_properties=self_properties,
|
||||
setting_properties=setting_properties,
|
||||
from_masterslave=True,
|
||||
check_frozen=check_frozen)
|
||||
if isinstance(value, Exception):
|
||||
if isinstance(value, PropertiesOptionError):
|
||||
err = value
|
||||
if index is None:
|
||||
multi.append_properties_error(value)
|
||||
multi.append(value)
|
||||
else:
|
||||
multi = value
|
||||
else:
|
||||
return value
|
||||
elif index is None:
|
||||
multi.append(value, setitem=False, force=True, validate=False,
|
||||
force_permissive=force_permissive)
|
||||
multi.append(value)
|
||||
else:
|
||||
multi = value
|
||||
return multi
|
||||
|
||||
def validate(self, values, opt, index, path, setitem):
|
||||
def validate(self,
|
||||
values,
|
||||
opt,
|
||||
index,
|
||||
path,
|
||||
setitem):
|
||||
if self.is_master(opt):
|
||||
#for regen slave path
|
||||
base_path = '.'.join(path.split('.')[:-1]) + '.'
|
||||
for slave in self.getslaves(opt):
|
||||
slave_path = base_path + slave.impl_getname()
|
||||
slavelen = values._p_.get_max_length(slave_path)
|
||||
self.validate_slave_length(index, slavelen, slave.impl_getname(), opt)
|
||||
self.validate_slave_length(index,
|
||||
slavelen,
|
||||
slave.impl_getname(),
|
||||
opt)
|
||||
else:
|
||||
val_len = self.get_length(values, opt, slave_path=path)
|
||||
val_len = self.get_length(values)
|
||||
if isinstance(val_len, Exception):
|
||||
return val_len
|
||||
self.validate_slave_length(val_len, index,
|
||||
opt.impl_getname(), opt, setitem=setitem)
|
||||
self.validate_slave_length(val_len,
|
||||
index,
|
||||
opt.impl_getname(),
|
||||
opt,
|
||||
setitem=setitem)
|
||||
|
||||
def get_length(self, values, opt, validate=True, slave_path=undefined,
|
||||
slave_value=undefined, force_permissive=False, master=None,
|
||||
masterp=None, setting_properties=undefined):
|
||||
def get_length(self,
|
||||
values,
|
||||
validate=True,
|
||||
force_permissive=False,
|
||||
master=None,
|
||||
masterp=None,
|
||||
setting_properties=undefined):
|
||||
"""get master len with slave option"""
|
||||
if master is None:
|
||||
master = self.getmaster(None)
|
||||
if masterp is None:
|
||||
masterp = master.impl_getpath(self._getcontext())
|
||||
if slave_value is undefined:
|
||||
slave_path = undefined
|
||||
value = self.getitem(values, master, masterp, validate,
|
||||
force_permissive, None, True, slave_path=slave_path,
|
||||
slave_value=slave_value, setting_properties=setting_properties)
|
||||
masterp = master.impl_getpath(values._getcontext())
|
||||
value = self.getitem(values,
|
||||
master,
|
||||
masterp,
|
||||
validate,
|
||||
force_permissive,
|
||||
None,
|
||||
True,
|
||||
setting_properties=setting_properties)
|
||||
if isinstance(value, Exception):
|
||||
return value
|
||||
return len(value)
|
||||
@ -843,10 +902,9 @@ class MasterSlaves(OptionDescription):
|
||||
master = self.getmaster(opt)
|
||||
masterp = master.impl_getpath(context)
|
||||
|
||||
mastervalue = values._get_cached_value(master, path=masterp,
|
||||
force_permissive=force_permissive,
|
||||
from_masterslave=True,
|
||||
setting_properties=setting_properties)
|
||||
mastervalue = values.get_cached_value(master, path=masterp,
|
||||
force_permissive=force_permissive,
|
||||
setting_properties=setting_properties)
|
||||
if isinstance(mastervalue, Exception):
|
||||
return mastervalue
|
||||
masterlen = len(mastervalue)
|
||||
@ -857,9 +915,15 @@ class MasterSlaves(OptionDescription):
|
||||
else:
|
||||
for slave in self.getslaves(master):
|
||||
slave_path = slave.impl_getpath(context)
|
||||
slavelen = values._p_.get_max_length(slave_path, None)
|
||||
slavelen = values._p_.get_max_length(slave_path)
|
||||
self.validate_slave_length(masterlen, slavelen, slave.impl_getname(), master)
|
||||
|
||||
def impl_validate_value(self, option, value, context):
|
||||
if option.impl_is_master_slaves('master') and isinstance(value, list):
|
||||
if len(value) < context._impl_length:
|
||||
return ValueError(_('cannot reduce length of master "{}"'
|
||||
'').format(option.impl_get_display_name()))
|
||||
|
||||
|
||||
def _impl_getpaths(klass, include_groups, _currpath):
|
||||
"""returns a list of all paths in klass, recursively
|
||||
|
Reference in New Issue
Block a user