remove unicode decode error
authorEmmanuel Garette <egarette@cadoles.com>
Thu, 19 Jan 2017 20:38:16 +0000 (21:38 +0100)
committerEmmanuel Garette <egarette@cadoles.com>
Thu, 19 Jan 2017 20:38:16 +0000 (21:38 +0100)
test/test_config_domain.py
test/test_option_setting.py
tiramisu/error.py
tiramisu/i18n.py
tiramisu/option/baseoption.py
tiramisu/setting.py
translations/fr/tiramisu.po
translations/tiramisu.pot

index 56c9895..8225187 100644 (file)
@@ -54,7 +54,7 @@ def test_domainname_upper():
         if sys.version_info[0] >= 3:  # pragma: optional cover
             assert msg in str(err)
         else:
-            assert msg in unicode(err)
+            assert msg in str(err)
         has_error = True
     assert has_error is True
     has_error = False
@@ -64,7 +64,7 @@ def test_domainname_upper():
         if sys.version_info[0] >= 3:  # pragma: optional cover
             assert msg in str(err)
         else:
-            assert msg in unicode(err)
+            assert msg in str(err)
         has_error = True
     assert has_error is True
 
index fc0ebd2..299b6b8 100644 (file)
@@ -489,9 +489,11 @@ def test_reset_properties_force_store_value():
 
 
 def test_pprint():
-    msg_error = _('cannot access to {} "{}" because has {} {}')
+    msg_error = _("cannot access to {0} \"{1}\" because has {2} {3}")
     msg_is = _('the value of "{0}" is "{1}"')
     msg_is_not = _('the value of "{0}" is not "{1}"')
+    properties = _('properties')
+    prop = _('property')
 
     s = StrOption("string", "", default=["string"], default_multi="string", multi=True, properties=('hidden', 'disabled'))
     s2 = StrOption("string2", "", default="string")
@@ -522,10 +524,10 @@ def test_pprint():
     list_disabled_1 = 'disabled (' + display_list([msg_is.format('string2', 'string'), msg_is.format('Test int option', '1')]) + ')'
     list_disabled_2 = 'disabled (' + display_list([msg_is.format('Test int option', '1'), msg_is.format('string2', 'string')]) + ')'
     list_hidden = 'hidden (' + msg_is_not.format('Test int option', display_list([2, 3, 4], 'or')) + ')'
-    comp1 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_disabled_1, list_hidden]))
-    comp2 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_disabled_2, list_hidden]))
-    comp3 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_hidden, list_disabled_1]))
-    comp4 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_hidden, list_disabled_2]))
+    comp1 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_disabled_1, list_hidden])))
+    comp2 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_disabled_2, list_hidden])))
+    comp3 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_hidden, list_disabled_1])))
+    comp4 = str(err) == _(msg_error.format('option', 'Test string option', properties, display_list([list_hidden, list_disabled_2])))
     assert comp1 or comp2 or comp3 or comp4
 
     try:
@@ -533,7 +535,7 @@ def test_pprint():
     except Exception, err:
         pass
 
-    assert str(err) == msg_error.format('optiondescription', 'options', 'property', 'hidden (' + msg_is.format('Test int option', 1) + ')')
+    assert str(err) == msg_error.format('optiondescription', 'options', prop, 'hidden (' + msg_is.format('Test int option', 1) + ')')
 
     try:
         config.val3
@@ -544,17 +546,17 @@ def test_pprint():
     msg_3 = msg_is_not.format('Test int option', display_list([2, 3, 4], 'or'))
 
     list_hidden = 'hidden (' + display_list([msg_1, msg_2, msg_3]) + ')'
-    comp1 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
+    comp1 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
     list_hidden = 'hidden (' + display_list([msg_1, msg_3, msg_2]) + ')'
-    comp2 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
+    comp2 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
     list_hidden = 'hidden (' + display_list([msg_2, msg_1, msg_3]) + ')'
-    comp3 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
+    comp3 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
     list_hidden = 'hidden (' + display_list([msg_2, msg_3, msg_1]) + ')'
-    comp4 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
+    comp4 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
     list_hidden = 'hidden (' + display_list([msg_3, msg_1, msg_2]) + ')'
-    comp5 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
+    comp5 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
     list_hidden = 'hidden (' + display_list([msg_3, msg_2, msg_1]) + ')'
-    comp6 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
+    comp6 = str(err) == msg_error.format('option', 'val3', prop, list_hidden)
     assert comp1 or comp2 or comp3 or comp4 or comp5 or comp6
 
     try:
@@ -562,11 +564,11 @@ def test_pprint():
     except Exception, err:
         pass
 
-    assert str(err) == msg_error.format('option', 'string', 'properties', display_list(['disabled', 'hidden']))
+    assert str(err) == msg_error.format('option', 'string', properties, display_list(['disabled', 'hidden']))
 
     try:
         config.string3
     except Exception, err:
         pass
 
-    assert str(err) == msg_error.format('option', 'string3', 'property', 'hidden')
+    assert str(err) == msg_error.format('option', 'string3', prop, 'hidden')
index 8dd2dee..04d94ae 100644 (file)
@@ -19,6 +19,10 @@ from .i18n import _
 
 
 def display_list(lst, separator='and'):
+    if separator == 'and':
+        separator = _('and')
+    elif separator == 'or':
+        separator = _('or')
     if len(lst) == 0:
         return ''
     elif len(lst) == 1:
index c7c9cab..b9931b8 100644 (file)
@@ -45,8 +45,7 @@ mo_location = LOCALE_DIR
 gettext.find(APP_NAME, mo_location)
 gettext.textdomain(APP_NAME)
 gettext.bind_textdomain_codeset(APP_NAME, "UTF-8")
-gettext.translation(APP_NAME, fallback=True)
 
 t = gettext.translation(APP_NAME, fallback=True)
 
-_ = t.ugettext
+_ = t.gettext
index 609b315..3c82527 100644 (file)
@@ -585,7 +585,7 @@ class Option(OnlyOption):
                                       'submulti_index: {2}'.format(_value, _index,
                                                                    submulti_index),
                                       exc_info=True)
-                        err_msg = unicode('{0}')
+                        err_msg = '{0}'.format(err)
                         if err_msg:
                             msg = _('"{0}" is an invalid {1} for "{2}", {3}'
                                     '').format(_value, self._display_name,
index 2d55fbc..b1ca092 100644 (file)
@@ -511,13 +511,16 @@ class Settings(object):
                                              props, self, datas, opt_type)
             else:
                 if len(props) == 1:
-                    prop_msg = 'property'
+                    prop_msg = _('property')
                 else:
-                    prop_msg = 'properties'
+                    prop_msg = _('properties')
+                name = opt_or_descr.impl_get_display_name()
+                if isinstance(name, unicode):
+                    name = name.encode('utf8')
                 return PropertiesOptionError(_('cannot access to {0} "{1}" '
                                                'because has {2} {3}'
                                                '').format(opt_type,
-                                                          opt_or_descr.impl_get_display_name(),
+                                                          name,
                                                           prop_msg,
                                                           display_list(props)), props,
                                                           self, datas, opt_type)
index e0896fb..2482742 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Tiramisu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-11-20 17:58+0100\n"
+"POT-Creation-Date: 2017-01-19 21:26+0100\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
 "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@@ -10,18 +10,18 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.8\n"
+"X-Generator: Poedit 1.8.11\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
-#: tiramisu/autolib.py:170
+#: tiramisu/autolib.py:172
 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/autolib.py:235
+#: tiramisu/autolib.py:237
 msgid "callback cannot return a list for a slave option ({0})"
 msgstr ""
 "un calcul ne peut pas retourner une liste pour une option esclave ({0})"
@@ -30,88 +30,88 @@ msgstr ""
 msgid "descr must be an optiondescription, not {0}"
 msgstr "descr doit être une optiondescription pas un {0}"
 
-#: tiramisu/config.py:146
+#: tiramisu/config.py:148
 msgid "unknown group_type: {0}"
 msgstr "group_type inconnu: {0}"
 
-#: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54
+#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54
 #: tiramisu/value.py:749
 msgid "the context does not exist anymore"
 msgstr "le context n'existe plus"
 
-#: tiramisu/config.py:190
+#: tiramisu/config.py:195
 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:226
+#: tiramisu/config.py:231
 msgid "can't assign to an OptionDescription"
 msgstr "ne peut pas attribuer une valeur à une OptionDescription"
 
-#: tiramisu/config.py:384
+#: tiramisu/config.py:392
 msgid "unknown type_ type {0}for _find"
 msgstr "type_ type {0} pour _find inconnu"
 
-#: tiramisu/config.py:427
+#: tiramisu/config.py:435
 msgid "no option found in config with these criteria"
 msgstr "aucune option trouvée dans la config avec ces critères"
 
-#: tiramisu/config.py:475
+#: tiramisu/config.py:483
 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:498
+#: tiramisu/config.py:506
 msgid "unexpected path {0}, should start with {1}"
 msgstr "chemin imprévu {0}, devrait commencer par {1}"
 
-#: tiramisu/config.py:573
+#: tiramisu/config.py:591
 msgid "opt in getowner must be an option not {0}"
 msgstr "opt dans getowner doit être une option pas {0}"
 
-#: tiramisu/config.py:621
+#: tiramisu/config.py:639
 msgid "cannot serialize Config with MetaConfig"
 msgstr "impossible de sérialiser une Config avec une MetaConfig"
 
-#: tiramisu/config.py:635
+#: tiramisu/config.py:653
 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:700
+#: tiramisu/config.py:722
 msgid "invalid name: {0} for config"
 msgstr "nom invalide : {0} pour la config"
 
-#: tiramisu/config.py:732
+#: tiramisu/config.py:754
 msgid "groupconfig's children must be a list"
 msgstr "enfants d'une groupconfig doit être une liste"
 
-#: tiramisu/config.py:736
+#: tiramisu/config.py:758
 msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
 msgstr ""
 "les enfants d'un groupconfig doivent être des Config, MetaConfig ou "
 "GroupConfig"
 
-#: tiramisu/config.py:739
+#: tiramisu/config.py:761
 msgid "name must be set to config before creating groupconfig"
 msgstr "un nom doit être donné à la config avant de créer un groupconfig"
 
-#: tiramisu/config.py:745
+#: tiramisu/config.py:767
 msgid "config name must be uniq in groupconfig for {0}"
 msgstr "le nom de la config doit être unique dans un groupconfig pour {0}"
 
-#: tiramisu/config.py:854
+#: tiramisu/config.py:876
 msgid "metaconfig's children should be config, not {0}"
 msgstr "enfants d'une metaconfig doit être une config, pas {0}"
 
-#: tiramisu/config.py:858
+#: tiramisu/config.py:880
 msgid "child has already a metaconfig's"
 msgstr "enfant a déjà une metaconfig"
 
-#: tiramisu/config.py:862
+#: tiramisu/config.py:884
 msgid "all config in metaconfig must have the same optiondescription"
 msgstr ""
 "toutes les configs d'une metaconfig doivent avoir la même optiondescription"
 
-#: tiramisu/config.py:877
+#: tiramisu/config.py:899
 msgid ""
 "force_default, force_default_if_same or force_dont_change_value cannot be "
 "set with only_config"
@@ -119,88 +119,96 @@ msgstr ""
 "force_default, force_default_if_same ou force_dont_change_value ne peuvent "
 "pas être spécifié avec only_config"
 
-#: tiramisu/config.py:883
+#: tiramisu/config.py:905
 msgid "force_default and force_dont_change_value cannot be set together"
 msgstr ""
 "force_default et force_dont_change_value ne peuvent pas être mis ensemble"
 
-#: tiramisu/error.py:28
+#: tiramisu/error.py:23
+msgid "and"
+msgstr "et"
+
+#: tiramisu/error.py:25
+msgid "or"
+msgstr "ou"
+
+#: tiramisu/error.py:34
 msgid " {} "
 msgstr " {} "
 
-#: tiramisu/error.py:52
+#: tiramisu/error.py:58
 msgid "property"
-msgstr "propriété"
+msgstr "de la propriété"
 
-#: tiramisu/error.py:54
+#: tiramisu/error.py:60
 msgid "properties"
-msgstr "propriétés"
+msgstr "des propriétés"
 
-#: tiramisu/error.py:56 tiramisu/setting.py:517
+#: tiramisu/error.py:62 tiramisu/setting.py:520
 msgid "cannot access to {0} \"{1}\" because has {2} {3}"
-msgstr "ne peut accéder à l'{0} \"{1}\" a cause de {2} {3}"
+msgstr "ne peut accéder à l'{0} \"{1}\" a cause {2} {3}"
 
-#: tiramisu/option/baseoption.py:62
+#: tiramisu/option/baseoption.py:63
 msgid "{0} must be a function"
 msgstr "{0} doit être une fonction"
 
-#: tiramisu/option/baseoption.py:65
+#: tiramisu/option/baseoption.py:66
 msgid "{0}_params must be a dict"
 msgstr "{0}_params doit être un dict"
 
-#: tiramisu/option/baseoption.py:68
+#: tiramisu/option/baseoption.py:69
 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/baseoption.py:72
+#: tiramisu/option/baseoption.py:73
 msgid "{0}_params must be tuple for key \"{1}\""
 msgstr "{0}_params doit être un tuple pour la clef \"{1}\""
 
-#: tiramisu/option/baseoption.py:78
+#: tiramisu/option/baseoption.py:79
 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:82
+#: tiramisu/option/baseoption.py:83
 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:88
-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:89
+msgid "{}_params must have an option not a {} for first argument"
+msgstr "{}_params doit avoir une option pas un {} pour premier argument"
 
-#: tiramisu/option/baseoption.py:92
-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/baseoption.py:93
+msgid "{}_params must have a boolean not a {} for second argument"
+msgstr "{}_params doit avoir un booléan pas un {} pour second argument"
 
-#: tiramisu/option/baseoption.py:109
+#: tiramisu/option/baseoption.py:110
 msgid "invalid name: {0} for option"
 msgstr "nom invalide : {0} pour l'option"
 
-#: tiramisu/option/baseoption.py:111
+#: tiramisu/option/baseoption.py:112
 msgid "default_multi is set whereas multi is False in option: {0}"
 msgstr ""
 "default_multi est spécifié alors que multi est à False pour l'option : {0}"
 
-#: tiramisu/option/baseoption.py:123
+#: tiramisu/option/baseoption.py:124
 msgid "invalid multi value"
 msgstr "valeur multiple invalide"
 
-#: tiramisu/option/baseoption.py:125
+#: tiramisu/option/baseoption.py:126
 msgid "unique must be a boolean"
 msgstr "unique doit être un booléan"
 
-#: tiramisu/option/baseoption.py:127
+#: tiramisu/option/baseoption.py:128
 msgid "unique must be set only with multi value"
 msgstr "unique doit être activé uniquement avec une valeur multiple"
 
-#: tiramisu/option/baseoption.py:137
+#: tiramisu/option/baseoption.py:138
 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:176
+#: tiramisu/option/baseoption.py:211
 msgid ""
 "params defined for a callback function but no callback defined yet for "
 "option {0}"
@@ -208,138 +216,138 @@ msgstr ""
 "params définis pour une fonction callback mais par de callback encore "
 "définis pour l'option {0}"
 
-#: tiramisu/option/baseoption.py:181
+#: tiramisu/option/baseoption.py:216
 msgid "a callback is already set for {0}, cannot set another one's"
 msgstr "un calback a déjà été définit pour {0}, ne peut en définir un autre"
 
-#: tiramisu/option/baseoption.py:265
+#: tiramisu/option/baseoption.py:300
 msgid "cannot serialize Option, only in OptionDescription"
 msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
 
-#: tiramisu/option/baseoption.py:346 tiramisu/storage/dictionary/option.py:123
+#: tiramisu/option/baseoption.py:381 tiramisu/storage/dictionary/option.py:125
 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:367
+#: tiramisu/option/baseoption.py:402
 msgid "invalid string"
 msgstr "invalide caractère"
 
-#: tiramisu/option/baseoption.py:370
+#: tiramisu/option/baseoption.py:405
 msgid "invalid unicode or string"
 msgstr "invalide unicode ou string"
 
-#: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572
+#: tiramisu/option/baseoption.py:510 tiramisu/option/baseoption.py:609
 msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}"
 msgstr ""
 "attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", "
 "{3}"
 
-#: tiramisu/option/baseoption.py:513 tiramisu/option/baseoption.py:624
+#: tiramisu/option/baseoption.py:548 tiramisu/option/baseoption.py:661
 msgid "invalid value \"{}\", this value is already in \"{}\""
 msgstr "valeur invalide \"{}\", cette valeur est déjà dans \"{}\""
 
-#: tiramisu/option/baseoption.py:554 tiramisu/option/baseoption.py:591
+#: tiramisu/option/baseoption.py:590 tiramisu/option/baseoption.py:628
 msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
 msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}"
 
-#: tiramisu/option/baseoption.py:558 tiramisu/option/baseoption.py:595
+#: tiramisu/option/baseoption.py:594 tiramisu/option/baseoption.py:632
 msgid "\"{0}\" is an invalid {1} for \"{2}\""
 msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\""
 
-#: tiramisu/option/baseoption.py:569
+#: tiramisu/option/baseoption.py:606
 msgid "do_validation for {0}: error in value"
 msgstr "do_validation for {0} : erreur dans un la valeur"
 
-#: tiramisu/option/baseoption.py:611 tiramisu/option/baseoption.py:629
+#: tiramisu/option/baseoption.py:648 tiramisu/option/baseoption.py:666
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list"
 msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste"
 
-#: tiramisu/option/baseoption.py:616
+#: tiramisu/option/baseoption.py:653
 msgid "invalid value \"{}\" for \"{}\" which must not be a list"
 msgstr "valeur invalide \"{0}\" pour \"{1}\" qui ne doit pas être une liste"
 
-#: tiramisu/option/baseoption.py:638
+#: tiramisu/option/baseoption.py:675
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list"
 msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste de liste"
 
-#: tiramisu/option/baseoption.py:691 tiramisu/option/baseoption.py:695
+#: tiramisu/option/baseoption.py:728 tiramisu/option/baseoption.py:732
 msgid "cannot add consistency with submulti option"
 msgstr "ne peut ajouter de test de consistence a une option submulti"
 
-#: tiramisu/option/baseoption.py:697
+#: tiramisu/option/baseoption.py:734
 msgid "consistency must be set with an option"
 msgstr "consistency doit être configuré avec une option"
 
-#: tiramisu/option/baseoption.py:700 tiramisu/option/baseoption.py:707
+#: tiramisu/option/baseoption.py:737 tiramisu/option/baseoption.py:744
 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:703
+#: tiramisu/option/baseoption.py:740
 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:710
+#: tiramisu/option/baseoption.py:747
 msgid "cannot add consistency with itself"
 msgstr "ne peut ajouter une consistency avec lui même"
 
-#: tiramisu/option/baseoption.py:712
+#: tiramisu/option/baseoption.py:749
 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/baseoption.py:729
+#: tiramisu/option/baseoption.py:766
 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:736
+#: tiramisu/option/baseoption.py:773
 msgid "consistency {0} not available for this option"
 msgstr "consistency {0} non valable pour cette option"
 
-#: tiramisu/option/baseoption.py:740
+#: tiramisu/option/baseoption.py:777
 msgid "unknow parameter {0} in consistency"
 msgstr "paramètre inconnu {0} dans un test de consistance"
 
-#: tiramisu/option/baseoption.py:803
+#: tiramisu/option/baseoption.py:841
 msgid "_cons_not_equal: {} are not different"
 msgstr "_cons_not_equal: {} sont différents"
 
-#: tiramisu/option/baseoption.py:807
+#: tiramisu/option/baseoption.py:844
 msgid "should be different from the value of {}"
 msgstr "devrait être différent de la valeur de {}"
 
-#: tiramisu/option/baseoption.py:809
+#: tiramisu/option/baseoption.py:846
 msgid "must be different from the value of {}"
 msgstr "doit être différent de la valeur de {}"
 
-#: tiramisu/option/baseoption.py:813
+#: tiramisu/option/baseoption.py:849
 msgid "value for {} should be different"
 msgstr "valeur pour {} devrait être différent"
 
-#: tiramisu/option/baseoption.py:815
+#: tiramisu/option/baseoption.py:851
 msgid "value for {} must be different"
 msgstr "valeur pour {} doit être différent"
 
-#: tiramisu/option/baseoption.py:871
+#: tiramisu/option/baseoption.py:910
 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:891
+#: tiramisu/option/baseoption.py:930
 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:897
+#: tiramisu/option/baseoption.py:936
 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:905
+#: tiramisu/option/baseoption.py:944
 msgid ""
 "malformed requirements for option: {0} require must have option, expected "
 "and action keys"
@@ -347,33 +355,33 @@ msgstr ""
 "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
 "option, expected et action"
 
-#: tiramisu/option/baseoption.py:912
+#: tiramisu/option/baseoption.py:951
 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:917
+#: tiramisu/option/baseoption.py:956
 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:921
+#: tiramisu/option/baseoption.py:960
 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:925
+#: tiramisu/option/baseoption.py:964
 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:929
+#: tiramisu/option/baseoption.py:968
 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:932
+#: tiramisu/option/baseoption.py:971
 msgid ""
 "malformed requirements multi option must not set as requires of non multi "
 "option {0}"
@@ -381,18 +389,12 @@ msgstr ""
 "requirements mal formés une option multiple ne doit pas être spécifié comme "
 "pré-requis à l'option non multiple {0}"
 
-#: tiramisu/option/baseoption.py:938
-msgid ""
-"malformed requirements second argument must be valid for option {0}: {1}"
+#: tiramisu/option/baseoption.py:977
+msgid "malformed requirements expected value 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:943
-msgid "inconsistency in action types for option: {0} action: {1}"
-msgstr "incohérence dans les types action pour l'option : {0} action {1}"
+"valeur de \"expected\" malformé, doit être valide pour l'option {0} : {1}"
 
-#: tiramisu/option/baseoption.py:971
+#: tiramisu/option/baseoption.py:1007
 msgid "malformed symlinkoption must be an option for symlink {0}"
 msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
 
@@ -764,15 +766,15 @@ 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:538
+#: tiramisu/setting.py:541
 msgid "permissive must be a tuple"
 msgstr "permissive doit être un tuple"
 
-#: tiramisu/setting.py:545 tiramisu/value.py:539
+#: tiramisu/setting.py:548 tiramisu/value.py:539
 msgid "invalid generic owner {0}"
 msgstr "invalide owner générique {0}"
 
-#: tiramisu/setting.py:646
+#: tiramisu/setting.py:649
 msgid ""
 "malformed requirements imbrication detected for option: '{0}' with "
 "requirement on: '{1}'"
@@ -780,15 +782,15 @@ msgstr ""
 "imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
 "requirement sur : '{1}'"
 
-#: tiramisu/setting.py:669
+#: tiramisu/setting.py:672
 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/setting.py:692
+#: tiramisu/setting.py:695
 msgid "the value of \"{0}\" is \"{1}\""
 msgstr "la valeur de \"{0}\" est \"{1}\""
 
-#: tiramisu/setting.py:694
+#: tiramisu/setting.py:697
 msgid "the value of \"{0}\" is not \"{1}\""
 msgstr "la valeur de \"{0}\" n'est pas \"{1}\""
 
@@ -804,46 +806,46 @@ msgstr "ne peut pas importer le stockage {0}"
 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:108
+#: tiramisu/storage/dictionary/option.py:110
 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:148
+#: tiramisu/storage/dictionary/option.py:150
 #: tiramisu/storage/dictionary/value.py:234
 #: tiramisu/storage/sqlalchemy/option.py:666
 msgid "information's item not found: {0}"
 msgstr "item '{0}' dans les informations non trouvée"
 
-#: tiramisu/storage/dictionary/option.py:413
+#: tiramisu/storage/dictionary/option.py:415
 msgid "use impl_get_opt_by_path only with root OptionDescription"
 msgstr "utiliser impl_get_opt_by_path seulement sur l'OptionDescription racine"
 
-#: tiramisu/storage/dictionary/option.py:415
+#: tiramisu/storage/dictionary/option.py:417
 #: tiramisu/storage/sqlalchemy/option.py:730
 msgid "no option for path {0}"
 msgstr "pas d'option pour le chemin {0}"
 
-#: tiramisu/storage/dictionary/option.py:420
+#: tiramisu/storage/dictionary/option.py:422
 #: tiramisu/storage/sqlalchemy/option.py:740
 msgid "use impl_get_path_by_opt only with root OptionDescription"
 msgstr ""
 "utiliser impl_get_path_by_opt seulement avec une OptionDescription racine"
 
-#: tiramisu/storage/dictionary/option.py:422
+#: tiramisu/storage/dictionary/option.py:424
 #: tiramisu/storage/sqlalchemy/option.py:741
 msgid "no option {0} found"
 msgstr "pas d'option {0} trouvée"
 
-#: tiramisu/storage/dictionary/option.py:469
+#: tiramisu/storage/dictionary/option.py:471
 msgid "cannot find dynpath"
 msgstr "ne peut trouver le dynpath"
 
-#: tiramisu/storage/dictionary/option.py:558
+#: tiramisu/storage/dictionary/option.py:560
 #: tiramisu/storage/sqlalchemy/option.py:894
 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:579
+#: tiramisu/storage/dictionary/option.py:581
 #: tiramisu/storage/sqlalchemy/option.py:926
 msgid "unknown Option {0} in OptionDescription {1}"
 msgstr "Option {0} inconnue pour l'OptionDescription {1}"
@@ -915,6 +917,21 @@ msgstr "ne peut étendre une option multi {0} pour une maître ou une esclave"
 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 "{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"
+
+#~ 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"
+
+#~ 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}"
+
+#~ msgid "inconsistency in action types for option: {0} action: {1}"
+#~ msgstr "incohérence dans les types action pour l'option : {0} action {1}"
+
 #~ 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 "
index f240748..540f4b4 100644 (file)
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2016-11-20 17:57+CET\n"
+"POT-Creation-Date: 2017-01-19 21:24+CET\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,11 +15,11 @@ msgstr ""
 "Generated-By: pygettext.py 1.5\n"
 
 
-#: tiramisu/autolib.py:170
+#: tiramisu/autolib.py:172
 msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
 msgstr ""
 
-#: tiramisu/autolib.py:235
+#: tiramisu/autolib.py:237
 msgid "callback cannot return a list for a slave option ({0})"
 msgstr ""
 
@@ -27,324 +27,328 @@ msgstr ""
 msgid "descr must be an optiondescription, not {0}"
 msgstr ""
 
-#: tiramisu/config.py:146
+#: tiramisu/config.py:148
 msgid "unknown group_type: {0}"
 msgstr ""
 
-#: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54
+#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54
 #: tiramisu/value.py:749
 msgid "the context does not exist anymore"
 msgstr ""
 
-#: tiramisu/config.py:190
+#: tiramisu/config.py:195
 msgid "no option description found for this config (may be GroupConfig)"
 msgstr ""
 
-#: tiramisu/config.py:226
+#: tiramisu/config.py:231
 msgid "can't assign to an OptionDescription"
 msgstr ""
 
-#: tiramisu/config.py:384
+#: tiramisu/config.py:392
 msgid "unknown type_ type {0}for _find"
 msgstr ""
 
-#: tiramisu/config.py:427
+#: tiramisu/config.py:435
 msgid "no option found in config with these criteria"
 msgstr ""
 
-#: tiramisu/config.py:475
+#: tiramisu/config.py:483
 msgid "make_dict can't filtering with value without option"
 msgstr ""
 
-#: tiramisu/config.py:498
+#: tiramisu/config.py:506
 msgid "unexpected path {0}, should start with {1}"
 msgstr ""
 
-#: tiramisu/config.py:573
+#: tiramisu/config.py:591
 msgid "opt in getowner must be an option not {0}"
 msgstr ""
 
-#: tiramisu/config.py:621
+#: tiramisu/config.py:639
 msgid "cannot serialize Config with MetaConfig"
 msgstr ""
 
-#: tiramisu/config.py:635
+#: tiramisu/config.py:653
 msgid "this storage is not serialisable, could be a none persistent storage"
 msgstr ""
 
-#: tiramisu/config.py:700
+#: tiramisu/config.py:722
 msgid "invalid name: {0} for config"
 msgstr ""
 
-#: tiramisu/config.py:732
+#: tiramisu/config.py:754
 msgid "groupconfig's children must be a list"
 msgstr ""
 
-#: tiramisu/config.py:736
+#: tiramisu/config.py:758
 msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
 msgstr ""
 
-#: tiramisu/config.py:739
+#: tiramisu/config.py:761
 msgid "name must be set to config before creating groupconfig"
 msgstr ""
 
-#: tiramisu/config.py:745
+#: tiramisu/config.py:767
 msgid "config name must be uniq in groupconfig for {0}"
 msgstr ""
 
-#: tiramisu/config.py:854
+#: tiramisu/config.py:876
 msgid "metaconfig's children should be config, not {0}"
 msgstr ""
 
-#: tiramisu/config.py:858
+#: tiramisu/config.py:880
 msgid "child has already a metaconfig's"
 msgstr ""
 
-#: tiramisu/config.py:862
+#: tiramisu/config.py:884
 msgid "all config in metaconfig must have the same optiondescription"
 msgstr ""
 
-#: tiramisu/config.py:877
+#: tiramisu/config.py:899
 msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config"
 msgstr ""
 
-#: tiramisu/config.py:883
+#: tiramisu/config.py:905
 msgid "force_default and force_dont_change_value cannot be set together"
 msgstr ""
 
-#: tiramisu/error.py:28
+#: tiramisu/error.py:23
+msgid "and"
+msgstr ""
+
+#: tiramisu/error.py:25
+msgid "or"
+msgstr ""
+
+#: tiramisu/error.py:34
 msgid " {} "
 msgstr ""
 
-#: tiramisu/error.py:52
+#: tiramisu/error.py:58
 msgid "property"
 msgstr ""
 
-#: tiramisu/error.py:54
+#: tiramisu/error.py:60
 msgid "properties"
 msgstr ""
 
-#: tiramisu/error.py:56 tiramisu/setting.py:517
+#: tiramisu/error.py:62 tiramisu/setting.py:520
 msgid "cannot access to {0} \"{1}\" because has {2} {3}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:62
+#: tiramisu/option/baseoption.py:63
 msgid "{0} must be a function"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:65
+#: tiramisu/option/baseoption.py:66
 msgid "{0}_params must be a dict"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:68
+#: tiramisu/option/baseoption.py:69
 msgid "{0}_params with key {1} mustn't have length different to 1"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:72
+#: tiramisu/option/baseoption.py:73
 msgid "{0}_params must be tuple for key \"{1}\""
 msgstr ""
 
-#: tiramisu/option/baseoption.py:78
+#: tiramisu/option/baseoption.py:79
 msgid "{0}_params with length of tuple as 1 must only have None as first value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:82
+#: tiramisu/option/baseoption.py:83
 msgid "{0}_params must only have 1 or 2 as length"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:88
-msgid "{0}_params must have an option not a {0} for first argument"
+#: tiramisu/option/baseoption.py:89
+msgid "{}_params must have an option not a {} for first argument"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:92
-msgid "{0}_params must have a boolean not a {0} for second argument"
+#: tiramisu/option/baseoption.py:93
+msgid "{}_params must have a boolean not a {} for second argument"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:109
+#: tiramisu/option/baseoption.py:110
 msgid "invalid name: {0} for option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:111
+#: tiramisu/option/baseoption.py:112
 msgid "default_multi is set whereas multi is False in option: {0}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:123
+#: tiramisu/option/baseoption.py:124
 msgid "invalid multi value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:125
+#: tiramisu/option/baseoption.py:126
 msgid "unique must be a boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:127
+#: tiramisu/option/baseoption.py:128
 msgid "unique must be set only with multi value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:137
+#: tiramisu/option/baseoption.py:138
 msgid "invalid properties type {0} for {1}, must be a tuple"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:176
+#: tiramisu/option/baseoption.py:211
 msgid "params defined for a callback function but no callback defined yet for option {0}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:181
+#: tiramisu/option/baseoption.py:216
 msgid "a callback is already set for {0}, cannot set another one's"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:265
+#: tiramisu/option/baseoption.py:300
 msgid "cannot serialize Option, only in OptionDescription"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:346 tiramisu/storage/dictionary/option.py:123
+#: tiramisu/option/baseoption.py:381 tiramisu/storage/dictionary/option.py:125
 msgid "'{0}' ({1}) object attribute '{2}' is read-only"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:367
+#: tiramisu/option/baseoption.py:402
 msgid "invalid string"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:370
+#: tiramisu/option/baseoption.py:405
 msgid "invalid unicode or string"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572
+#: tiramisu/option/baseoption.py:510 tiramisu/option/baseoption.py:609
 msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:513 tiramisu/option/baseoption.py:624
+#: tiramisu/option/baseoption.py:548 tiramisu/option/baseoption.py:661
 msgid "invalid value \"{}\", this value is already in \"{}\""
 msgstr ""
 
-#: tiramisu/option/baseoption.py:554 tiramisu/option/baseoption.py:591
+#: tiramisu/option/baseoption.py:590 tiramisu/option/baseoption.py:628
 msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:558 tiramisu/option/baseoption.py:595
+#: tiramisu/option/baseoption.py:594 tiramisu/option/baseoption.py:632
 msgid "\"{0}\" is an invalid {1} for \"{2}\""
 msgstr ""
 
-#: tiramisu/option/baseoption.py:569
+#: tiramisu/option/baseoption.py:606
 msgid "do_validation for {0}: error in value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:611 tiramisu/option/baseoption.py:629
+#: tiramisu/option/baseoption.py:648 tiramisu/option/baseoption.py:666
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:616
+#: tiramisu/option/baseoption.py:653
 msgid "invalid value \"{}\" for \"{}\" which must not be a list"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:638
+#: tiramisu/option/baseoption.py:675
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:691 tiramisu/option/baseoption.py:695
+#: tiramisu/option/baseoption.py:728 tiramisu/option/baseoption.py:732
 msgid "cannot add consistency with submulti option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:697
+#: tiramisu/option/baseoption.py:734
 msgid "consistency must be set with an option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:700 tiramisu/option/baseoption.py:707
+#: tiramisu/option/baseoption.py:737 tiramisu/option/baseoption.py:744
 msgid "almost one option in consistency is in a dynoptiondescription but not all"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:703
+#: tiramisu/option/baseoption.py:740
 msgid "option in consistency must be in same dynoptiondescription"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:710
+#: tiramisu/option/baseoption.py:747
 msgid "cannot add consistency with itself"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:712
+#: tiramisu/option/baseoption.py:749
 msgid "every options in consistency must be multi or none"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:729
+#: tiramisu/option/baseoption.py:766
 msgid "'{0}' ({1}) cannot add consistency, option is read-only"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:736
+#: tiramisu/option/baseoption.py:773
 msgid "consistency {0} not available for this option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:740
+#: tiramisu/option/baseoption.py:777
 msgid "unknow parameter {0} in consistency"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:803
+#: tiramisu/option/baseoption.py:841
 msgid "_cons_not_equal: {} are not different"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:807
+#: tiramisu/option/baseoption.py:844
 msgid "should be different from the value of {}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:809
+#: tiramisu/option/baseoption.py:846
 msgid "must be different from the value of {}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:813
+#: tiramisu/option/baseoption.py:849
 msgid "value for {} should be different"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:815
+#: tiramisu/option/baseoption.py:851
 msgid "value for {} must be different"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:871
+#: tiramisu/option/baseoption.py:910
 msgid "default value not allowed if option: {0} is calculated"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:891
+#: tiramisu/option/baseoption.py:930
 msgid "malformed requirements type for option: {0}, must be a dict"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:897
+#: tiramisu/option/baseoption.py:936
 msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:905
+#: tiramisu/option/baseoption.py:944
 msgid "malformed requirements for option: {0} require must have option, expected and action keys"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:912
+#: tiramisu/option/baseoption.py:951
 msgid "malformed requirements for option: {0} action cannot be force_store_value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:917
+#: tiramisu/option/baseoption.py:956
 msgid "malformed requirements for option: {0} inverse must be boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:921
+#: tiramisu/option/baseoption.py:960
 msgid "malformed requirements for option: {0} transitive must be boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:925
+#: tiramisu/option/baseoption.py:964
 msgid "malformed requirements for option: {0} same_action must be boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:929
+#: tiramisu/option/baseoption.py:968
 msgid "malformed requirements must be an option in option {0}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:932
+#: tiramisu/option/baseoption.py:971
 msgid "malformed requirements multi option must not set as requires of non multi option {0}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:938
-msgid "malformed requirements second argument must be valid for option {0}: {1}"
+#: tiramisu/option/baseoption.py:977
+msgid "malformed requirements expected value must be valid for option {0}: {1}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:943
-msgid "inconsistency in action types for option: {0} action: {1}"
-msgstr ""
-
-#: tiramisu/option/baseoption.py:971
+#: tiramisu/option/baseoption.py:1007
 msgid "malformed symlinkoption must be an option for symlink {0}"
 msgstr ""
 
@@ -697,27 +701,27 @@ msgstr ""
 msgid "cannot change the value for option {0} this option is frozen"
 msgstr ""
 
-#: tiramisu/setting.py:538
+#: tiramisu/setting.py:541
 msgid "permissive must be a tuple"
 msgstr ""
 
-#: tiramisu/setting.py:545 tiramisu/value.py:539
+#: tiramisu/setting.py:548 tiramisu/value.py:539
 msgid "invalid generic owner {0}"
 msgstr ""
 
-#: tiramisu/setting.py:646
+#: tiramisu/setting.py:649
 msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
 msgstr ""
 
-#: tiramisu/setting.py:669
+#: tiramisu/setting.py:672
 msgid "option '{0}' has requirement's property error: {1} {2}"
 msgstr ""
 
-#: tiramisu/setting.py:692
+#: tiramisu/setting.py:695
 msgid "the value of \"{0}\" is \"{1}\""
 msgstr ""
 
-#: tiramisu/setting.py:694
+#: tiramisu/setting.py:697
 msgid "the value of \"{0}\" is not \"{1}\""
 msgstr ""
 
@@ -733,45 +737,45 @@ msgstr ""
 msgid "option {0} not already exists in storage {1}"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:108
+#: tiramisu/storage/dictionary/option.py:110
 msgid "invalid default_multi value {0} for option {1}: {2}"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:148
+#: tiramisu/storage/dictionary/option.py:150
 #: tiramisu/storage/dictionary/value.py:234
 #: tiramisu/storage/sqlalchemy/option.py:666
 msgid "information's item not found: {0}"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:413
+#: tiramisu/storage/dictionary/option.py:415
 msgid "use impl_get_opt_by_path only with root OptionDescription"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:415
+#: tiramisu/storage/dictionary/option.py:417
 #: tiramisu/storage/sqlalchemy/option.py:730
 msgid "no option for path {0}"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:420
+#: tiramisu/storage/dictionary/option.py:422
 #: tiramisu/storage/sqlalchemy/option.py:740
 msgid "use impl_get_path_by_opt only with root OptionDescription"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:422
+#: tiramisu/storage/dictionary/option.py:424
 #: tiramisu/storage/sqlalchemy/option.py:741
 msgid "no option {0} found"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:469
+#: tiramisu/storage/dictionary/option.py:471
 msgid "cannot find dynpath"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:558
+#: tiramisu/storage/dictionary/option.py:560
 #: tiramisu/storage/sqlalchemy/option.py:894
 msgid "suffix and context needed if it's a dyn option"
 msgstr ""
 
-#: tiramisu/storage/dictionary/option.py:579
+#: tiramisu/storage/dictionary/option.py:581
 #: tiramisu/storage/sqlalchemy/option.py:926
 msgid "unknown Option {0} in OptionDescription {1}"
 msgstr ""