diff --git a/tiramisu/option/baseoption.py b/tiramisu/option/baseoption.py index 9e29c11..0a3b80d 100644 --- a/tiramisu/option/baseoption.py +++ b/tiramisu/option/baseoption.py @@ -84,6 +84,7 @@ def validate_callback(callback, callback_params, type_): raise ValueError(_('{0}_params must have an option' ' not a {0} for first argument' ).format(type_, type(option))) + option._set_has_dependency() if force_permissive not in [True, False]: # pragma: optional cover raise ValueError(_('{0}_params must have a boolean' ' not a {0} for second argument' @@ -133,6 +134,7 @@ class Base(StorageBase): if validator is not None: validate_callback(validator, validator_params, 'validator') self._set_validator(validator, validator_params) + self._set_has_dependency() if calc_properties != frozenset([]) and properties is not tuple(): # pragma: optional cover set_forbidden_properties = calc_properties & set(properties) if set_forbidden_properties != frozenset(): @@ -155,6 +157,13 @@ class Base(StorageBase): self.impl_set_callback(callback, callback_params, _init=True) self.commit(session) + def _set_has_dependency(self): + if not isinstance(self, SymLinkOption): + self._has_dependency = True + + def impl_has_dependency(self): + return getattr(self, '_has_dependency', False) + def impl_set_callback(self, callback, callback_params=None, _init=False): if callback is None and callback_params is not None: # pragma: optional cover raise ValueError(_("params defined for a callback function but " @@ -630,7 +639,7 @@ class Option(OnlyOption): name = self.impl_getname() return name - def _valid_consistencies(self, other_opts): + def _valid_consistencies(self, other_opts, init=True): if self._is_subdyn(): dynod = self._impl_getsubdyn() else: @@ -659,6 +668,9 @@ class Option(OnlyOption): if is_multi != opt.impl_is_multi(): # pragma: optional cover raise ConfigError(_('every options in consistency must be ' 'multi or none')) + if init: + #consistency could generate warnings or errors + opt._set_has_dependency() def impl_add_consistency(self, func, *other_opts, **params): """Add consistency means that value will be validate with other_opts @@ -689,6 +701,8 @@ class Option(OnlyOption): if err: self._del_consistency() raise err + #consistency could generate warnings or errors + self._set_has_dependency() def _valid_consistency(self, option, value, context, index, submulti_idx): if context is not undefined: @@ -892,6 +906,7 @@ def validate_requires_arg(multi, requires, name): inverse, transitive, same_action) else: ret_requires[action][option][1].append(expected) + option._set_has_dependency() # transform dict to tuple ret = [] for opt_requires in ret_requires.values(): @@ -915,6 +930,7 @@ class SymLinkOption(OnlyOption): super(Base, self).__init__(name, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, opt, session=session) + opt._set_has_dependency() self.commit(session) def __getattr__(self, name, context=undefined): diff --git a/tiramisu/option/optiondescription.py b/tiramisu/option/optiondescription.py index 81e0f47..99f27db 100644 --- a/tiramisu/option/optiondescription.py +++ b/tiramisu/option/optiondescription.py @@ -242,6 +242,8 @@ class OptionDescription(BaseOption, StorageOptionDescription): "in group {1}" ": this option is not a multi" "").format(child.impl_getname(), self.impl_getname())) + #length of master change slaves length + self._set_has_dependency() MasterSlaves(self.impl_getname(), children) else: # pragma: optional cover raise ValueError(_('group_type: {0}' diff --git a/tiramisu/storage/dictionary/option.py b/tiramisu/storage/dictionary/option.py index c6b4059..2fdf18a 100644 --- a/tiramisu/storage/dictionary/option.py +++ b/tiramisu/storage/dictionary/option.py @@ -53,6 +53,7 @@ class StorageBase(object): '_choice_values', '_choice_values_params', #other + '_has_dependency', '_state_master_slaves', '_state_val_call', '_state_requires',