no more restore_validation

This commit is contained in:
Emmanuel Garette 2018-08-18 10:03:08 +02:00
parent 26095734bf
commit 85e9e8d71a
2 changed files with 30 additions and 36 deletions

View File

@ -137,8 +137,6 @@ class OptionBag:
path, path,
index, index,
config_bag): config_bag):
if self.option != None:
raise Exception('hu?')
if path is None: if path is None:
path = config_bag.context.cfgimpl_get_description().impl_get_path_by_opt(option) path = config_bag.context.cfgimpl_get_description().impl_get_path_by_opt(option)
self.path = path self.path = path
@ -157,18 +155,22 @@ class OptionBag:
return True return True
raise KeyError('unknown key {} for OptionBag'.format(key)) raise KeyError('unknown key {} for OptionBag'.format(key))
def copy(self):
kwargs = {}
option_bag = OptionBag()
for key in self.__slots__:
setattr(option_bag, key, getattr(self, key))
return option_bag
class ConfigBag: class ConfigBag:
__slots__ = ('context', # link to the current context __slots__ = ('context', # link to the current context
'properties', # properties for current context 'properties', # properties for current context
'permissives', # permissives for current context 'permissives', # permissives for current context
#'force_permissive', # force permissive
'_validate', # validate
) )
def __init__(self, context, **kwargs): def __init__(self, context, **kwargs):
#self.force_permissive = False #self.force_permissive = False
self.context = context self.context = context
self._validate = True
for key, value in kwargs.items(): for key, value in kwargs.items():
setattr(self, key, value) setattr(self, key, value)
@ -182,13 +184,7 @@ class ConfigBag:
raise KeyError('unknown key {} for ConfigBag'.format(key)) raise KeyError('unknown key {} for ConfigBag'.format(key))
def remove_validation(self): def remove_validation(self):
self._validate = 'validator' in self.properties self.properties = frozenset(self.properties - {'validator'})
if self._validate:
self.properties = frozenset(self.properties - {'validator'})
def restore_validation(self):
if self._validate:
self.properties = frozenset(self.properties | {'validator'})
def set_permissive(self): def set_permissive(self):
self.properties = frozenset(self.properties | {'permissive'}) self.properties = frozenset(self.properties | {'permissive'})

View File

@ -291,17 +291,15 @@ class Values(object):
# set value to a fake config when option has dependency # set value to a fake config when option has dependency
# validation will be complet in this case (consistency, ...) # validation will be complet in this case (consistency, ...)
tested_context = context._gen_fake_values() tested_context = context._gen_fake_values()
option_bag.config_bag.remove_validation() config_bag = option_bag.config_bag.copy()
try: config_bag.remove_validation()
tested_context.cfgimpl_get_values().setvalue(value, soption_bag = option_bag.copy()
option_bag, soption_bag.config_bag = config_bag
True) tested_context.cfgimpl_get_values().setvalue(value,
option_bag.config_bag.restore_validation() soption_bag,
tested_context.getattr(option_bag.path, True)
option_bag) tested_context.getattr(option_bag.path,
except Exception as exc: option_bag)
option_bag.config_bag.restore_validation()
raise exc
else: else:
self.setvalue_validation(value, self.setvalue_validation(value,
option_bag) option_bag)
@ -459,11 +457,13 @@ class Values(object):
hasvalue = self._p_.hasvalue(option_bag.path) hasvalue = self._p_.hasvalue(option_bag.path)
if hasvalue and 'validator' in option_bag.config_bag.properties: if hasvalue and 'validator' in option_bag.config_bag.properties:
option_bag.config_bag.remove_validation() config_bag = option_bag.config_bag.copy()
config_bag.remove_validation()
soption_bag = option_bag.copy()
soption_bag.config_bag = config_bag
fake_context = context._gen_fake_values() fake_context = context._gen_fake_values()
fake_value = fake_context.cfgimpl_get_values() fake_value = fake_context.cfgimpl_get_values()
fake_value.reset(option_bag) fake_value.reset(soption_bag)
option_bag.config_bag.restore_validation()
value = fake_value.getdefaultvalue(option_bag) value = fake_value.getdefaultvalue(option_bag)
fake_value.setvalue_validation(value, fake_value.setvalue_validation(value,
option_bag) option_bag)
@ -496,16 +496,14 @@ class Values(object):
if 'validator' in option_bag.config_bag.properties: if 'validator' in option_bag.config_bag.properties:
fake_context = context._gen_fake_values() fake_context = context._gen_fake_values()
fake_value = fake_context.cfgimpl_get_values() fake_value = fake_context.cfgimpl_get_values()
option_bag.config_bag.remove_validation() config_bag = option_bag.config_bag.copy()
try: config_bag.remove_validation()
fake_value.reset_slave(option_bag) soption_bag = option_bag.copy()
value = fake_value.getdefaultvalue(option_bag) soption_bag.config_bag = config_bag
fake_value.setvalue_validation(value, fake_value.reset_slave(soption_bag)
option_bag) value = fake_value.getdefaultvalue(soption_bag)
option_bag.config_bag.restore_validation() fake_value.setvalue_validation(value,
except Exception as err: soption_bag)
option_bag.config_bag.restore_validation()
raise err
self._p_.resetvalue_index(option_bag.path, option_bag.index) self._p_.resetvalue_index(option_bag.path, option_bag.index)
context.cfgimpl_reset_cache(option_bag) context.cfgimpl_reset_cache(option_bag)