From 85e9e8d71a3e20bb5a947f364a2c089f3e2d3518 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sat, 18 Aug 2018 10:03:08 +0200 Subject: [PATCH] no more restore_validation --- tiramisu/setting.py | 20 ++++++++------------ tiramisu/value.py | 46 ++++++++++++++++++++++----------------------- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/tiramisu/setting.py b/tiramisu/setting.py index 0b5fdb0..d71775f 100644 --- a/tiramisu/setting.py +++ b/tiramisu/setting.py @@ -137,8 +137,6 @@ class OptionBag: path, index, config_bag): - if self.option != None: - raise Exception('hu?') if path is None: path = config_bag.context.cfgimpl_get_description().impl_get_path_by_opt(option) self.path = path @@ -157,18 +155,22 @@ class OptionBag: return True 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: __slots__ = ('context', # link to the current context 'properties', # properties for current context 'permissives', # permissives for current context - #'force_permissive', # force permissive - '_validate', # validate ) def __init__(self, context, **kwargs): #self.force_permissive = False self.context = context - self._validate = True for key, value in kwargs.items(): setattr(self, key, value) @@ -182,13 +184,7 @@ class ConfigBag: raise KeyError('unknown key {} for ConfigBag'.format(key)) def remove_validation(self): - self._validate = 'validator' in self.properties - if self._validate: - self.properties = frozenset(self.properties - {'validator'}) - - def restore_validation(self): - if self._validate: - self.properties = frozenset(self.properties | {'validator'}) + self.properties = frozenset(self.properties - {'validator'}) def set_permissive(self): self.properties = frozenset(self.properties | {'permissive'}) diff --git a/tiramisu/value.py b/tiramisu/value.py index 053c0e0..b27a84c 100644 --- a/tiramisu/value.py +++ b/tiramisu/value.py @@ -291,17 +291,15 @@ class Values(object): # set value to a fake config when option has dependency # validation will be complet in this case (consistency, ...) tested_context = context._gen_fake_values() - option_bag.config_bag.remove_validation() - try: - tested_context.cfgimpl_get_values().setvalue(value, - option_bag, - True) - option_bag.config_bag.restore_validation() - tested_context.getattr(option_bag.path, - option_bag) - except Exception as exc: - option_bag.config_bag.restore_validation() - raise exc + config_bag = option_bag.config_bag.copy() + config_bag.remove_validation() + soption_bag = option_bag.copy() + soption_bag.config_bag = config_bag + tested_context.cfgimpl_get_values().setvalue(value, + soption_bag, + True) + tested_context.getattr(option_bag.path, + option_bag) else: self.setvalue_validation(value, option_bag) @@ -459,11 +457,13 @@ class Values(object): hasvalue = self._p_.hasvalue(option_bag.path) 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_value = fake_context.cfgimpl_get_values() - fake_value.reset(option_bag) - option_bag.config_bag.restore_validation() + fake_value.reset(soption_bag) value = fake_value.getdefaultvalue(option_bag) fake_value.setvalue_validation(value, option_bag) @@ -496,16 +496,14 @@ class Values(object): if 'validator' in option_bag.config_bag.properties: fake_context = context._gen_fake_values() fake_value = fake_context.cfgimpl_get_values() - option_bag.config_bag.remove_validation() - try: - fake_value.reset_slave(option_bag) - value = fake_value.getdefaultvalue(option_bag) - fake_value.setvalue_validation(value, - option_bag) - option_bag.config_bag.restore_validation() - except Exception as err: - option_bag.config_bag.restore_validation() - raise err + config_bag = option_bag.config_bag.copy() + config_bag.remove_validation() + soption_bag = option_bag.copy() + soption_bag.config_bag = config_bag + fake_value.reset_slave(soption_bag) + value = fake_value.getdefaultvalue(soption_bag) + fake_value.setvalue_validation(value, + soption_bag) self._p_.resetvalue_index(option_bag.path, option_bag.index) context.cfgimpl_reset_cache(option_bag)