cannot add unvalaible consistency for an option
authorEmmanuel Garette <egarette@cadoles.com>
Sat, 25 Oct 2014 20:47:40 +0000 (22:47 +0200)
committerEmmanuel Garette <egarette@cadoles.com>
Sat, 25 Oct 2014 20:48:42 +0000 (22:48 +0200)
test/test_option_consistency.py
tiramisu/i18n.py
tiramisu/option/baseoption.py
translations/fr/tiramisu.po
translations/tiramisu.pot

index 5a81e56..4a39d7e 100644 (file)
@@ -20,6 +20,13 @@ def test_consistency():
     raises(ConfigError, "a.impl_add_consistency('not_equal', 'a')")
 
 
+def test_consistency_not_exists():
+    a = IntOption('a', '')
+    b = IntOption('b', '')
+    od = OptionDescription('od', '', [a, b])
+    raises(ConfigError, "a.impl_add_consistency('not_exists', b)")
+
+
 def test_consistency_warnings_only():
     a = IntOption('a', '')
     b = IntOption('b', '')
index 3bc6c17..340064e 100644 (file)
@@ -49,5 +49,4 @@ gettext.translation(APP_NAME, fallback=True)
 
 t = gettext.translation(APP_NAME, fallback=True)
 
-def _(msg):
-    return t.gettext(msg)
+_ = t.gettext
index 3c3f3af..2a161e0 100644 (file)
@@ -147,7 +147,7 @@ class Base(StorageBase):
                                    self.impl_getname()))
         if self.impl_get_callback()[0] is not None:
             raise ConfigError(_("a callback is already set for option {0}, "
-                                "cannot set another one's".format(self.impl_getname())))
+                                "cannot set another one's").format(self.impl_getname()))
         self._validate_callback(callback, callback_params)
         if callback is not None:
             validate_callback(callback, callback_params, 'callback')
@@ -629,7 +629,7 @@ class Option(OnlyOption):
         :param params: extra params (only warnings_only are allowed)
         """
         if self.impl_is_readonly():  # pragma: optional cover
-            raise AttributeError(_("'{0}' ({1}) cannont add consistency, option is"
+            raise AttributeError(_("'{0}' ({1}) cannot add consistency, option is"
                                    " read-only").format(
                                        self.__class__.__name__,
                                        self.impl_getname()))
@@ -658,6 +658,8 @@ class Option(OnlyOption):
                 raise ConfigError(_('every options in consistency must be '
                                     'multi or none'))
         func = '_cons_{0}'.format(func)
+        if func not in dir(self):
+            raise ConfigError(_('consistency {0} not available for this option'))
         all_cons_opts = tuple([self] + list(other_opts))
         value = self.impl_getdefault()
         if value is not None:
index eb14d72..d882812 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Tiramisu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-29 19:01+CET\n"
+"POT-Creation-Date: 2014-10-25 22:43+CEST\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
 "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@@ -14,115 +14,134 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
-#: tiramisu/autolib.py:165
+#: tiramisu/autolib.py:176
 msgid ""
 "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
 msgstr ""
 "impossible d'effectuer le calcul, l'option {0} a les propriétés : {1} pour : "
 "{2}"
 
-#: tiramisu/config.py:51
+#: tiramisu/config.py:58
 msgid "descr must be an optiondescription, not {0}"
 msgstr "descr doit être une optiondescription pas un {0}"
 
-#: tiramisu/config.py:126
+#: tiramisu/config.py:137
 msgid "unknown group_type: {0}"
 msgstr "group_type inconnu: {0}"
 
-#: tiramisu/config.py:163 tiramisu/setting.py:334 tiramisu/value.py:55
-#: tiramisu/value.py:500
+#: tiramisu/config.py:176 tiramisu/setting.py:321 tiramisu/value.py:54
+#: tiramisu/value.py:541
 msgid "the context does not exist anymore"
 msgstr "le context n'existe plus"
 
-#: tiramisu/config.py:168
+#: tiramisu/config.py:181
 msgid "no option description found for this config (may be GroupConfig)"
 msgstr ""
 "pas d'option description trouvé pour cette config (peut être un GroupConfig)"
 
-#: tiramisu/config.py:194
+#: tiramisu/config.py:209
 msgid "can't assign to an OptionDescription"
 msgstr "ne peut pas attribuer une valeur à une OptionDescription"
 
-#: tiramisu/config.py:324
+#: tiramisu/config.py:335
 msgid "unknown type_ type {0}for _find"
 msgstr "type_ type {0} pour _find inconnu"
 
-#: tiramisu/config.py:363
+#: tiramisu/config.py:370
 msgid "no option found in config with these criteria"
 msgstr "aucune option trouvée dans la config avec ces critères"
 
-#: tiramisu/config.py:413
+#: tiramisu/config.py:420
 msgid "make_dict can't filtering with value without option"
 msgstr "make_dict ne peut filtrer sur une valeur mais sans option"
 
-#: tiramisu/config.py:434
+#: tiramisu/config.py:439
 msgid "unexpected path {0}, should start with {1}"
 msgstr "chemin imprévu {0}, devrait commencer par {1}"
 
-#: tiramisu/config.py:491
+#: tiramisu/config.py:507
 msgid "opt in getowner must be an option not {0}"
 msgstr "opt dans getowner doit être une option pas {0}"
 
-#: tiramisu/config.py:535
+#: tiramisu/config.py:552
 msgid "cannot serialize Config with MetaConfig"
 msgstr "impossible de sérialiser une Config avec une MetaConfig"
 
-#: tiramisu/config.py:549
+#: tiramisu/config.py:566
 msgid "this storage is not serialisable, could be a none persistent storage"
 msgstr "ce storage n'est sérialisable, devrait être une storage non persistant"
 
-#: tiramisu/config.py:612
+#: tiramisu/config.py:629
 msgid "metaconfig's children must be a list"
 msgstr "enfants d'une metaconfig doit être une liste"
 
-#: tiramisu/config.py:706
+#: tiramisu/config.py:723
 msgid "metaconfig's children should be config, not {0}"
 msgstr "enfants d'une metaconfig doit être une config, pas {0}"
 
-#: tiramisu/config.py:710
+#: tiramisu/config.py:727
 msgid "child has already a metaconfig's"
 msgstr "enfant a déjà une metaconfig"
 
-#: tiramisu/config.py:714
+#: tiramisu/config.py:731
 msgid "all config in metaconfig must have the same optiondescription"
 msgstr ""
 "toutes les configs d'une metaconfig doivent avoir la même optiondescription"
 
-#: tiramisu/option.py:66
-msgid "invalid name: {0} for option"
-msgstr "nom invalide : {0} pour l'option"
+#: tiramisu/option/baseoption.py:56
+msgid "{0} must be a function"
+msgstr "{0} doit être une fonction"
 
-#: tiramisu/option.py:75
-msgid "invalid properties type {0} for {1}, must be a tuple"
-msgstr "type des properties invalide {0} pour {1}, doit être un tuple"
+#: tiramisu/option/baseoption.py:59
+msgid "{0}_params must be a dict"
+msgstr "{0}_params doit être un dict"
 
-#: tiramisu/option.py:113
-msgid "'{0}' ({1}) object attribute '{2}' is read-only"
-msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
+#: tiramisu/option/baseoption.py:62
+msgid "{0}_params with key {1} mustn't have length different to 1"
+msgstr ""
+"{0}_params avec la clef {1} ne doit pas avoir une longueur différent de 1"
 
-#: tiramisu/option.py:140 tiramisu/value.py:410
-msgid "information's item not found: {0}"
-msgstr "aucune config spécifiée alors que c'est nécessaire"
+#: tiramisu/option/baseoption.py:66
+msgid "{0}_params must be tuple for key \"{1}\""
+msgstr "{0}_params doit être un tuple pour la clef \"{1}\""
 
-#: tiramisu/option.py:202
-msgid "cannot serialize Option, only in OptionDescription"
-msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
+#: tiramisu/option/baseoption.py:72
+msgid "{0}_params with length of tuple as 1 must only have None as first value"
+msgstr ""
+"{0}_params avec un tuple de longueur 1 doit seulement avoir None comme "
+"première valeur"
+
+#: tiramisu/option/baseoption.py:76
+msgid "{0}_params must only have 1 or 2 as length"
+msgstr "{0}_params doit seulement avoir une longueur de 1 ou 2"
+
+#: tiramisu/option/baseoption.py:81
+msgid "validator not support tuple"
+msgstr "validator n'accepte pas de tuple"
+
+#: tiramisu/option/baseoption.py:84
+msgid "{0}_params must have an option not a {0} for first argument"
+msgstr "{0}_params doit avoir une option pas un {0} pour premier argument"
+
+#: tiramisu/option/baseoption.py:88
+msgid "{0}_params must have a boolean not a {0} for second argument"
+msgstr "{0}_params doit avoir un booléen pas un {0} pour second argument"
 
-#: tiramisu/option.py:305
+#: tiramisu/option/baseoption.py:104
+msgid "invalid name: {0} for option"
+msgstr "nom invalide : {0} pour l'option"
+
+#: tiramisu/option/baseoption.py:112
 msgid "a default_multi is set whereas multi is False in option: {0}"
 msgstr ""
 "une default_multi est renseignée alors que multi est False dans l'option : "
 "{0}"
 
-#: tiramisu/option.py:311
-msgid "invalid default_multi value {0} for option {1}: {2}"
-msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}"
-
-#: tiramisu/option.py:316
-msgid "default value not allowed if option: {0} is calculated"
-msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée"
+#: tiramisu/option/baseoption.py:123
+msgid "invalid properties type {0} for {1}, must be a tuple"
+msgstr "type des properties invalide {0} pour {1}, doit être un tuple"
 
-#: tiramisu/option.py:319
+#: tiramisu/option/baseoption.py:144
 msgid ""
 "params defined for a callback function but no callback defined yet for "
 "option {0}"
@@ -130,417 +149,472 @@ msgstr ""
 "params définis pour une fonction callback mais par de callback encore "
 "définis pour l'option {0}"
 
-#: tiramisu/option.py:424 tiramisu/option.py:454
+#: tiramisu/option/baseoption.py:149
+msgid "a callback is already set for option {0}, cannot set another one's"
+msgstr ""
+"un callback est en lecture seul pour l'option {0}, ne peut en placer une "
+"autre"
+
+#: tiramisu/option/baseoption.py:276
+msgid "cannot serialize Option, only in OptionDescription"
+msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
+
+#: tiramisu/option/baseoption.py:354
+msgid "'{0}' ({1}) object attribute '{2}' is read-only"
+msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
+
+#: tiramisu/option/baseoption.py:509 tiramisu/option/baseoption.py:552
 msgid "invalid value for option {0}: {1}"
 msgstr "valeur invalide pour l'option {0} : {1}"
 
-#: tiramisu/option.py:448
+#: tiramisu/option/baseoption.py:522
+msgid "do_validation for {0}: error in value"
+msgstr "do_validation for {0} : erreur dans un la valeur"
+
+#: tiramisu/option/baseoption.py:528
+msgid "do_validation for {0}: warning in value"
+msgstr "do_validation for {0} : warning dans un la valeur"
+
+#: tiramisu/option/baseoption.py:538
+msgid "do_validation for {0}: error in consistency"
+msgstr "do_validation for {0} : erreur dans un test de consistance"
+
+#: tiramisu/option/baseoption.py:542
+msgid "do_validation for {0}: warning in consistency"
+msgstr "do_validation for {0} : warning dans un test de consistance"
+
+#: tiramisu/option/baseoption.py:546
 msgid "warning on the value of the option {0}: {1}"
 msgstr "avertissement sur la valeur de l'option {0} : {1}"
 
-#: tiramisu/option.py:465
+#: tiramisu/option/baseoption.py:564 tiramisu/option/baseoption.py:573
 msgid "invalid value {0} for option {1} which must be a list"
 msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste"
 
-#: tiramisu/option.py:523
+#: tiramisu/option/baseoption.py:579
+msgid "invalid value {0} for option {1} which must be a list of list"
+msgstr ""
+"valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste"
+
+#: tiramisu/option/baseoption.py:632
+#, fuzzy
+msgid "'{0}' ({1}) cannot add consistency, option is read-only"
+msgstr ""
+"'{0}' ({1}) ne peut ajouter de consistency, l'option est en lecture seul"
+
+#: tiramisu/option/baseoption.py:643
 msgid "consistency must be set with an option"
 msgstr "consistency doit être configuré avec une option"
 
-#: tiramisu/option.py:525
+#: tiramisu/option/baseoption.py:646 tiramisu/option/baseoption.py:653
+msgid ""
+"almost one option in consistency is in a dynoptiondescription but not all"
+msgstr ""
+"au moins une option dans le test de consistance est dans une "
+"dynoptiondescription mais pas toutes"
+
+#: tiramisu/option/baseoption.py:649
+msgid "option in consistency must be in same dynoptiondescription"
+msgstr ""
+"option dans une consistency doit être dans le même dynoptiondescription"
+
+#: tiramisu/option/baseoption.py:656
 msgid "cannot add consistency with itself"
 msgstr "ne peut ajouter une consistency avec lui même"
 
-#: tiramisu/option.py:527
+#: tiramisu/option/baseoption.py:658
 msgid "every options in consistency must be multi or none"
 msgstr ""
 "toutes les options d'une consistency doivent être multi ou ne pas l'être"
 
-#: tiramisu/option.py:548
+#: tiramisu/option/baseoption.py:662
+msgid "consistency {0} not available for this option"
+msgstr "consistency {0} non valable pour cette option"
+
+#: tiramisu/option/baseoption.py:689
 msgid "same value for {0} and {1}, should be different"
 msgstr "même valeur pour {0} et {1}, devrait être différent"
 
-#: tiramisu/option.py:550
+#: tiramisu/option/baseoption.py:691
 msgid "same value for {0} and {1}, must be different"
 msgstr "même valeur pour {0} et {1}, doit être différent"
 
-#: tiramisu/option.py:644
-msgid "values must be a tuple for {0}"
-msgstr "values doit être un tuple pour {0}"
+#: tiramisu/option/baseoption.py:748
+msgid "default value not allowed if option: {0} is calculated"
+msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée"
+
+#: tiramisu/option/baseoption.py:770
+msgid "malformed requirements type for option: {0}, must be a dict"
+msgstr ""
+"type requirements malformé pour l'option : {0}, doit être un dictionnaire"
+
+#: tiramisu/option/baseoption.py:776
+msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
+msgstr ""
+"requirements mal formés pour l'option : {0} clefs inconnues {1}, doit "
+"seulement avoir {2}"
+
+#: tiramisu/option/baseoption.py:787
+msgid ""
+"malformed requirements for option: {0} require must have option, expected "
+"and action keys"
+msgstr ""
+"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
+"option, expected et action"
+
+#: tiramisu/option/baseoption.py:791
+msgid ""
+"malformed requirements for option: {0} action cannot be force_store_value"
+msgstr ""
+"requirements mal formés pour l'option : {0} action ne peut pas être "
+"force_store_value"
+
+#: tiramisu/option/baseoption.py:796
+msgid "malformed requirements for option: {0} inverse must be boolean"
+msgstr ""
+"requirements mal formés pour l'option : {0} inverse doit être un booléen"
+
+#: tiramisu/option/baseoption.py:800
+msgid "malformed requirements for option: {0} transitive must be boolean"
+msgstr ""
+"requirements mal formés pour l'option : {0} transitive doit être booléen"
+
+#: tiramisu/option/baseoption.py:804
+msgid "malformed requirements for option: {0} same_action must be boolean"
+msgstr ""
+"requirements mal formés pour l'option : {0} same_action doit être un booléen"
+
+#: tiramisu/option/baseoption.py:808
+msgid "malformed requirements must be an option in option {0}"
+msgstr "requirements mal formés doit être une option dans l'option {0}"
+
+#: tiramisu/option/baseoption.py:811
+msgid "malformed requirements option {0} must not be a multi for {1}"
+msgstr ""
+"requirements mal formés pour l'option {0} ne doit pas être une multi pour {1}"
+
+#: tiramisu/option/baseoption.py:818
+msgid ""
+"malformed requirements second argument must be valid for option {0}: {1}"
+msgstr ""
+"requirements mal formés deuxième argument doit être valide pour l'option "
+"{0} : {1}"
+
+#: tiramisu/option/baseoption.py:823
+msgid "inconsistency in action types for option: {0} action: {1}"
+msgstr "incohérence dans les types action pour l'option : {0} action {1}"
+
+#: tiramisu/option/baseoption.py:851
+msgid "malformed symlinkoption must be an option for symlink {0}"
+msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
+
+#: tiramisu/option/masterslave.py:38
+msgid "master group {0} shall not have a symlinkoption"
+msgstr "groupe maître {0} ne doit pas avoir de symlinkoption"
+
+#: tiramisu/option/masterslave.py:41
+msgid "master group {0} shall not have a subgroup"
+msgstr "groupe maître {0} ne doit pas avoir de sous-groupe"
+
+#: tiramisu/option/masterslave.py:44
+msgid "not allowed option {0} in group {1}: this option is not a multi"
+msgstr ""
+"option non autorisée {0} dans le groupe {1} : cette option n'est pas une "
+"multi"
+
+#: tiramisu/option/masterslave.py:53
+msgid "master group with wrong master name for {0}"
+msgstr "le groupe maître avec un nom de maître érroné pour {0}"
+
+#: tiramisu/option/masterslave.py:63
+msgid "callback of master's option shall not refered a slave's ones"
+msgstr ""
+"callback d'une variable maitre ne devrait pas référencer des variables "
+"esclaves"
+
+#: tiramisu/option/masterslave.py:198
+msgid "invalid len for the slave: {0} which has {1} as master"
+msgstr "longueur invalide pour une esclave : {0} qui a {1} comme maître"
+
+#: tiramisu/option/option.py:53
+msgid "values is not a function, so values_params must be None"
+msgstr "values n'est pas une fonction, donc values_params doit être None"
 
-#: tiramisu/option.py:647
-msgid "open_values must be a boolean for {0}"
-msgstr "open_values doit être un booléen pour {0}"
+#: tiramisu/option/option.py:55
+msgid "values must be a tuple or a function for {0}"
+msgstr "values doit être un tuple ou une fonction pour {0}"
 
-#: tiramisu/option.py:669
+#: tiramisu/option/option.py:81
+msgid "calculated values for {0} is not a list"
+msgstr "valeurs calculées for {0} n'est pas une liste"
+
+#: tiramisu/option/option.py:89
 msgid "value {0} is not permitted, only {1} is allowed"
 msgstr "valeur {0} n'est pas permis, seules {1} sont autorisées"
 
-#: tiramisu/option.py:681
+#: tiramisu/option/option.py:103
 msgid "invalid boolean"
 msgstr "booléen invalide"
 
-#: tiramisu/option.py:691
+#: tiramisu/option/option.py:112
 msgid "invalid integer"
 msgstr "nombre invalide"
 
-#: tiramisu/option.py:701
+#: tiramisu/option/option.py:121
 msgid "invalid float"
 msgstr "invalide nombre flottan"
 
-#: tiramisu/option.py:711
+#: tiramisu/option/option.py:130
 msgid "invalid string"
 msgstr "invalide caractère"
 
-#: tiramisu/option.py:728
+#: tiramisu/option/option.py:146
 msgid "invalid unicode"
 msgstr "invalide unicode"
 
-#: tiramisu/option.py:740
-msgid "malformed symlinkoption must be an option for symlink {0}"
-msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
-
-#: tiramisu/option.py:791 tiramisu/option.py:794 tiramisu/option.py:799
+#: tiramisu/option/option.py:178 tiramisu/option/option.py:181
+#: tiramisu/option/option.py:186
 msgid "invalid IP"
 msgstr "adresse IP invalide"
 
-#: tiramisu/option.py:805
+#: tiramisu/option/option.py:192
 msgid "IP is in reserved class"
 msgstr "l'adresse IP est dans une plage d'adresse réservée"
 
-#: tiramisu/option.py:807
+#: tiramisu/option/option.py:194
 msgid "invalid IP, mustn't be in reserved class"
 msgstr "adresse IP invalide, ne doit pas être dans une classe réservée"
 
-#: tiramisu/option.py:811
+#: tiramisu/option/option.py:198
 msgid "IP is not in private class"
 msgstr "l'adresse IP n'est pas dans une plage d'adressage privée"
 
-#: tiramisu/option.py:813
+#: tiramisu/option/option.py:200
 msgid "invalid IP, must be in private class"
 msgstr "adresse IP invalide, doit être dans la classe privée"
 
-#: tiramisu/option.py:818 tiramisu/option.py:993
+#: tiramisu/option/option.py:205 tiramisu/option/option.py:377
 msgid "invalid len for vals"
 msgstr "longueur invalide pour vals"
 
-#: tiramisu/option.py:824
+#: tiramisu/option/option.py:211
 msgid "IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
 msgstr "IP {0} ({1}) pas dans le réseau {2} ({3}) avec le masque {4} ({5})"
 
-#: tiramisu/option.py:827
+#: tiramisu/option/option.py:214
 msgid "invalid IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
 msgstr ""
 "IP invalide {0} ({1}) pas dans le réseau {2} ({3}) avec le masque {4} ({5})"
 
-#: tiramisu/option.py:868
+#: tiramisu/option/option.py:254
 msgid "inconsistency in allowed range"
 msgstr "inconsistence dans la plage autorisée"
 
-#: tiramisu/option.py:873
+#: tiramisu/option/option.py:259
 msgid "max value is empty"
 msgstr "la valeur maximum est vide"
 
-#: tiramisu/option.py:890
+#: tiramisu/option/option.py:277
 msgid "invalid port, range must have two values only"
 msgstr "port invalide, une plage doit avoir deux valeurs seulement"
 
-#: tiramisu/option.py:893
+#: tiramisu/option/option.py:280
 msgid "invalid port, first port in range must be smaller than the second one"
 msgstr ""
 "port invalide, le premier port d'une plage doit être plus petit que le second"
 
-#: tiramisu/option.py:902
+#: tiramisu/option/option.py:289
 msgid "invalid port"
 msgstr "port invalide"
 
-#: tiramisu/option.py:904
+#: tiramisu/option/option.py:291
 msgid "invalid port, must be an between {0} and {1}"
 msgstr "port invalide, port doit être entre {0} et {1}"
 
-#: tiramisu/option.py:918
+#: tiramisu/option/option.py:304
 msgid "invalid network address"
 msgstr "adresse réseau invalide"
 
-#: tiramisu/option.py:924
+#: tiramisu/option/option.py:310
 msgid "network address is in reserved class"
 msgstr "l'adresse réseau est pas dans une plage d'adresse réservée"
 
-#: tiramisu/option.py:926
+#: tiramisu/option/option.py:312
 msgid "invalid network address, mustn't be in reserved class"
 msgstr "adresse réseau invalide, ne doit pas être dans la classe réservée"
 
-#: tiramisu/option.py:939
+#: tiramisu/option/option.py:324
 msgid "invalid netmask address"
 msgstr "masque de sous-réseau invalide"
 
-#: tiramisu/option.py:956
+#: tiramisu/option/option.py:341
 msgid "invalid len for opts"
 msgstr "longueur invalide pour opts"
 
-#: tiramisu/option.py:970
+#: tiramisu/option/option.py:355
 msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
 msgstr "IP invalide {0} ({1}) avec masque {2}, cette IP est un réseau"
 
-#: tiramisu/option.py:975
+#: tiramisu/option/option.py:360
 msgid "invalid network {0} ({1}) with netmask {2}"
 msgstr "réseau invalide {0} ({1}) avec masque {2}"
 
-#: tiramisu/option.py:989
+#: tiramisu/option/option.py:373
 msgid "invalid broadcast address"
 msgstr "adresse de broadcast invalide"
 
-#: tiramisu/option.py:998
+#: tiramisu/option/option.py:382
 msgid ""
 "invalid broadcast {0} ({1}) with network {2} ({3}) and netmask {4} ({5})"
 msgstr ""
 "Broadcast invalide {0} ({1}) avec le réseau {2} ({3}) et le masque {4} ({5})"
 
-#: tiramisu/option.py:1020
+#: tiramisu/option/option.py:403
 msgid "unknown type_ {0} for hostname"
 msgstr "type_ inconnu {0} pour le nom d'hôte"
 
-#: tiramisu/option.py:1023
+#: tiramisu/option/option.py:406
 msgid "allow_ip must be a boolean"
 msgstr "allow_ip doit être un booléen"
 
-#: tiramisu/option.py:1025
+#: tiramisu/option/option.py:408
 msgid "allow_without_dot must be a boolean"
 msgstr "allow_without_dot doit être un booléen"
 
-#: tiramisu/option.py:1069
+#: tiramisu/option/option.py:454
 msgid "invalid domainname, must have dot"
 msgstr "nom de domaine invalide, doit avoir un point"
 
-#: tiramisu/option.py:1071
+#: tiramisu/option/option.py:456
 msgid "invalid domainname's length (max 255)"
 msgstr "longueur du nom de domaine invalide (maximum {1})"
 
-#: tiramisu/option.py:1073
+#: tiramisu/option/option.py:458
 msgid "invalid domainname's length (min 2)"
 msgstr "longueur du nom de domaine invalide (minimum 2)"
 
-#: tiramisu/option.py:1075
+#: tiramisu/option/option.py:460
 msgid "invalid domainname"
 msgstr "nom de domaine invalide"
 
-#: tiramisu/option.py:1088
+#: tiramisu/option/option.py:472
 msgid "invalid email address, must contains one @"
 msgstr "adresse email invalide, doit contenir un @"
 
-#: tiramisu/option.py:1091
+#: tiramisu/option/option.py:475
 msgid "invalid username in email address"
 msgstr "nom d'utilisateur invalide dans une adresse email"
 
-#: tiramisu/option.py:1104
+#: tiramisu/option/option.py:487
 msgid "invalid url, must start with http:// or https://"
 msgstr "URL invalide, doit démarrer avec http:// ou https://"
 
-#: tiramisu/option.py:1123
+#: tiramisu/option/option.py:506
 msgid "invalid url, port must be an between 0 and 65536"
 msgstr "URL invalide, port doit être entre 0 et 65536"
 
-#: tiramisu/option.py:1129
+#: tiramisu/option/option.py:512
 msgid "invalid url, must ends with filename"
 msgstr "URL invalide, doit finir avec un nom de fichier"
 
-#: tiramisu/option.py:1141
+#: tiramisu/option/option.py:523
 msgid "invalid username"
 msgstr "utilisateur invalide"
 
-#: tiramisu/option.py:1152
+#: tiramisu/option/option.py:533
 msgid "invalid filename"
 msgstr "nom de fichier invalide"
 
-#: tiramisu/option.py:1179
+#: tiramisu/option/optiondescription.py:68
 msgid "duplicate option name: {0}"
 msgstr "nom de l'option dupliqué : {0}"
 
-#: tiramisu/option.py:1197
-msgid "unknown Option {0} in OptionDescription {1}"
-msgstr "Option {0} inconnue pour l'OptionDescription {1}"
-
-#: tiramisu/option.py:1248
-msgid "duplicate option: {0}"
-msgstr "option dupliquée : {0}"
+#: tiramisu/option/optiondescription.py:73
+msgid "option must not start as dynoptiondescription"
+msgstr "option ne doit pas commencé pareil qu'un dynoptiondescription"
 
-#: tiramisu/option.py:1279
+#: tiramisu/option/optiondescription.py:119
 msgid "consistency with option {0} which is not in Config"
 msgstr "consistency avec l'option {0} qui n'est pas dans une Config"
 
-#: tiramisu/option.py:1287
-msgid "no option for path {0}"
-msgstr "pas d'option pour le chemin {0}"
-
-#: tiramisu/option.py:1293
-msgid "no option {0} found"
-msgstr "pas d'option {0} trouvée"
+#: tiramisu/option/optiondescription.py:139
+msgid "duplicate option: {0}"
+msgstr "option dupliquée : {0}"
 
-#: tiramisu/option.py:1303
+#: tiramisu/option/optiondescription.py:155
 msgid "cannot change group_type if already set (old {0}, new {1})"
 msgstr "ne peut changer group_type si déjà spécifié (ancien {0}, nouveau {1})"
 
-#: tiramisu/option.py:1315
-msgid "master group {0} shall not have a subgroup"
-msgstr "groupe maître {0} ne doit pas avoir de sous-groupe"
-
-#: tiramisu/option.py:1318
-msgid "master group {0} shall not have a symlinkoption"
-msgstr "groupe maître {0} ne doit pas avoir de symlinkoption"
-
-#: tiramisu/option.py:1321
-msgid "not allowed option {0} in group {1}: this option is not a multi"
-msgstr ""
-"option non autorisée {0} dans le groupe {1} : cette option n'est pas une "
-"multi"
-
-#: tiramisu/option.py:1331
-msgid "master group with wrong master name for {0}"
-msgstr "le groupe maître avec un nom de maître érroné pour {0}"
-
-#: tiramisu/option.py:1339
-msgid "callback of master's option shall not refered a slave's ones"
-msgstr ""
-"callback d'une variable maitre ne devrait pas référencer des variables "
-"esclaves"
-
-#: tiramisu/option.py:1347
+#: tiramisu/option/optiondescription.py:163
 msgid "group_type: {0} not allowed"
 msgstr "group_type : {0} non autorisé"
 
-#: tiramisu/option.py:1444
-msgid "malformed requirements type for option: {0}, must be a dict"
-msgstr ""
-"type requirements malformé pour l'option : {0}, doit être un dictionnaire"
-
-#: tiramisu/option.py:1461
-msgid ""
-"malformed requirements for option: {0} require must have option, expected "
-"and action keys"
-msgstr ""
-"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
-"option, expected et action"
-
-#: tiramisu/option.py:1465
-msgid ""
-"malformed requirements for option: {0} action cannot be force_store_value"
-msgstr ""
-"requirements mal formés pour l'option : {0} action ne peut pas être "
-"force_store_value"
-
-#: tiramisu/option.py:1470
-msgid "malformed requirements for option: {0} inverse must be boolean"
-msgstr ""
-"requirements mal formés pour l'option : {0} inverse doit être un booléen"
+#: tiramisu/option/optiondescription.py:260
+msgid "DynOptionDescription callback return not uniq value"
+msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique"
 
-#: tiramisu/option.py:1474
-msgid "malformed requirements for option: {0} transitive must be boolean"
-msgstr ""
-"requirements mal formés pour l'option : {0} transitive doit être booléen"
+#: tiramisu/option/optiondescription.py:263
+msgid "invalid suffix: {0} for option"
+msgstr "suffix invalide : {0} pour l'option"
 
-#: tiramisu/option.py:1478
-msgid "malformed requirements for option: {0} same_action must be boolean"
+#: tiramisu/option/optiondescription.py:316
+msgid "cannot set optiondescription in an dynoptiondescription"
 msgstr ""
-"requirements mal formés pour l'option : {0} same_action doit être un booléen"
+"impossible de mettre une optiondescription dans un dynoptiondescription"
 
-#: tiramisu/option.py:1482
-msgid "malformed requirements must be an option in option {0}"
-msgstr "requirements mal formés doit être une option dans l'option {0}"
+#: tiramisu/option/optiondescription.py:321
+msgid "cannot set symlinkoption in an dynoptiondescription"
+msgstr "impossible de placer un symlinkoption dans un dynoptiondescription"
 
-#: tiramisu/option.py:1485
-msgid "malformed requirements option {0} must not be a multi"
-msgstr "requirements mal formés l'option {0} ne doit pas être une multi"
+#: tiramisu/option/optiondescription.py:329
+msgid "callback is mandatory for dynoptiondescription"
+msgstr "callback est obligatoire pour un dynoptiondescription"
 
-#: tiramisu/option.py:1491
-msgid ""
-"malformed requirements second argument must be valid for option {0}: {1}"
-msgstr ""
-"requirements mal formés deuxième argument doit être valide pour l'option "
-"{0} : {1}"
-
-#: tiramisu/option.py:1496
-msgid "inconsistency in action types for option: {0} action: {1}"
-msgstr "incohérence dans les types action pour l'option : {0} action {1}"
-
-#: tiramisu/option.py:1521
-msgid "{0} must be a function"
-msgstr "{0} doit être une fonction"
-
-#: tiramisu/option.py:1524
-msgid "{0}_params must be a dict"
-msgstr "{0}_params doit être un dict"
-
-#: tiramisu/option.py:1527
-msgid "{0}_params with key {1} mustn't have length different to 1"
-msgstr ""
-"{0}_params avec la clef {1} ne doit pas avoir une longueur différent de 1"
-
-#: tiramisu/option.py:1531
-msgid "{0}_params must be tuple for key \"{1}\""
-msgstr "{0}_params doit être un tuple pour la clef \"{1}\""
-
-#: tiramisu/option.py:1537
-msgid "{0}_params with length of tuple as 1 must only have None as first value"
-msgstr ""
-"{0}_params avec un tuple de longueur 1 doit seulement avoir None comme "
-"première valeur"
-
-#: tiramisu/option.py:1541
-msgid "{0}_params must only have 1 or 2 as length"
-msgstr "{0}_params doit seulement avoir une longueur de 1 ou 2"
-
-#: tiramisu/option.py:1546
-msgid "validator not support tuple"
-msgstr "validator n'accepte pas de tuple"
-
-#: tiramisu/option.py:1549
-msgid "{0}_params must have an option not a {0} for first argument"
-msgstr "{0}_params doit avoir une option pas un {0} pour premier argument"
-
-#: tiramisu/option.py:1553
-msgid "{0}_params must have a boolean not a {0} for second argument"
-msgstr "{0}_params doit avoir un booléen pas un {0} pour second argument"
-
-#: tiramisu/setting.py:111
+#: tiramisu/setting.py:121
 msgid "can't rebind {0}"
 msgstr "ne peut redéfinir ({0})"
 
-#: tiramisu/setting.py:116
+#: tiramisu/setting.py:126
 msgid "can't unbind {0}"
 msgstr "ne peut supprimer ({0})"
 
-#: tiramisu/setting.py:267
+#: tiramisu/setting.py:255
 msgid "cannot append {0} property for option {1}: this property is calculated"
 msgstr ""
 "ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est "
 "calculée"
 
-#: tiramisu/setting.py:358
+#: tiramisu/setting.py:345
 msgid "opt and all_properties must not be set together in reset"
 msgstr "opt et all_properties ne doit pas être renseigné ensemble dans reset"
 
-#: tiramisu/setting.py:376
+#: tiramisu/setting.py:363
 msgid "if opt is not None, path should not be None in _getproperties"
 msgstr ""
 "si opt n'est pas None, path devrait ne pas être à None dans _getproperties"
 
-#: tiramisu/setting.py:486
+#: tiramisu/setting.py:407
+msgid "cannot add those properties: {0}"
+msgstr "ne peut pas ajouter ces propriétés : {0}"
+
+#: tiramisu/setting.py:469
 msgid "cannot change the value for option {0} this option is frozen"
 msgstr ""
 "ne peut modifier la valeur de l'option {0} cette option n'est pas modifiable"
 
-#: tiramisu/setting.py:492
+#: tiramisu/setting.py:475
 msgid "trying to access to an option named: {0} with properties {1}"
 msgstr "tentative d'accès à une option nommée : {0} avec les propriétés {1}"
 
-#: tiramisu/setting.py:510
+#: tiramisu/setting.py:493
 msgid "permissive must be a tuple"
 msgstr "permissive doit être un tuple"
 
-#: tiramisu/setting.py:517 tiramisu/value.py:349
+#: tiramisu/setting.py:500 tiramisu/value.py:370
 msgid "invalid generic owner {0}"
 msgstr "invalide owner générique {0}"
 
-#: tiramisu/setting.py:605
+#: tiramisu/setting.py:588
 msgid ""
 "malformed requirements imbrication detected for option: '{0}' with "
 "requirement on: '{1}'"
@@ -548,80 +622,129 @@ msgstr ""
 "imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
 "requirement sur : '{1}'"
 
-#: tiramisu/setting.py:616
+#: tiramisu/setting.py:599
 msgid "option '{0}' has requirement's property error: {1} {2}"
 msgstr "l'option '{0}' a une erreur de propriété pour le requirement : {1} {2}"
 
-#: tiramisu/storage/__init__.py:47
+#: tiramisu/storage/__init__.py:48
 msgid "storage_type is already set, cannot rebind it"
 msgstr "storage_type est déjà défini, impossible de le redéfinir"
 
-#: tiramisu/storage/__init__.py:81
+#: tiramisu/storage/__init__.py:59
+msgid "cannot import the storage {0}"
+msgstr "ne peut pas importer le stockage {0}"
+
+#: tiramisu/storage/__init__.py:90
 msgid "option {0} not already exists in storage {1}"
 msgstr "option {0} n'existe pas dans l'espace de stockage {1}"
 
+#: tiramisu/storage/dictionary/option.py:89
+msgid "invalid default_multi value {0} for option {1}: {2}"
+msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}"
+
+#: tiramisu/storage/dictionary/option.py:131 tiramisu/value.py:427
+msgid "information's item not found: {0}"
+msgstr "aucune config spécifiée alors que c'est nécessaire"
+
+#: tiramisu/storage/dictionary/option.py:336
+#: tiramisu/storage/sqlalchemy/option.py:348
+msgid "no option for path {0}"
+msgstr "pas d'option pour le chemin {0}"
+
+#: tiramisu/storage/dictionary/option.py:342
+#: tiramisu/storage/sqlalchemy/option.py:355
+msgid "no option {0} found"
+msgstr "pas d'option {0} trouvée"
+
+#: tiramisu/storage/dictionary/option.py:390
+msgid "cannot find dynpath"
+msgstr "ne peut trouver le dynpath"
+
+#: tiramisu/storage/dictionary/option.py:480
+#: tiramisu/storage/sqlalchemy/option.py:465
+msgid "suffix and context needed if it's a dyn option"
+msgstr "suffix et context obligatoire si c'est une option dynamique"
+
+#: tiramisu/storage/dictionary/option.py:493
+msgid "{0} instance has no attribute '_readonly'"
+msgstr "{0} instance n'a pas l'attribut '_readonly'"
+
+#: tiramisu/storage/dictionary/option.py:507
+#: tiramisu/storage/sqlalchemy/option.py:495
+msgid "unknown Option {0} in OptionDescription {1}"
+msgstr "Option {0} inconnue pour l'OptionDescription {1}"
+
 #: tiramisu/storage/dictionary/storage.py:37
+#: tiramisu/storage/sqlalchemy/storage.py:37
 msgid "dictionary storage cannot delete session"
 msgstr ""
 "impossible de supprimer une session dans un espace de stockage dictionary"
 
 #: tiramisu/storage/dictionary/storage.py:48
+#: tiramisu/storage/sqlalchemy/storage.py:48
 msgid "session already used"
 msgstr "session déjà utilisée"
 
 #: tiramisu/storage/dictionary/storage.py:50
+#: tiramisu/storage/sqlalchemy/storage.py:50
 msgid "a dictionary cannot be persistent"
 msgstr "un espace de stockage dictionary ne peut être persistant"
 
-#: tiramisu/value.py:356
+#: tiramisu/value.py:64
+msgid "optiondescription has no value"
+msgstr "une optiondescription n'a pas de valeur"
+
+#: tiramisu/value.py:301
+msgid "you should only set value with config"
+msgstr "vous devez seul affecter une valeur avec un config"
+
+#: tiramisu/value.py:377
 msgid "no value for {0} cannot change owner to {1}"
 msgstr "pas de valeur pour {0} ne peut changer d'utilisateur pour {1}"
 
-#: tiramisu/value.py:438
+#: tiramisu/value.py:467
 msgid "can force cache only if cache is actived in config"
 msgstr ""
 "peut force la mise en cache seulement si le cache est activé dans la config"
 
-#: tiramisu/value.py:477
+#: tiramisu/value.py:506
 msgid "{0} is already a Multi "
 msgstr "{0} est déjà une Multi"
 
-#: tiramisu/value.py:513 tiramisu/value.py:577
-msgid "invalid len for the slave: {0} which has {1} as master"
-msgstr "longueur invalide pour une esclave : {0} qui a {1} comme maître"
-
-#: tiramisu/value.py:549
+#: tiramisu/value.py:572
 msgid "cannot append a value on a multi option {0} which is a slave"
 msgstr "ne peut ajouter une valeur sur l'option multi {0} qui est une esclave"
 
-#: tiramisu/value.py:587
+#: tiramisu/value.py:591
 msgid "cannot sort multi option {0} if master or slave"
 msgstr "ne peut trier une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:591
+#: tiramisu/value.py:595
 msgid "cmp is not permitted in python v3 or greater"
 msgstr "cmp n'est pas permis en python v3 ou supérieure"
 
-#: tiramisu/value.py:600
+#: tiramisu/value.py:604
 msgid "cannot reverse multi option {0} if master or slave"
 msgstr "ne peut inverser une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:608
+#: tiramisu/value.py:612
 msgid "cannot insert multi option {0} if master or slave"
 msgstr "ne peut insérer une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:616
+#: tiramisu/value.py:620
 msgid "cannot extend multi option {0} if master or slave"
 msgstr "ne peut étendre une option multi {0} pour une maître ou une esclave"
 
-#: tiramisu/value.py:627
-msgid "invalid value {0} for option {1}: {2}"
-msgstr "valeur invalide {0} pour l'option {1} : {2}"
-
-#: tiramisu/value.py:645
+#: tiramisu/value.py:648
 msgid "cannot pop a value on a multi option {0} which is a slave"
 msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"
 
+#~ msgid "open_values must be a boolean for {0}"
+#~ msgstr "open_values doit être un booléen pour {0}"
+
+#~ msgid "invalid value {0} for option {1}: {2}"
+#~ msgstr "valeur invalide {0} pour l'option {1} : {2}"
+
 #~ msgid "option not in all_cons_opts"
 #~ msgstr "option non présentante dans all_cons_opts"
 
@@ -675,17 +798,8 @@ msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"
 #~ msgid "no config specified but needed"
 #~ msgstr "aucune config spécifié alors que c'est nécessaire"
 
-#~ msgid "{0} has no attribute impl_set_information"
-#~ msgstr "{0} n'a pas d'attribut impl_set_information"
-
 #~ msgid "{0} has no attribute impl_get_information"
 #~ msgstr "{0} n'a pas d'attribut impl_get_information"
 
-#~ msgid "invalid name: {0} for optiondescription"
-#~ msgstr "nom invalide : {0} pour l'optiondescription"
-
-#~ msgid "not allowed group_type : {0}"
-#~ msgstr "group_type non autorisé : {0}"
-
 #~ msgid "required option not found: {0}"
 #~ msgstr "option requise non trouvée : {0}"
index 35ecafe..0e2dcc2 100644 (file)
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2014-03-29 19:01+CET\n"
+"POT-Creation-Date: 2014-10-25 22:43+CEST\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,564 +15,668 @@ msgstr ""
 "Generated-By: pygettext.py 1.5\n"
 
 
-#: tiramisu/autolib.py:165
+#: tiramisu/autolib.py:176
 msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
 msgstr ""
 
-#: tiramisu/config.py:51
+#: tiramisu/config.py:58
 msgid "descr must be an optiondescription, not {0}"
 msgstr ""
 
-#: tiramisu/config.py:126
+#: tiramisu/config.py:137
 msgid "unknown group_type: {0}"
 msgstr ""
 
-#: tiramisu/config.py:163 tiramisu/setting.py:334 tiramisu/value.py:55
-#: tiramisu/value.py:500
+#: tiramisu/config.py:176 tiramisu/setting.py:321 tiramisu/value.py:54
+#: tiramisu/value.py:541
 msgid "the context does not exist anymore"
 msgstr ""
 
-#: tiramisu/config.py:168
+#: tiramisu/config.py:181
 msgid "no option description found for this config (may be GroupConfig)"
 msgstr ""
 
-#: tiramisu/config.py:194
+#: tiramisu/config.py:209
 msgid "can't assign to an OptionDescription"
 msgstr ""
 
-#: tiramisu/config.py:324
+#: tiramisu/config.py:335
 msgid "unknown type_ type {0}for _find"
 msgstr ""
 
-#: tiramisu/config.py:363
+#: tiramisu/config.py:370
 msgid "no option found in config with these criteria"
 msgstr ""
 
-#: tiramisu/config.py:413
+#: tiramisu/config.py:420
 msgid "make_dict can't filtering with value without option"
 msgstr ""
 
-#: tiramisu/config.py:434
+#: tiramisu/config.py:439
 msgid "unexpected path {0}, should start with {1}"
 msgstr ""
 
-#: tiramisu/config.py:491
+#: tiramisu/config.py:507
 msgid "opt in getowner must be an option not {0}"
 msgstr ""
 
-#: tiramisu/config.py:535
+#: tiramisu/config.py:552
 msgid "cannot serialize Config with MetaConfig"
 msgstr ""
 
-#: tiramisu/config.py:549
+#: tiramisu/config.py:566
 msgid "this storage is not serialisable, could be a none persistent storage"
 msgstr ""
 
-#: tiramisu/config.py:612
+#: tiramisu/config.py:629
 msgid "metaconfig's children must be a list"
 msgstr ""
 
-#: tiramisu/config.py:706
+#: tiramisu/config.py:723
 msgid "metaconfig's children should be config, not {0}"
 msgstr ""
 
-#: tiramisu/config.py:710
+#: tiramisu/config.py:727
 msgid "child has already a metaconfig's"
 msgstr ""
 
-#: tiramisu/config.py:714
+#: tiramisu/config.py:731
 msgid "all config in metaconfig must have the same optiondescription"
 msgstr ""
 
-#: tiramisu/option.py:66
+#: tiramisu/option/baseoption.py:56
+msgid "{0} must be a function"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:59
+msgid "{0}_params must be a dict"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:62
+msgid "{0}_params with key {1} mustn't have length different to 1"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:66
+msgid "{0}_params must be tuple for key \"{1}\""
+msgstr ""
+
+#: tiramisu/option/baseoption.py:72
+msgid "{0}_params with length of tuple as 1 must only have None as first value"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:76
+msgid "{0}_params must only have 1 or 2 as length"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:81
+msgid "validator not support tuple"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:84
+msgid "{0}_params must have an option not a {0} for first argument"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:88
+msgid "{0}_params must have a boolean not a {0} for second argument"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:104
 msgid "invalid name: {0} for option"
 msgstr ""
 
-#: tiramisu/option.py:75
+#: tiramisu/option/baseoption.py:112
+msgid "a default_multi is set whereas multi is False in option: {0}"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:123
 msgid "invalid properties type {0} for {1}, must be a tuple"
 msgstr ""
 
-#: tiramisu/option.py:113
-msgid "'{0}' ({1}) object attribute '{2}' is read-only"
+#: tiramisu/option/baseoption.py:144
+msgid "params defined for a callback function but no callback defined yet for option {0}"
 msgstr ""
 
-#: tiramisu/option.py:140 tiramisu/value.py:410
-msgid "information's item not found: {0}"
+#: tiramisu/option/baseoption.py:149
+msgid "a callback is already set for option {0}, cannot set another one's"
 msgstr ""
 
-#: tiramisu/option.py:202
+#: tiramisu/option/baseoption.py:276
 msgid "cannot serialize Option, only in OptionDescription"
 msgstr ""
 
-#: tiramisu/option.py:305
-msgid "a default_multi is set whereas multi is False in option: {0}"
+#: tiramisu/option/baseoption.py:354
+msgid "'{0}' ({1}) object attribute '{2}' is read-only"
 msgstr ""
 
-#: tiramisu/option.py:311
-msgid "invalid default_multi value {0} for option {1}: {2}"
+#: tiramisu/option/baseoption.py:509 tiramisu/option/baseoption.py:552
+msgid "invalid value for option {0}: {1}"
 msgstr ""
 
-#: tiramisu/option.py:316
-msgid "default value not allowed if option: {0} is calculated"
+#: tiramisu/option/baseoption.py:522
+msgid "do_validation for {0}: error in value"
 msgstr ""
 
-#: tiramisu/option.py:319
-msgid "params defined for a callback function but no callback defined yet for option {0}"
+#: tiramisu/option/baseoption.py:528
+msgid "do_validation for {0}: warning in value"
 msgstr ""
 
-#: tiramisu/option.py:424 tiramisu/option.py:454
-msgid "invalid value for option {0}: {1}"
+#: tiramisu/option/baseoption.py:538
+msgid "do_validation for {0}: error in consistency"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:542
+msgid "do_validation for {0}: warning in consistency"
 msgstr ""
 
-#: tiramisu/option.py:448
+#: tiramisu/option/baseoption.py:546
 msgid "warning on the value of the option {0}: {1}"
 msgstr ""
 
-#: tiramisu/option.py:465
+#: tiramisu/option/baseoption.py:564 tiramisu/option/baseoption.py:573
 msgid "invalid value {0} for option {1} which must be a list"
 msgstr ""
 
-#: tiramisu/option.py:523
+#: tiramisu/option/baseoption.py:579
+msgid "invalid value {0} for option {1} which must be a list of list"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:632
+msgid "'{0}' ({1}) cannot add consistency, option is read-only"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:643
 msgid "consistency must be set with an option"
 msgstr ""
 
-#: tiramisu/option.py:525
+#: tiramisu/option/baseoption.py:646 tiramisu/option/baseoption.py:653
+msgid "almost one option in consistency is in a dynoptiondescription but not all"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:649
+msgid "option in consistency must be in same dynoptiondescription"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:656
 msgid "cannot add consistency with itself"
 msgstr ""
 
-#: tiramisu/option.py:527
+#: tiramisu/option/baseoption.py:658
 msgid "every options in consistency must be multi or none"
 msgstr ""
 
-#: tiramisu/option.py:548
+#: tiramisu/option/baseoption.py:662
+msgid "consistency {0} not available for this option"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:689
 msgid "same value for {0} and {1}, should be different"
 msgstr ""
 
-#: tiramisu/option.py:550
+#: tiramisu/option/baseoption.py:691
 msgid "same value for {0} and {1}, must be different"
 msgstr ""
 
-#: tiramisu/option.py:644
-msgid "values must be a tuple for {0}"
+#: tiramisu/option/baseoption.py:748
+msgid "default value not allowed if option: {0} is calculated"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:770
+msgid "malformed requirements type for option: {0}, must be a dict"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:776
+msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:787
+msgid "malformed requirements for option: {0} require must have option, expected and action keys"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:791
+msgid "malformed requirements for option: {0} action cannot be force_store_value"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:796
+msgid "malformed requirements for option: {0} inverse must be boolean"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:800
+msgid "malformed requirements for option: {0} transitive must be boolean"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:804
+msgid "malformed requirements for option: {0} same_action must be boolean"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:808
+msgid "malformed requirements must be an option in option {0}"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:811
+msgid "malformed requirements option {0} must not be a multi for {1}"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:818
+msgid "malformed requirements second argument must be valid for option {0}: {1}"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:823
+msgid "inconsistency in action types for option: {0} action: {1}"
+msgstr ""
+
+#: tiramisu/option/baseoption.py:851
+msgid "malformed symlinkoption must be an option for symlink {0}"
+msgstr ""
+
+#: tiramisu/option/masterslave.py:38
+msgid "master group {0} shall not have a symlinkoption"
+msgstr ""
+
+#: tiramisu/option/masterslave.py:41
+msgid "master group {0} shall not have a subgroup"
+msgstr ""
+
+#: tiramisu/option/masterslave.py:44
+msgid "not allowed option {0} in group {1}: this option is not a multi"
+msgstr ""
+
+#: tiramisu/option/masterslave.py:53
+msgid "master group with wrong master name for {0}"
+msgstr ""
+
+#: tiramisu/option/masterslave.py:63
+msgid "callback of master's option shall not refered a slave's ones"
+msgstr ""
+
+#: tiramisu/option/masterslave.py:198
+msgid "invalid len for the slave: {0} which has {1} as master"
+msgstr ""
+
+#: tiramisu/option/option.py:53
+msgid "values is not a function, so values_params must be None"
+msgstr ""
+
+#: tiramisu/option/option.py:55
+msgid "values must be a tuple or a function for {0}"
 msgstr ""
 
-#: tiramisu/option.py:647
-msgid "open_values must be a boolean for {0}"
+#: tiramisu/option/option.py:81
+msgid "calculated values for {0} is not a list"
 msgstr ""
 
-#: tiramisu/option.py:669
+#: tiramisu/option/option.py:89
 msgid "value {0} is not permitted, only {1} is allowed"
 msgstr ""
 
-#: tiramisu/option.py:681
+#: tiramisu/option/option.py:103
 msgid "invalid boolean"
 msgstr ""
 
-#: tiramisu/option.py:691
+#: tiramisu/option/option.py:112
 msgid "invalid integer"
 msgstr ""
 
-#: tiramisu/option.py:701
+#: tiramisu/option/option.py:121
 msgid "invalid float"
 msgstr ""
 
-#: tiramisu/option.py:711
+#: tiramisu/option/option.py:130
 msgid "invalid string"
 msgstr ""
 
-#: tiramisu/option.py:728
+#: tiramisu/option/option.py:146
 msgid "invalid unicode"
 msgstr ""
 
-#: tiramisu/option.py:740
-msgid "malformed symlinkoption must be an option for symlink {0}"
-msgstr ""
-
-#: tiramisu/option.py:791 tiramisu/option.py:794 tiramisu/option.py:799
+#: tiramisu/option/option.py:178 tiramisu/option/option.py:181
+#: tiramisu/option/option.py:186
 msgid "invalid IP"
 msgstr ""
 
-#: tiramisu/option.py:805
+#: tiramisu/option/option.py:192
 msgid "IP is in reserved class"
 msgstr ""
 
-#: tiramisu/option.py:807
+#: tiramisu/option/option.py:194
 msgid "invalid IP, mustn't be in reserved class"
 msgstr ""
 
-#: tiramisu/option.py:811
+#: tiramisu/option/option.py:198
 msgid "IP is not in private class"
 msgstr ""
 
-#: tiramisu/option.py:813
+#: tiramisu/option/option.py:200
 msgid "invalid IP, must be in private class"
 msgstr ""
 
-#: tiramisu/option.py:818 tiramisu/option.py:993
+#: tiramisu/option/option.py:205 tiramisu/option/option.py:377
 msgid "invalid len for vals"
 msgstr ""
 
-#: tiramisu/option.py:824
+#: tiramisu/option/option.py:211
 msgid "IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
 msgstr ""
 
-#: tiramisu/option.py:827
+#: tiramisu/option/option.py:214
 msgid "invalid IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
 msgstr ""
 
-#: tiramisu/option.py:868
+#: tiramisu/option/option.py:254
 msgid "inconsistency in allowed range"
 msgstr ""
 
-#: tiramisu/option.py:873
+#: tiramisu/option/option.py:259
 msgid "max value is empty"
 msgstr ""
 
-#: tiramisu/option.py:890
+#: tiramisu/option/option.py:277
 msgid "invalid port, range must have two values only"
 msgstr ""
 
-#: tiramisu/option.py:893
+#: tiramisu/option/option.py:280
 msgid "invalid port, first port in range must be smaller than the second one"
 msgstr ""
 
-#: tiramisu/option.py:902
+#: tiramisu/option/option.py:289
 msgid "invalid port"
 msgstr ""
 
-#: tiramisu/option.py:904
+#: tiramisu/option/option.py:291
 msgid "invalid port, must be an between {0} and {1}"
 msgstr ""
 
-#: tiramisu/option.py:918
+#: tiramisu/option/option.py:304
 msgid "invalid network address"
 msgstr ""
 
-#: tiramisu/option.py:924
+#: tiramisu/option/option.py:310
 msgid "network address is in reserved class"
 msgstr ""
 
-#: tiramisu/option.py:926
+#: tiramisu/option/option.py:312
 msgid "invalid network address, mustn't be in reserved class"
 msgstr ""
 
-#: tiramisu/option.py:939
+#: tiramisu/option/option.py:324
 msgid "invalid netmask address"
 msgstr ""
 
-#: tiramisu/option.py:956
+#: tiramisu/option/option.py:341
 msgid "invalid len for opts"
 msgstr ""
 
-#: tiramisu/option.py:970
+#: tiramisu/option/option.py:355
 msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
 msgstr ""
 
-#: tiramisu/option.py:975
+#: tiramisu/option/option.py:360
 msgid "invalid network {0} ({1}) with netmask {2}"
 msgstr ""
 
-#: tiramisu/option.py:989
+#: tiramisu/option/option.py:373
 msgid "invalid broadcast address"
 msgstr ""
 
-#: tiramisu/option.py:998
+#: tiramisu/option/option.py:382
 msgid "invalid broadcast {0} ({1}) with network {2} ({3}) and netmask {4} ({5})"
 msgstr ""
 
-#: tiramisu/option.py:1020
+#: tiramisu/option/option.py:403
 msgid "unknown type_ {0} for hostname"
 msgstr ""
 
-#: tiramisu/option.py:1023
+#: tiramisu/option/option.py:406
 msgid "allow_ip must be a boolean"
 msgstr ""
 
-#: tiramisu/option.py:1025
+#: tiramisu/option/option.py:408
 msgid "allow_without_dot must be a boolean"
 msgstr ""
 
-#: tiramisu/option.py:1069
+#: tiramisu/option/option.py:454
 msgid "invalid domainname, must have dot"
 msgstr ""
 
-#: tiramisu/option.py:1071
+#: tiramisu/option/option.py:456
 msgid "invalid domainname's length (max 255)"
 msgstr ""
 
-#: tiramisu/option.py:1073
+#: tiramisu/option/option.py:458
 msgid "invalid domainname's length (min 2)"
 msgstr ""
 
-#: tiramisu/option.py:1075
+#: tiramisu/option/option.py:460
 msgid "invalid domainname"
 msgstr ""
 
-#: tiramisu/option.py:1088
+#: tiramisu/option/option.py:472
 msgid "invalid email address, must contains one @"
 msgstr ""
 
-#: tiramisu/option.py:1091
+#: tiramisu/option/option.py:475
 msgid "invalid username in email address"
 msgstr ""
 
-#: tiramisu/option.py:1104
+#: tiramisu/option/option.py:487
 msgid "invalid url, must start with http:// or https://"
 msgstr ""
 
-#: tiramisu/option.py:1123
+#: tiramisu/option/option.py:506
 msgid "invalid url, port must be an between 0 and 65536"
 msgstr ""
 
-#: tiramisu/option.py:1129
+#: tiramisu/option/option.py:512
 msgid "invalid url, must ends with filename"
 msgstr ""
 
-#: tiramisu/option.py:1141
+#: tiramisu/option/option.py:523
 msgid "invalid username"
 msgstr ""
 
-#: tiramisu/option.py:1152
+#: tiramisu/option/option.py:533
 msgid "invalid filename"
 msgstr ""
 
-#: tiramisu/option.py:1179
+#: tiramisu/option/optiondescription.py:68
 msgid "duplicate option name: {0}"
 msgstr ""
 
-#: tiramisu/option.py:1197
-msgid "unknown Option {0} in OptionDescription {1}"
-msgstr ""
-
-#: tiramisu/option.py:1248
-msgid "duplicate option: {0}"
+#: tiramisu/option/optiondescription.py:73
+msgid "option must not start as dynoptiondescription"
 msgstr ""
 
-#: tiramisu/option.py:1279
+#: tiramisu/option/optiondescription.py:119
 msgid "consistency with option {0} which is not in Config"
 msgstr ""
 
-#: tiramisu/option.py:1287
-msgid "no option for path {0}"
-msgstr ""
-
-#: tiramisu/option.py:1293
-msgid "no option {0} found"
+#: tiramisu/option/optiondescription.py:139
+msgid "duplicate option: {0}"
 msgstr ""
 
-#: tiramisu/option.py:1303
+#: tiramisu/option/optiondescription.py:155
 msgid "cannot change group_type if already set (old {0}, new {1})"
 msgstr ""
 
-#: tiramisu/option.py:1315
-msgid "master group {0} shall not have a subgroup"
-msgstr ""
-
-#: tiramisu/option.py:1318
-msgid "master group {0} shall not have a symlinkoption"
-msgstr ""
-
-#: tiramisu/option.py:1321
-msgid "not allowed option {0} in group {1}: this option is not a multi"
-msgstr ""
-
-#: tiramisu/option.py:1331
-msgid "master group with wrong master name for {0}"
-msgstr ""
-
-#: tiramisu/option.py:1339
-msgid "callback of master's option shall not refered a slave's ones"
-msgstr ""
-
-#: tiramisu/option.py:1347
+#: tiramisu/option/optiondescription.py:163
 msgid "group_type: {0} not allowed"
 msgstr ""
 
-#: tiramisu/option.py:1444
-msgid "malformed requirements type for option: {0}, must be a dict"
+#: tiramisu/option/optiondescription.py:260
+msgid "DynOptionDescription callback return not uniq value"
 msgstr ""
 
-#: tiramisu/option.py:1461
-msgid "malformed requirements for option: {0} require must have option, expected and action keys"
+#: tiramisu/option/optiondescription.py:263
+msgid "invalid suffix: {0} for option"
 msgstr ""
 
-#: tiramisu/option.py:1465
-msgid "malformed requirements for option: {0} action cannot be force_store_value"
+#: tiramisu/option/optiondescription.py:316
+msgid "cannot set optiondescription in an dynoptiondescription"
 msgstr ""
 
-#: tiramisu/option.py:1470
-msgid "malformed requirements for option: {0} inverse must be boolean"
+#: tiramisu/option/optiondescription.py:321
+msgid "cannot set symlinkoption in an dynoptiondescription"
 msgstr ""
 
-#: tiramisu/option.py:1474
-msgid "malformed requirements for option: {0} transitive must be boolean"
+#: tiramisu/option/optiondescription.py:329
+msgid "callback is mandatory for dynoptiondescription"
 msgstr ""
 
-#: tiramisu/option.py:1478
-msgid "malformed requirements for option: {0} same_action must be boolean"
-msgstr ""
-
-#: tiramisu/option.py:1482
-msgid "malformed requirements must be an option in option {0}"
-msgstr ""
-
-#: tiramisu/option.py:1485
-msgid "malformed requirements option {0} must not be a multi"
-msgstr ""
-
-#: tiramisu/option.py:1491
-msgid "malformed requirements second argument must be valid for option {0}: {1}"
-msgstr ""
-
-#: tiramisu/option.py:1496
-msgid "inconsistency in action types for option: {0} action: {1}"
+#: tiramisu/setting.py:121
+msgid "can't rebind {0}"
 msgstr ""
 
-#: tiramisu/option.py:1521
-msgid "{0} must be a function"
+#: tiramisu/setting.py:126
+msgid "can't unbind {0}"
 msgstr ""
 
-#: tiramisu/option.py:1524
-msgid "{0}_params must be a dict"
+#: tiramisu/setting.py:255
+msgid "cannot append {0} property for option {1}: this property is calculated"
 msgstr ""
 
-#: tiramisu/option.py:1527
-msgid "{0}_params with key {1} mustn't have length different to 1"
+#: tiramisu/setting.py:345
+msgid "opt and all_properties must not be set together in reset"
 msgstr ""
 
-#: tiramisu/option.py:1531
-msgid "{0}_params must be tuple for key \"{1}\""
+#: tiramisu/setting.py:363
+msgid "if opt is not None, path should not be None in _getproperties"
 msgstr ""
 
-#: tiramisu/option.py:1537
-msgid "{0}_params with length of tuple as 1 must only have None as first value"
+#: tiramisu/setting.py:407
+msgid "cannot add those properties: {0}"
 msgstr ""
 
-#: tiramisu/option.py:1541
-msgid "{0}_params must only have 1 or 2 as length"
+#: tiramisu/setting.py:469
+msgid "cannot change the value for option {0} this option is frozen"
 msgstr ""
 
-#: tiramisu/option.py:1546
-msgid "validator not support tuple"
+#: tiramisu/setting.py:475
+msgid "trying to access to an option named: {0} with properties {1}"
 msgstr ""
 
-#: tiramisu/option.py:1549
-msgid "{0}_params must have an option not a {0} for first argument"
+#: tiramisu/setting.py:493
+msgid "permissive must be a tuple"
 msgstr ""
 
-#: tiramisu/option.py:1553
-msgid "{0}_params must have a boolean not a {0} for second argument"
+#: tiramisu/setting.py:500 tiramisu/value.py:370
+msgid "invalid generic owner {0}"
 msgstr ""
 
-#: tiramisu/setting.py:111
-msgid "can't rebind {0}"
+#: tiramisu/setting.py:588
+msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
 msgstr ""
 
-#: tiramisu/setting.py:116
-msgid "can't unbind {0}"
+#: tiramisu/setting.py:599
+msgid "option '{0}' has requirement's property error: {1} {2}"
 msgstr ""
 
-#: tiramisu/setting.py:267
-msgid "cannot append {0} property for option {1}: this property is calculated"
+#: tiramisu/storage/__init__.py:48
+msgid "storage_type is already set, cannot rebind it"
 msgstr ""
 
-#: tiramisu/setting.py:358
-msgid "opt and all_properties must not be set together in reset"
+#: tiramisu/storage/__init__.py:59
+msgid "cannot import the storage {0}"
 msgstr ""
 
-#: tiramisu/setting.py:376
-msgid "if opt is not None, path should not be None in _getproperties"
+#: tiramisu/storage/__init__.py:90
+msgid "option {0} not already exists in storage {1}"
 msgstr ""
 
-#: tiramisu/setting.py:486
-msgid "cannot change the value for option {0} this option is frozen"
+#: tiramisu/storage/dictionary/option.py:89
+msgid "invalid default_multi value {0} for option {1}: {2}"
 msgstr ""
 
-#: tiramisu/setting.py:492
-msgid "trying to access to an option named: {0} with properties {1}"
+#: tiramisu/storage/dictionary/option.py:131 tiramisu/value.py:427
+msgid "information's item not found: {0}"
 msgstr ""
 
-#: tiramisu/setting.py:510
-msgid "permissive must be a tuple"
+#: tiramisu/storage/dictionary/option.py:336
+#: tiramisu/storage/sqlalchemy/option.py:348
+msgid "no option for path {0}"
 msgstr ""
 
-#: tiramisu/setting.py:517 tiramisu/value.py:349
-msgid "invalid generic owner {0}"
+#: tiramisu/storage/dictionary/option.py:342
+#: tiramisu/storage/sqlalchemy/option.py:355
+msgid "no option {0} found"
 msgstr ""
 
-#: tiramisu/setting.py:605
-msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
+#: tiramisu/storage/dictionary/option.py:390
+msgid "cannot find dynpath"
 msgstr ""
 
-#: tiramisu/setting.py:616
-msgid "option '{0}' has requirement's property error: {1} {2}"
+#: tiramisu/storage/dictionary/option.py:480
+#: tiramisu/storage/sqlalchemy/option.py:465
+msgid "suffix and context needed if it's a dyn option"
 msgstr ""
 
-#: tiramisu/storage/__init__.py:47
-msgid "storage_type is already set, cannot rebind it"
+#: tiramisu/storage/dictionary/option.py:493
+msgid "{0} instance has no attribute '_readonly'"
 msgstr ""
 
-#: tiramisu/storage/__init__.py:81
-msgid "option {0} not already exists in storage {1}"
+#: tiramisu/storage/dictionary/option.py:507
+#: tiramisu/storage/sqlalchemy/option.py:495
+msgid "unknown Option {0} in OptionDescription {1}"
 msgstr ""
 
 #: tiramisu/storage/dictionary/storage.py:37
+#: tiramisu/storage/sqlalchemy/storage.py:37
 msgid "dictionary storage cannot delete session"
 msgstr ""
 
 #: tiramisu/storage/dictionary/storage.py:48
+#: tiramisu/storage/sqlalchemy/storage.py:48
 msgid "session already used"
 msgstr ""
 
 #: tiramisu/storage/dictionary/storage.py:50
+#: tiramisu/storage/sqlalchemy/storage.py:50
 msgid "a dictionary cannot be persistent"
 msgstr ""
 
-#: tiramisu/value.py:356
+#: tiramisu/value.py:64
+msgid "optiondescription has no value"
+msgstr ""
+
+#: tiramisu/value.py:301
+msgid "you should only set value with config"
+msgstr ""
+
+#: tiramisu/value.py:377
 msgid "no value for {0} cannot change owner to {1}"
 msgstr ""
 
-#: tiramisu/value.py:438
+#: tiramisu/value.py:467
 msgid "can force cache only if cache is actived in config"
 msgstr ""
 
-#: tiramisu/value.py:477
+#: tiramisu/value.py:506
 msgid "{0} is already a Multi "
 msgstr ""
 
-#: tiramisu/value.py:513 tiramisu/value.py:577
-msgid "invalid len for the slave: {0} which has {1} as master"
-msgstr ""
-
-#: tiramisu/value.py:549
+#: tiramisu/value.py:572
 msgid "cannot append a value on a multi option {0} which is a slave"
 msgstr ""
 
-#: tiramisu/value.py:587
+#: tiramisu/value.py:591
 msgid "cannot sort multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:591
+#: tiramisu/value.py:595
 msgid "cmp is not permitted in python v3 or greater"
 msgstr ""
 
-#: tiramisu/value.py:600
+#: tiramisu/value.py:604
 msgid "cannot reverse multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:608
+#: tiramisu/value.py:612
 msgid "cannot insert multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:616
+#: tiramisu/value.py:620
 msgid "cannot extend multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:627
-msgid "invalid value {0} for option {1}: {2}"
-msgstr ""
-
-#: tiramisu/value.py:645
+#: tiramisu/value.py:648
 msgid "cannot pop a value on a multi option {0} which is a slave"
 msgstr ""