Multi: don't touch slave's value if it's default one's + don't check slave properties (if, for example, disabled for example)
This commit is contained in:
@ -93,18 +93,21 @@ class Values(object):
|
||||
return self._values
|
||||
|
||||
def getitem(self, opt, validate=True, force_permissive=False,
|
||||
force_properties=None):
|
||||
force_properties=None, validate_properties=True):
|
||||
if opt in self._cache:
|
||||
exp = time()
|
||||
value, created = self._cache[opt]
|
||||
if exp < created:
|
||||
return value
|
||||
val = self._getitem(opt, validate, force_permissive, force_properties)
|
||||
if validate and force_permissive is False and force_properties is None:
|
||||
val = self._getitem(opt, validate, force_permissive, force_properties,
|
||||
validate_properties)
|
||||
if validate and validate_properties and force_permissive is False and \
|
||||
force_properties is None:
|
||||
self._set_cache(opt, val)
|
||||
return val
|
||||
|
||||
def _getitem(self, opt, validate, force_permissive, force_properties):
|
||||
def _getitem(self, opt, validate, force_permissive, force_properties,
|
||||
validate_properties):
|
||||
# options with callbacks
|
||||
setting = self.context.cfgimpl_get_settings()
|
||||
value = self._get_value(opt, validate)
|
||||
@ -133,9 +136,10 @@ class Values(object):
|
||||
if self.is_default_owner(opt) and \
|
||||
'force_store_value' in setting[opt]:
|
||||
self.setitem(opt, value, is_write=False)
|
||||
setting.validate_properties(opt, False, False, value=value,
|
||||
force_permissive=force_permissive,
|
||||
force_properties=force_properties)
|
||||
if validate_properties:
|
||||
setting.validate_properties(opt, False, False, value=value,
|
||||
force_permissive=force_permissive,
|
||||
force_properties=force_properties)
|
||||
return value
|
||||
|
||||
def __setitem__(self, opt, value):
|
||||
@ -152,13 +156,15 @@ class Values(object):
|
||||
self._setvalue(opt, value, force_permissive=force_permissive,
|
||||
is_write=is_write)
|
||||
|
||||
def _setvalue(self, opt, value, force_permissive=False, force_properties=None, is_write=True):
|
||||
def _setvalue(self, opt, value, force_permissive=False, force_properties=None,
|
||||
is_write=True, validate_properties=True):
|
||||
self.context.cfgimpl_reset_cache()
|
||||
setting = self.context.cfgimpl_get_settings()
|
||||
setting.validate_properties(opt, False, is_write,
|
||||
value=value,
|
||||
force_permissive=force_permissive,
|
||||
force_properties=force_properties)
|
||||
if validate_properties:
|
||||
setting.validate_properties(opt, False, is_write,
|
||||
value=value,
|
||||
force_permissive=force_permissive,
|
||||
force_properties=force_properties)
|
||||
self._values[opt] = (setting.getowner(), value)
|
||||
|
||||
def getowner(self, opt):
|
||||
@ -276,11 +282,13 @@ class Multi(list):
|
||||
for slave in self.opt.impl_get_master_slaves():
|
||||
values = self.context.cfgimpl_get_values()
|
||||
if not values.is_default_owner(slave):
|
||||
values[slave].append(slave.impl_getdefault_multi(),
|
||||
force=True)
|
||||
#get multi without valid properties
|
||||
values.getitem(slave, validate_properties=False).append(
|
||||
slave.impl_getdefault_multi(),
|
||||
force=True)
|
||||
self._validate(value)
|
||||
#assume not checking mandatory property
|
||||
self.context.cfgimpl_get_values()._setvalue(self.opt, self)
|
||||
#set value without valid properties
|
||||
self.context.cfgimpl_get_values()._setvalue(self.opt, self, validate_properties=not force)
|
||||
super(Multi, self).append(value)
|
||||
|
||||
def _validate(self, value):
|
||||
@ -302,6 +310,10 @@ class Multi(list):
|
||||
" which is a slave").format(self.opt._name))
|
||||
elif self.opt.impl_get_multitype() == multitypes.master:
|
||||
for slave in self.opt.impl_get_master_slaves():
|
||||
self.context.cfgimpl_get_values()[slave].pop(key, force=True)
|
||||
self.context.cfgimpl_get_values()._setvalue(self.opt, self)
|
||||
values = self.context.cfgimpl_get_values()
|
||||
if not values.is_default_owner(slave):
|
||||
#get multi without valid properties
|
||||
values.getitem(slave, validate_properties=False).pop(key, force=True)
|
||||
#set value without valid properties
|
||||
self.context.cfgimpl_get_values()._setvalue(self.opt, self, validate_properties=not force)
|
||||
return super(Multi, self).pop(key)
|
||||
|
Reference in New Issue
Block a user