validator's function can have 1 arg, 2 args or 3 args
authorEmmanuel Garette <egarette@cadoles.com>
Wed, 18 Jan 2017 14:54:30 +0000 (15:54 +0100)
committerEmmanuel Garette <egarette@cadoles.com>
Wed, 18 Jan 2017 14:54:30 +0000 (15:54 +0100)
test/test_option_validator.py
tiramisu/error.py
tiramisu/option/baseoption.py
translations/fr/tiramisu.po

index 04ad30e..8058f83 100644 (file)
@@ -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',
index eae8955..8dd2dee 100644 (file)
@@ -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__()
 
index 57589eb..609b315 100644 (file)
@@ -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)
index 786031a..e0896fb 100644 (file)
@@ -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"