From e2159fd307bbd81eae2466592ea0aed83102f39c Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Wed, 18 Jan 2017 15:54:30 +0100 Subject: [PATCH] validator's function can have 1 arg, 2 args or 3 args --- test/test_option_validator.py | 17 +++++++++++++++++ tiramisu/error.py | 2 +- tiramisu/option/baseoption.py | 12 ++++++++---- translations/fr/tiramisu.po | 2 +- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/test/test_option_validator.py b/test/test_option_validator.py index 04ad30e..8058f83 100644 --- a/test/test_option_validator.py +++ b/test/test_option_validator.py @@ -212,6 +212,23 @@ def test_validator_params_value_values_kwargs_values(): cfg.ip_admin_eth0.netmask_admin_eth0[1] = 'val2' +def test_validator_params_value_values_kwargs2(): + ip_admin_eth0 = StrOption('ip_admin_eth0', "ip reseau autorise", multi=True) + netmask_admin_eth0 = StrOption('netmask_admin_eth0', + "masque du sous-reseau", + multi=True, + validator=value_values_index2, + validator_params={'': (['val1'],), 'index': ((ip_admin_eth0, False),)}) + interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) + interface1.impl_set_group_type(groups.master) + root = OptionDescription('root', '', [interface1]) + cfg = Config(root) + assert cfg.ip_admin_eth0.ip_admin_eth0 == [] + cfg.ip_admin_eth0.ip_admin_eth0.append('val') + cfg.ip_admin_eth0.netmask_admin_eth0[0] = 'val1' + cfg.ip_admin_eth0.ip_admin_eth0.append('val') + + def test_validator_params_value_values_kwargs_index(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip reseau autorise", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', diff --git a/tiramisu/error.py b/tiramisu/error.py index eae8955..8dd2dee 100644 --- a/tiramisu/error.py +++ b/tiramisu/error.py @@ -55,7 +55,7 @@ class PropertiesOptionError(AttributeError): else: prop_msg = _('properties') msg = display_list(msg) - return _('cannot access to {0} "{1}" because has {2} {3}').format(self._type, self._datas['opt'].impl_get_display_name(), prop_msg, msg) + return str(_('cannot access to {0} "{1}" because has {2} {3}').format(self._type, self._datas['opt'].impl_get_display_name(), prop_msg, msg)) else: return super(PropertiesOptionError, self).__str__() diff --git a/tiramisu/option/baseoption.py b/tiramisu/option/baseoption.py index 57589eb..609b315 100644 --- a/tiramisu/option/baseoption.py +++ b/tiramisu/option/baseoption.py @@ -175,13 +175,17 @@ class Base(StorageBase): defaults = [] args = func_args.args[0:len(func_args.args)-len(defaults)] if validator_params is not None: + kwargs = validator_params.keys() + if '' in kwargs: + kwargs.remove('') + for kwarg in kwargs: + if kwarg in args: + args = args[0:args.index(kwarg)] len_args = len(validator_params.get('', [])) - if len_args != 0 and len(args) <= len_args: + if len_args != 0 and len(args) >= len_args: args = args[0:len(args)-len_args] if len(args) >= 2: - if validator_params is not None and args[1] in validator_params: - args = [] - elif validator_params is not None and '' in validator_params: + if validator_params is not None and '' in validator_params: params = list(validator_params['']) params.append((self, False)) validator_params[''] = tuple(params) diff --git a/translations/fr/tiramisu.po b/translations/fr/tiramisu.po index 786031a..e0896fb 100644 --- a/translations/fr/tiramisu.po +++ b/translations/fr/tiramisu.po @@ -812,7 +812,7 @@ msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}" #: tiramisu/storage/dictionary/value.py:234 #: tiramisu/storage/sqlalchemy/option.py:666 msgid "information's item not found: {0}" -msgstr "aucune config spécifiée alors que c'est nécessaire" +msgstr "item '{0}' dans les informations non trouvée" #: tiramisu/storage/dictionary/option.py:413 msgid "use impl_get_opt_by_path only with root OptionDescription"