can set valid value for an option with invalid consistency
This commit is contained in:
@ -124,36 +124,53 @@ class ConfigBag(object):
|
||||
'option',
|
||||
'ori_option',
|
||||
'properties',
|
||||
'validate',
|
||||
'setting_properties',
|
||||
'force_permissive',
|
||||
'force_unrestraint',
|
||||
'display_warnings',
|
||||
'trusted_cached_properties',
|
||||
'fromconsistency',
|
||||
'_validator'
|
||||
)
|
||||
def __init__(self, config, **kwargs):
|
||||
self.default = {'force_permissive': False,
|
||||
'force_unrestraint': False,
|
||||
'display_warnings': True,
|
||||
'trusted_cached_properties': True,
|
||||
}
|
||||
self.config = config
|
||||
self._validator = True
|
||||
self.fromconsistency = []
|
||||
for key, value in kwargs.items():
|
||||
if value != self.default.get(key):
|
||||
setattr(self, key, value)
|
||||
|
||||
def __getattr__(self, key):
|
||||
if key in ['validate', 'validate_properties']:
|
||||
if key == 'validate_properties':
|
||||
return not self.force_unrestraint
|
||||
if key == 'validate':
|
||||
if self.setting_properties is not None:
|
||||
return 'validator' in self.setting_properties
|
||||
return self._validator
|
||||
if key == 'setting_properties':
|
||||
if self.force_unrestraint:
|
||||
return None
|
||||
self.setting_properties = self.config.cfgimpl_get_settings().get_context_properties()
|
||||
return self.setting_properties
|
||||
if key not in self.__slots__:
|
||||
raise KeyError('unknown key {}'.format(key))
|
||||
return self.default.get(key)
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == 'validate':
|
||||
if self.setting_properties is not None:
|
||||
if value is False:
|
||||
self.setting_properties = frozenset(set(self.setting_properties) - {'validator'})
|
||||
else:
|
||||
self.setting_properties = frozenset(set(self.setting_properties) | {'validator'})
|
||||
else:
|
||||
self._validator = value
|
||||
else:
|
||||
super().__setattr__(key, value)
|
||||
|
||||
def delete(self, key):
|
||||
try:
|
||||
return self.__delattr__(key)
|
||||
|
Reference in New Issue
Block a user