reset cache when permissive is added
authorEmmanuel Garette <egarette@cadoles.com>
Thu, 20 Apr 2017 09:20:37 +0000 (11:20 +0200)
committerEmmanuel Garette <egarette@cadoles.com>
Thu, 20 Apr 2017 09:20:37 +0000 (11:20 +0200)
test/test_permissive.py
tiramisu/setting.py
translations/fr/tiramisu.po
translations/tiramisu.pot

index 99d3ac9..423b9b5 100644 (file)
@@ -4,7 +4,7 @@ do_autopath()
 
 from py.test import raises
 
-from tiramisu.option import IntOption, OptionDescription
+from tiramisu.option import IntOption, UnicodeOption, OptionDescription
 from tiramisu.config import Config
 from tiramisu.error import PropertiesOptionError
 
@@ -199,3 +199,16 @@ def test_invalid_option_permissive():
     setting = config.cfgimpl_get_settings()
     config.read_write()
     raises(TypeError, "setting.setpermissive(['frozen', 'disabled',], u1)")
+
+
+def test_remove_option_permissive():
+    var1 = UnicodeOption('var1', '', u'value', properties=('hidden',))
+    od1 = OptionDescription('od1', '', [var1])
+    rootod = OptionDescription('rootod', '', [od1])
+    config = Config(rootod)
+    config.read_write()
+    raises(PropertiesOptionError, "config.od1.var1")
+    config.cfgimpl_get_settings().setpermissive(('hidden',), var1)
+    assert config.od1.var1 == u'value'
+    config.cfgimpl_get_settings().setpermissive(tuple(), var1)
+    raises(PropertiesOptionError, "config.od1.var1")
index 8a99795..74d2322 100644 (file)
@@ -303,6 +303,9 @@ class Property(object):
     def __repr__(self):
         return str(list(self._properties))
 
+    def get(self):
+        return tuple(self._properties)
+
 
 #____________________________________________________________
 class Settings(object):
@@ -505,7 +508,7 @@ class Settings(object):
                 opt_type = 'option'
             if 'frozen' in properties:
                 return PropertiesOptionError(_('cannot change the value for '
-                                               'option {0} this option is'
+                                               'option "{0}" this option is'
                                                ' frozen').format(
                                                    opt_or_descr.impl_getname()),
                                              props, self, datas, opt_type)
@@ -538,6 +541,7 @@ class Settings(object):
         if not isinstance(permissive, tuple):  # pragma: optional cover
             raise TypeError(_('permissive must be a tuple'))
         self._p_.setpermissive(path, permissive)
+        self._getcontext().cfgimpl_reset_cache()
 
     #____________________________________________________________
     def setowner(self, owner):
index a8d5fca..76681f6 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Tiramisu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-02-12 10:35+0100\n"
+"POT-Creation-Date: 2017-04-20 10:15+0200\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
 "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@@ -10,7 +10,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.11\n"
+"X-Generator: Poedit 1.8.12\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
@@ -47,8 +47,8 @@ msgstr "descr doit être une optiondescription pas un {0}"
 msgid "unknown group_type: {0}"
 msgstr "group_type inconnu: {0}"
 
-#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54
-#: tiramisu/value.py:756
+#: tiramisu/config.py:187 tiramisu/setting.py:338 tiramisu/value.py:54
+#: tiramisu/value.py:757
 msgid "the context does not exist anymore"
 msgstr "le context n'existe plus"
 
@@ -149,11 +149,11 @@ msgstr "ou"
 msgid " {} "
 msgstr " {} "
 
-#: tiramisu/error.py:81 tiramisu/setting.py:514
+#: tiramisu/error.py:81 tiramisu/setting.py:517
 msgid "property"
 msgstr "de la propriété"
 
-#: tiramisu/error.py:83 tiramisu/setting.py:516
+#: tiramisu/error.py:83 tiramisu/setting.py:519
 msgid "properties"
 msgstr "des propriétés"
 
@@ -161,7 +161,7 @@ msgstr "des propriétés"
 msgid "cannot access to {0} \"{1}\" because \"{2}\" has {3} {4}"
 msgstr "ne peut accéder à {0} \"{1}\" parce que \"{2}\" a {3} {4}"
 
-#: tiramisu/error.py:92 tiramisu/setting.py:517
+#: tiramisu/error.py:92 tiramisu/setting.py:520
 msgid "cannot access to {0} \"{1}\" because has {2} {3}"
 msgstr "ne peut accéder à l'{0} \"{1}\" a cause {2} {3}"
 
@@ -259,7 +259,7 @@ msgstr ""
 "attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", "
 "{3}"
 
-#: tiramisu/option/baseoption.py:551 tiramisu/option/baseoption.py:665
+#: tiramisu/option/baseoption.py:551 tiramisu/option/baseoption.py:671
 msgid "invalid value \"{}\", this value is already in \"{}\""
 msgstr "valeur invalide \"{}\", cette valeur est déjà dans \"{}\""
 
@@ -275,7 +275,7 @@ msgstr "\"{0}\" est une valeur invalide pour l'option \"{2}\" de type {1}"
 msgid "do_validation for {0}: error in value"
 msgstr "do_validation for {0} : erreur dans un la valeur"
 
-#: tiramisu/option/baseoption.py:652 tiramisu/option/baseoption.py:670
+#: tiramisu/option/baseoption.py:652 tiramisu/option/baseoption.py:676
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list"
 msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste"
 
@@ -283,88 +283,88 @@ msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste"
 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:679
+#: tiramisu/option/baseoption.py:685
 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:732 tiramisu/option/baseoption.py:736
+#: tiramisu/option/baseoption.py:738 tiramisu/option/baseoption.py:742
 msgid "cannot add consistency with submulti option"
 msgstr "ne peut ajouter de test de consistence a une option submulti"
 
-#: tiramisu/option/baseoption.py:738
+#: tiramisu/option/baseoption.py:744
 msgid "consistency must be set with an option"
 msgstr "consistency doit être configuré avec une option"
 
-#: tiramisu/option/baseoption.py:741 tiramisu/option/baseoption.py:748
+#: tiramisu/option/baseoption.py:747 tiramisu/option/baseoption.py:754
 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:744
+#: tiramisu/option/baseoption.py:750
 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:751
+#: tiramisu/option/baseoption.py:757
 msgid "cannot add consistency with itself"
 msgstr "ne peut ajouter une consistency avec lui même"
 
-#: tiramisu/option/baseoption.py:753
+#: tiramisu/option/baseoption.py:759
 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:770
+#: tiramisu/option/baseoption.py:777
 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:777
+#: tiramisu/option/baseoption.py:784
 msgid "consistency {0} not available for this option"
 msgstr "consistency {0} non valable pour cette option"
 
-#: tiramisu/option/baseoption.py:781
+#: tiramisu/option/baseoption.py:788
 msgid "unknow parameter {0} in consistency"
 msgstr "paramètre inconnu {0} dans un test de consistance"
 
-#: tiramisu/option/baseoption.py:845
+#: tiramisu/option/baseoption.py:853
 msgid "_cons_not_equal: {} are not different"
 msgstr "_cons_not_equal: {} sont différents"
 
-#: tiramisu/option/baseoption.py:848
+#: tiramisu/option/baseoption.py:856
 msgid "should be different from the value of {}"
 msgstr "devrait être différent de la valeur de {}"
 
-#: tiramisu/option/baseoption.py:850
+#: tiramisu/option/baseoption.py:858
 msgid "must be different from the value of {}"
 msgstr "doit être différent de la valeur de {}"
 
-#: tiramisu/option/baseoption.py:853
+#: tiramisu/option/baseoption.py:861
 msgid "value for {} should be different"
 msgstr "valeur pour {} devrait être différent"
 
-#: tiramisu/option/baseoption.py:855
+#: tiramisu/option/baseoption.py:863
 msgid "value for {} must be different"
 msgstr "valeur pour {} doit être différent"
 
-#: tiramisu/option/baseoption.py:914
+#: tiramisu/option/baseoption.py:922
 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:934
+#: tiramisu/option/baseoption.py:942
 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:940
+#: tiramisu/option/baseoption.py:948
 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:948
+#: tiramisu/option/baseoption.py:956
 msgid ""
 "malformed requirements for option: {0} require must have option, expected "
 "and action keys"
@@ -372,33 +372,33 @@ msgstr ""
 "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
 "option, expected et action"
 
-#: tiramisu/option/baseoption.py:955
+#: tiramisu/option/baseoption.py:963
 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:960
+#: tiramisu/option/baseoption.py:968
 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:964
+#: tiramisu/option/baseoption.py:972
 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:968
+#: tiramisu/option/baseoption.py:976
 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:972
+#: tiramisu/option/baseoption.py:980
 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:975
+#: tiramisu/option/baseoption.py:983
 msgid ""
 "malformed requirements multi option must not set as requires of non multi "
 "option {0}"
@@ -406,12 +406,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:981
+#: tiramisu/option/baseoption.py:989
 msgid "malformed requirements expected value must be valid for option {0}: {1}"
 msgstr ""
 "valeur de \"expected\" malformé, doit être valide pour l'option {0} : {1}"
 
-#: tiramisu/option/baseoption.py:1011
+#: tiramisu/option/baseoption.py:1019
 msgid "malformed symlinkoption must be an option for symlink {0}"
 msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
 
@@ -591,63 +591,63 @@ msgstr "allow_ip doit être un booléen"
 msgid "allow_without_dot must be a boolean"
 msgstr "allow_without_dot doit être un booléen"
 
-#: tiramisu/option/option.py:490
+#: tiramisu/option/option.py:510
 msgid "invalid length (min 1)"
 msgstr "longueur invalide (min 1)"
 
-#: tiramisu/option/option.py:492
+#: tiramisu/option/option.py:512
 msgid "invalid length (max {0})"
 msgstr "longueur invalide (max {0})"
 
-#: tiramisu/option/option.py:507
+#: tiramisu/option/option.py:527
 msgid "must not be an IP"
 msgstr "ne doit pas être une IP"
 
-#: tiramisu/option/option.py:514
+#: tiramisu/option/option.py:531
 msgid "must have dot"
 msgstr "doit avec un point"
 
-#: tiramisu/option/option.py:516
+#: tiramisu/option/option.py:533
 msgid "invalid length (max 255)"
 msgstr "longueur invalide (max 255)"
 
-#: tiramisu/option/option.py:527
+#: tiramisu/option/option.py:543
 msgid "some characters are uppercase"
 msgstr "des caractères sont en majuscule"
 
-#: tiramisu/option/option.py:530
+#: tiramisu/option/option.py:546
 msgid "some characters may cause problems"
 msgstr "des caractères peuvent poser problèmes"
 
-#: tiramisu/option/option.py:551
+#: tiramisu/option/option.py:555
 msgid "URL"
 msgstr "URL"
 
-#: tiramisu/option/option.py:559
+#: tiramisu/option/option.py:563
 msgid "must start with http:// or https://"
 msgstr "doit débuter par http:// ou https://"
 
-#: tiramisu/option/option.py:577
+#: tiramisu/option/option.py:581
 msgid "port must be an between 0 and 65536"
 msgstr "port doit être entre 0 et 65536"
 
-#: tiramisu/option/option.py:588
+#: tiramisu/option/option.py:592
 msgid "must ends with a valid resource name"
 msgstr "doit finir par un nom de ressource valide"
 
-#: tiramisu/option/option.py:609
+#: tiramisu/option/option.py:613
 msgid "email address"
 msgstr "adresse mail"
 
-#: tiramisu/option/option.py:616
+#: tiramisu/option/option.py:620
 msgid "username"
 msgstr "nom d'utilisateur"
 
-#: tiramisu/option/option.py:622
+#: tiramisu/option/option.py:626
 msgid "file name"
 msgstr "nom de fichier"
 
-#: tiramisu/option/option.py:627
+#: tiramisu/option/option.py:631
 msgid "date"
 msgstr "date"
 
@@ -767,37 +767,38 @@ msgstr ""
 "ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est "
 "calculée"
 
-#: tiramisu/setting.py:269 tiramisu/setting.py:435
+#: tiramisu/setting.py:269 tiramisu/setting.py:438
 msgid "cannot add those properties: {0}"
 msgstr "ne peut pas ajouter ces propriétés : {0}"
 
-#: tiramisu/setting.py:358
+#: tiramisu/setting.py:361
 msgid "you should only append/remove properties"
 msgstr "pour pouvait seulement ajouter/supprimer des propriétés"
 
-#: tiramisu/setting.py:362
+#: tiramisu/setting.py:365
 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:383
+#: tiramisu/setting.py:386
 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:507
-msgid "cannot change the value for option {0} this option is frozen"
+#: tiramisu/setting.py:510
+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"
+"ne peut modifier la valeur de l'option \"{0}\" cette option n'est pas "
+"modifiable"
 
-#: tiramisu/setting.py:539
+#: tiramisu/setting.py:542
 msgid "permissive must be a tuple"
 msgstr "permissive doit être un tuple"
 
-#: tiramisu/setting.py:546 tiramisu/value.py:546
+#: tiramisu/setting.py:549 tiramisu/value.py:549
 msgid "invalid generic owner {0}"
 msgstr "invalide owner générique {0}"
 
-#: tiramisu/setting.py:647
+#: tiramisu/setting.py:650
 msgid ""
 "malformed requirements imbrication detected for option: '{0}' with "
 "requirement on: '{1}'"
@@ -805,15 +806,15 @@ msgstr ""
 "imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
 "requirement sur : '{1}'"
 
-#: tiramisu/setting.py:672
+#: tiramisu/setting.py:675
 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:694
+#: tiramisu/setting.py:697
 msgid "the value of \"{0}\" is \"{1}\""
 msgstr "la valeur de \"{0}\" est \"{1}\""
 
-#: tiramisu/setting.py:696
+#: tiramisu/setting.py:699
 msgid "the value of \"{0}\" is not \"{1}\""
 msgstr "la valeur de \"{0}\" n'est pas \"{1}\""
 
@@ -891,55 +892,60 @@ msgstr "un espace de stockage dictionary ne peut être persistant"
 msgid "information's item not found {0}"
 msgstr "l'information de l'objet ne sont pas trouvé {0}"
 
-#: tiramisu/value.py:395
+#: tiramisu/value.py:397
 msgid "you should only set value with config"
 msgstr "vous devez seul affecter une valeur avec un config"
 
-#: tiramisu/value.py:507
+#: tiramisu/value.py:509
 msgid "owner only avalaible for an option"
 msgstr "owner seulement possible pour une option"
 
-#: tiramisu/value.py:551
+#: tiramisu/value.py:554
 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:685
+#: tiramisu/value.py:686
 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:722
+#: tiramisu/value.py:723
 msgid "{0} is already a Multi "
 msgstr "{0} est déjà une Multi"
 
-#: tiramisu/value.py:802
+#: tiramisu/value.py:806
 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:835
+#: tiramisu/value.py:839
 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:839
+#: tiramisu/value.py:843
 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:848
+#: tiramisu/value.py:852
 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:855
+#: tiramisu/value.py:859
 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:872
+#: tiramisu/value.py:876
 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:912
+#: tiramisu/value.py:916
 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 "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"
+
 #~ msgid "function \"{0}\" returns \"{1}\" for option \"{2}\""
 #~ msgstr "la fonction \"{0}\" retourne \"{1}\" pour l'option \"{2}\""
 
index b8c01a3..21c2fb7 100644 (file)
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2017-02-12 10:34+CET\n"
+"POT-Creation-Date: 2017-04-20 10:15+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"
@@ -39,8 +39,8 @@ msgstr ""
 msgid "unknown group_type: {0}"
 msgstr ""
 
-#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54
-#: tiramisu/value.py:756
+#: tiramisu/config.py:187 tiramisu/setting.py:338 tiramisu/value.py:54
+#: tiramisu/value.py:757
 msgid "the context does not exist anymore"
 msgstr ""
 
@@ -132,11 +132,11 @@ msgstr ""
 msgid " {} "
 msgstr ""
 
-#: tiramisu/error.py:81 tiramisu/setting.py:514
+#: tiramisu/error.py:81 tiramisu/setting.py:517
 msgid "property"
 msgstr ""
 
-#: tiramisu/error.py:83 tiramisu/setting.py:516
+#: tiramisu/error.py:83 tiramisu/setting.py:519
 msgid "properties"
 msgstr ""
 
@@ -144,7 +144,7 @@ msgstr ""
 msgid "cannot access to {0} \"{1}\" because \"{2}\" has {3} {4}"
 msgstr ""
 
-#: tiramisu/error.py:92 tiramisu/setting.py:517
+#: tiramisu/error.py:92 tiramisu/setting.py:520
 msgid "cannot access to {0} \"{1}\" because has {2} {3}"
 msgstr ""
 
@@ -232,7 +232,7 @@ msgstr ""
 msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:551 tiramisu/option/baseoption.py:665
+#: tiramisu/option/baseoption.py:551 tiramisu/option/baseoption.py:671
 msgid "invalid value \"{}\", this value is already in \"{}\""
 msgstr ""
 
@@ -248,7 +248,7 @@ msgstr ""
 msgid "do_validation for {0}: error in value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:652 tiramisu/option/baseoption.py:670
+#: tiramisu/option/baseoption.py:652 tiramisu/option/baseoption.py:676
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list"
 msgstr ""
 
@@ -256,111 +256,111 @@ msgstr ""
 msgid "invalid value \"{}\" for \"{}\" which must not be a list"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:679
+#: tiramisu/option/baseoption.py:685
 msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:732 tiramisu/option/baseoption.py:736
+#: tiramisu/option/baseoption.py:738 tiramisu/option/baseoption.py:742
 msgid "cannot add consistency with submulti option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:738
+#: tiramisu/option/baseoption.py:744
 msgid "consistency must be set with an option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:741 tiramisu/option/baseoption.py:748
+#: tiramisu/option/baseoption.py:747 tiramisu/option/baseoption.py:754
 msgid "almost one option in consistency is in a dynoptiondescription but not all"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:744
+#: tiramisu/option/baseoption.py:750
 msgid "option in consistency must be in same dynoptiondescription"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:751
+#: tiramisu/option/baseoption.py:757
 msgid "cannot add consistency with itself"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:753
+#: tiramisu/option/baseoption.py:759
 msgid "every options in consistency must be multi or none"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:770
+#: tiramisu/option/baseoption.py:777
 msgid "'{0}' ({1}) cannot add consistency, option is read-only"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:777
+#: tiramisu/option/baseoption.py:784
 msgid "consistency {0} not available for this option"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:781
+#: tiramisu/option/baseoption.py:788
 msgid "unknow parameter {0} in consistency"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:845
+#: tiramisu/option/baseoption.py:853
 msgid "_cons_not_equal: {} are not different"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:848
+#: tiramisu/option/baseoption.py:856
 msgid "should be different from the value of {}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:850
+#: tiramisu/option/baseoption.py:858
 msgid "must be different from the value of {}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:853
+#: tiramisu/option/baseoption.py:861
 msgid "value for {} should be different"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:855
+#: tiramisu/option/baseoption.py:863
 msgid "value for {} must be different"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:914
+#: tiramisu/option/baseoption.py:922
 msgid "default value not allowed if option: {0} is calculated"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:934
+#: tiramisu/option/baseoption.py:942
 msgid "malformed requirements type for option: {0}, must be a dict"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:940
+#: tiramisu/option/baseoption.py:948
 msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:948
+#: tiramisu/option/baseoption.py:956
 msgid "malformed requirements for option: {0} require must have option, expected and action keys"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:955
+#: tiramisu/option/baseoption.py:963
 msgid "malformed requirements for option: {0} action cannot be force_store_value"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:960
+#: tiramisu/option/baseoption.py:968
 msgid "malformed requirements for option: {0} inverse must be boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:964
+#: tiramisu/option/baseoption.py:972
 msgid "malformed requirements for option: {0} transitive must be boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:968
+#: tiramisu/option/baseoption.py:976
 msgid "malformed requirements for option: {0} same_action must be boolean"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:972
+#: tiramisu/option/baseoption.py:980
 msgid "malformed requirements must be an option in option {0}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:975
+#: tiramisu/option/baseoption.py:983
 msgid "malformed requirements multi option must not set as requires of non multi option {0}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:981
+#: tiramisu/option/baseoption.py:989
 msgid "malformed requirements expected value must be valid for option {0}: {1}"
 msgstr ""
 
-#: tiramisu/option/baseoption.py:1011
+#: tiramisu/option/baseoption.py:1019
 msgid "malformed symlinkoption must be an option for symlink {0}"
 msgstr ""
 
@@ -536,63 +536,63 @@ msgstr ""
 msgid "allow_without_dot must be a boolean"
 msgstr ""
 
-#: tiramisu/option/option.py:490
+#: tiramisu/option/option.py:510
 msgid "invalid length (min 1)"
 msgstr ""
 
-#: tiramisu/option/option.py:492
+#: tiramisu/option/option.py:512
 msgid "invalid length (max {0})"
 msgstr ""
 
-#: tiramisu/option/option.py:507
+#: tiramisu/option/option.py:527
 msgid "must not be an IP"
 msgstr ""
 
-#: tiramisu/option/option.py:514
+#: tiramisu/option/option.py:531
 msgid "must have dot"
 msgstr ""
 
-#: tiramisu/option/option.py:516
+#: tiramisu/option/option.py:533
 msgid "invalid length (max 255)"
 msgstr ""
 
-#: tiramisu/option/option.py:527
+#: tiramisu/option/option.py:543
 msgid "some characters are uppercase"
 msgstr ""
 
-#: tiramisu/option/option.py:530
+#: tiramisu/option/option.py:546
 msgid "some characters may cause problems"
 msgstr ""
 
-#: tiramisu/option/option.py:551
+#: tiramisu/option/option.py:555
 msgid "URL"
 msgstr ""
 
-#: tiramisu/option/option.py:559
+#: tiramisu/option/option.py:563
 msgid "must start with http:// or https://"
 msgstr ""
 
-#: tiramisu/option/option.py:577
+#: tiramisu/option/option.py:581
 msgid "port must be an between 0 and 65536"
 msgstr ""
 
-#: tiramisu/option/option.py:588
+#: tiramisu/option/option.py:592
 msgid "must ends with a valid resource name"
 msgstr ""
 
-#: tiramisu/option/option.py:609
+#: tiramisu/option/option.py:613
 msgid "email address"
 msgstr ""
 
-#: tiramisu/option/option.py:616
+#: tiramisu/option/option.py:620
 msgid "username"
 msgstr ""
 
-#: tiramisu/option/option.py:622
+#: tiramisu/option/option.py:626
 msgid "file name"
 msgstr ""
 
-#: tiramisu/option/option.py:627
+#: tiramisu/option/option.py:631
 msgid "date"
 msgstr ""
 
@@ -697,47 +697,47 @@ msgstr ""
 msgid "cannot append {0} property for option {1}: this property is calculated"
 msgstr ""
 
-#: tiramisu/setting.py:269 tiramisu/setting.py:435
+#: tiramisu/setting.py:269 tiramisu/setting.py:438
 msgid "cannot add those properties: {0}"
 msgstr ""
 
-#: tiramisu/setting.py:358
+#: tiramisu/setting.py:361
 msgid "you should only append/remove properties"
 msgstr ""
 
-#: tiramisu/setting.py:362
+#: tiramisu/setting.py:365
 msgid "opt and all_properties must not be set together in reset"
 msgstr ""
 
-#: tiramisu/setting.py:383
+#: tiramisu/setting.py:386
 msgid "if opt is not None, path should not be None in _getproperties"
 msgstr ""
 
-#: tiramisu/setting.py:507
-msgid "cannot change the value for option {0} this option is frozen"
+#: tiramisu/setting.py:510
+msgid "cannot change the value for option \"{0}\" this option is frozen"
 msgstr ""
 
-#: tiramisu/setting.py:539
+#: tiramisu/setting.py:542
 msgid "permissive must be a tuple"
 msgstr ""
 
-#: tiramisu/setting.py:546 tiramisu/value.py:546
+#: tiramisu/setting.py:549 tiramisu/value.py:549
 msgid "invalid generic owner {0}"
 msgstr ""
 
-#: tiramisu/setting.py:647
+#: tiramisu/setting.py:650
 msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
 msgstr ""
 
-#: tiramisu/setting.py:672
+#: tiramisu/setting.py:675
 msgid "option '{0}' has requirement's property error: {1} {2}"
 msgstr ""
 
-#: tiramisu/setting.py:694
+#: tiramisu/setting.py:697
 msgid "the value of \"{0}\" is \"{1}\""
 msgstr ""
 
-#: tiramisu/setting.py:696
+#: tiramisu/setting.py:699
 msgid "the value of \"{0}\" is not \"{1}\""
 msgstr ""
 
@@ -813,51 +813,51 @@ msgstr ""
 msgid "information's item not found {0}"
 msgstr ""
 
-#: tiramisu/value.py:395
+#: tiramisu/value.py:397
 msgid "you should only set value with config"
 msgstr ""
 
-#: tiramisu/value.py:507
+#: tiramisu/value.py:509
 msgid "owner only avalaible for an option"
 msgstr ""
 
-#: tiramisu/value.py:551
+#: tiramisu/value.py:554
 msgid "no value for {0} cannot change owner to {1}"
 msgstr ""
 
-#: tiramisu/value.py:685
+#: tiramisu/value.py:686
 msgid "can force cache only if cache is actived in config"
 msgstr ""
 
-#: tiramisu/value.py:722
+#: tiramisu/value.py:723
 msgid "{0} is already a Multi "
 msgstr ""
 
-#: tiramisu/value.py:802
+#: tiramisu/value.py:806
 msgid "cannot append a value on a multi option {0} which is a slave"
 msgstr ""
 
-#: tiramisu/value.py:835
+#: tiramisu/value.py:839
 msgid "cannot sort multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:839
+#: tiramisu/value.py:843
 msgid "cmp is not permitted in python v3 or greater"
 msgstr ""
 
-#: tiramisu/value.py:848
+#: tiramisu/value.py:852
 msgid "cannot reverse multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:855
+#: tiramisu/value.py:859
 msgid "cannot insert multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:872
+#: tiramisu/value.py:876
 msgid "cannot extend multi option {0} if master or slave"
 msgstr ""
 
-#: tiramisu/value.py:912
+#: tiramisu/value.py:916
 msgid "cannot pop a value on a multi option {0} which is a slave"
 msgstr ""