diff --git a/tiramisu/autolib.py b/tiramisu/autolib.py index 6f5e37f..634eac1 100644 --- a/tiramisu/autolib.py +++ b/tiramisu/autolib.py @@ -219,13 +219,10 @@ def carry_out_calculation(option, context, callback, callback_params, else: kwargs[key] = couple[0] ret = calculate(callback, args, kwargs) - try: - if callback_params != {} and isinstance(ret, list) and \ - option.impl_is_master_slaves('slave'): - raise SlaveError(_("callback cannot return a list for a " - "slave option ({0})").format(path)) - except AttributeError: - pass + if not option.impl_is_optiondescription() and callback_params != {} and isinstance(ret, list) and \ + option.impl_is_master_slaves('slave'): + raise SlaveError(_("callback cannot return a list for a " + "slave option ({0})").format(path)) return ret diff --git a/tiramisu/option/baseoption.py b/tiramisu/option/baseoption.py index de86d2e..0f25e91 100644 --- a/tiramisu/option/baseoption.py +++ b/tiramisu/option/baseoption.py @@ -142,7 +142,10 @@ class Base(StorageBase): allow_empty_list) if multi is not False and default is None: default = [] - self.impl_validate(default, is_multi=is_multi) + try: + self.impl_validate(default, is_multi=is_multi) + except ContextError: + pass self._set_default_values(default, default_multi, is_multi) ##callback is False in optiondescription if callback is not False: @@ -429,8 +432,8 @@ class Option(OnlyOption): descr = context.cfgimpl_get_description() all_cons_vals = [] - for opt in all_cons_opts: - try: + try: + for opt in all_cons_opts: #get value if (isinstance(opt, DynSymLinkOption) and option._dyn == opt._dyn) or \ option == opt: @@ -453,27 +456,20 @@ class Option(OnlyOption): option == opt: all_cons_vals.append(opt_value) elif self.impl_is_submulti(): - try: - all_cons_vals.append(opt_value[index][submulti_index]) - except IndexError, err: - log.debug('indexerror in submulti opt in _launch_consistency: {0}'.format(err)) - #value is not already set, could be higher index - #so return if no value - return + all_cons_vals.append(opt_value[index][submulti_index]) else: - try: - all_cons_vals.append(opt_value[index]) - except IndexError, err: - #value is not already set, could be higher index - #so return if no value and not default_value - log.debug('indexerror in _launch_consistency: {0}'.format(err)) - return - except PropertiesOptionError as err: - log.debug('propertyerror in _launch_consistency: {0}'.format(err)) - if transitive: - raise err - else: - return + all_cons_vals.append(opt_value[index]) + except IndexError, err: + #value is not already set, could be higher index + #so return if no value and not default_value + log.debug('indexerror in _launch_consistency: {0}'.format(err)) + return + except PropertiesOptionError as err: + log.debug('propertyerror in _launch_consistency: {0}'.format(err)) + if transitive: + raise err + else: + return getattr(self, func)(all_cons_opts, all_cons_vals, warnings_only) def impl_validate(self, value, context=undefined, validate=True, @@ -610,16 +606,14 @@ class Option(OnlyOption): def impl_is_master_slaves(self, type_='both'): """FIXME """ - try: - self._master_slaves + master_slaves = getattr(self, '_master_slaves', None) + if master_slaves is not None: if type_ in ('both', 'master') and \ - self._master_slaves.is_master(self): + master_slaves.is_master(self): return True if type_ in ('both', 'slave') and \ - not self._master_slaves.is_master(self): + not master_slaves.is_master(self): return True - except: - pass return False def impl_get_master_slaves(self): @@ -820,14 +814,14 @@ def validate_requires_arg(multi, requires, name): unknown_keys, valid_keys)) # prepare all attributes - try: - option = require['option'] - expected = require['expected'] - action = require['action'] - except KeyError: # pragma: optional cover + if 'option' not in require or 'expected' not in require or \ + 'action' not in require: raise ValueError(_("malformed requirements for option: {0}" " require must have option, expected and" " action keys").format(name)) + option = require['option'] + expected = require['expected'] + action = require['action'] if action == 'force_store_value': # pragma: optional cover raise ValueError(_("malformed requirements for option: {0}" " action cannot be force_store_value" @@ -911,10 +905,7 @@ class SymLinkOption(OnlyOption): def _impl_setstate(self, descr): self._impl_setopt(descr.impl_get_opt_by_path(self._state_opt)) del(self._state_opt) - try: - del(self._stated) - except AttributeError: # pragma: optional cover - pass + del(self._stated) self._set_readonly(True) def impl_get_information(self, key, default=undefined): diff --git a/tiramisu/option/option.py b/tiramisu/option/option.py index f91a746..0ae7094 100644 --- a/tiramisu/option/option.py +++ b/tiramisu/option/option.py @@ -89,15 +89,12 @@ class ChoiceOption(Option): return values def _validate(self, value, context=undefined, current_opt=undefined): - try: - values = self.impl_get_values(context, current_opt=current_opt) - if not value in values: # pragma: optional cover - raise ValueError(_('value {0} is not permitted, ' - 'only {1} is allowed' - '').format(value, - values)) - except ContextError: # pragma: optional cover - log.debug('ChoiceOption validation, disabled because no context') + values = self.impl_get_values(context, current_opt=current_opt) + if not value in values: # pragma: optional cover + raise ValueError(_('value {0} is not permitted, ' + 'only {1} is allowed' + '').format(value, + values)) class BoolOption(Option): diff --git a/tiramisu/storage/dictionary/option.py b/tiramisu/storage/dictionary/option.py index 2c6172c..2a3785a 100644 --- a/tiramisu/storage/dictionary/option.py +++ b/tiramisu/storage/dictionary/option.py @@ -19,7 +19,7 @@ # ____________________________________________________________ from ...i18n import _ from ...setting import undefined -from ...error import ConfigError +from ...error import ConfigError, ContextError static_tuple = tuple() static_set = frozenset() @@ -102,6 +102,8 @@ class StorageBase(object): "for option {1}: {2}").format( str(default_multi), self.impl_getname(), str(err))) + except ContextError, err: + pass _setattr(self, '_default_multi', default_multi) # information