Merge branch 'master' into force-cache
authorEmmanuel Garette <egarette@cadoles.com>
Sat, 15 Mar 2014 09:09:19 +0000 (10:09 +0100)
committerEmmanuel Garette <egarette@cadoles.com>
Sat, 15 Mar 2014 09:09:19 +0000 (10:09 +0100)
Conflicts:
translations/fr/tiramisu.po
translations/tiramisu.pot

1  2 
tiramisu/config.py
translations/fr/tiramisu.po
translations/tiramisu.pot

diff --combined tiramisu/config.py
@@@ -448,17 -448,20 +448,20 @@@ class SubConfig(object)
          return pathsvalues
  
      def _make_sub_dict(self, opt, path, pathsvalues, _currpath, flatten):
-         if isinstance(opt, OptionDescription):
-             pathsvalues += getattr(self, path).make_dict(flatten,
-                                                          _currpath +
-                                                          path.split('.'))
-         else:
-             value = self._getattr(opt._name)
-             if flatten:
-                 name = opt._name
+         try:
+             if isinstance(opt, OptionDescription):
+                 pathsvalues += getattr(self, path).make_dict(flatten,
+                                                              _currpath +
+                                                              path.split('.'))
              else:
-                 name = '.'.join(_currpath + [opt._name])
-             pathsvalues.append((name, value))
+                 value = self._getattr(opt._name)
+                 if flatten:
+                     name = opt._name
+                 else:
+                     name = '.'.join(_currpath + [opt._name])
+                 pathsvalues.append((name, value))
+         except PropertiesOptionError:
+             pass
  
      def cfgimpl_get_path(self):
          descr = self.cfgimpl_get_description()
@@@ -716,5 -719,19 +719,5 @@@ class MetaConfig(GroupConfig)
  
  
  def mandatory_warnings(config):
 -    """convenience function to trace Options that are mandatory and
 -    where no value has been set
 -
 -    :returns: generator of mandatory Option's path
 -
 -    """
 -    #if value in cache, properties are not calculated
 -    config.cfgimpl_reset_cache(only=('values',))
 -    for path in config.cfgimpl_get_description().impl_getpaths(
 -            include_groups=True):
 -        try:
 -            config._getattr(path, force_properties=frozenset(('mandatory',)))
 -        except PropertiesOptionError as err:
 -            if err.proptype == ['mandatory']:
 -                yield path
 -    config.cfgimpl_reset_cache(only=('values',))
 +    #only for retro-compatibility
 +    config.cfgimpl_get_values().mandatory_warnings()
@@@ -2,7 -2,7 +2,7 @@@ msgid "
  msgstr ""
  "Project-Id-Version: Tiramisu\n"
  "Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2014-03-09 20:14+CET\n"
+ "POT-Creation-Date: 2014-03-12 21:49+CET\n"
  "PO-Revision-Date: \n"
  "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
  "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@@@ -30,7 -30,7 +30,7 @@@ msgid "unknown group_type: {0}
  msgstr "group_type inconnu: {0}"
  
  #: tiramisu/config.py:164 tiramisu/setting.py:339 tiramisu/value.py:57
 -#: tiramisu/value.py:449
 +#: tiramisu/value.py:485
  msgid "the context does not exist anymore"
  msgstr "le context n'existe plus"
  
@@@ -130,260 -130,289 +130,289 @@@ msgstr "
  "params définis pour une fonction callback mais par de callback encore "
  "définis pour l'option {0}"
  
- #: tiramisu/option.py:423 tiramisu/option.py:433
+ #: tiramisu/option.py:425 tiramisu/option.py:450
  msgid "invalid value for option {0}: {1}"
  msgstr "valeur invalide pour l'option {0} : {1}"
  
- #: tiramisu/option.py:450
+ #: tiramisu/option.py:444
+ msgid "warning on the value of the option {0}: {1}"
+ msgstr "avertissement sur la valeur de l'option {0} : {1}"
+ #: tiramisu/option.py:461
  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:506
- msgid "consistency should be set with an option"
+ #: tiramisu/option.py:519
+ msgid "consistency must be set with an option"
  msgstr "consistency doit être configuré avec une option"
  
- #: tiramisu/option.py:508
+ #: tiramisu/option.py:521
  msgid "cannot add consistency with itself"
  msgstr "ne peut ajouter une consistency avec lui même"
  
- #: tiramisu/option.py:510
- msgid "every options in consistency should be multi or none"
+ #: tiramisu/option.py:523
+ msgid "every options in consistency must be multi or none"
  msgstr ""
- "toutes les options d'une consistency devrait être multi ou ne pas l'être"
+ "toutes les options d'une consistency doivent être multi ou ne pas l'être"
+ #: tiramisu/option.py:544
+ 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:530
- msgid "same value for {0} and {1}"
- msgstr "même valeur pour {0} et {1}"
+ #: tiramisu/option.py:546
+ 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:623
+ #: tiramisu/option.py:640
  msgid "values must be a tuple for {0}"
  msgstr "values doit être un tuple pour {0}"
  
- #: tiramisu/option.py:626
+ #: tiramisu/option.py:643
  msgid "open_values must be a boolean for {0}"
  msgstr "open_values doit être un booléen pour {0}"
  
- #: tiramisu/option.py:648
+ #: tiramisu/option.py:665
  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:660
+ #: tiramisu/option.py:677
  msgid "invalid boolean"
  msgstr "booléen invalide"
  
- #: tiramisu/option.py:670
+ #: tiramisu/option.py:687
  msgid "invalid integer"
  msgstr "nombre invalide"
  
- #: tiramisu/option.py:680
+ #: tiramisu/option.py:697
  msgid "invalid float"
  msgstr "invalide nombre flottan"
  
- #: tiramisu/option.py:690
+ #: tiramisu/option.py:707
  msgid "invalid string"
  msgstr "invalide caractère"
  
- #: tiramisu/option.py:707
+ #: tiramisu/option.py:724
  msgid "invalid unicode"
  msgstr "invalide unicode"
  
- #: tiramisu/option.py:719
+ #: tiramisu/option.py:736
  msgid "malformed symlinkoption must be an option for symlink {0}"
  msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
  
- #: tiramisu/option.py:770 tiramisu/option.py:773 tiramisu/option.py:778
+ #: tiramisu/option.py:787 tiramisu/option.py:790 tiramisu/option.py:795
  msgid "invalid IP"
  msgstr "adresse IP invalide"
  
- #: tiramisu/option.py:783
- msgid "invalid IP, mustn't not be in reserved class"
- msgstr "adresse IP invalide, ne doit pas être d'une classe reservée"
+ #: tiramisu/option.py:801
+ msgid "IP shouldn't be in reserved class"
+ msgstr "l'adresse IP ne devrait pas être d'une classe réservée"
+ #: tiramisu/option.py:803
+ 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:807
+ msgid "IP should be in private class"
+ msgstr "l'adresse IP devrait être dans une classe privée"
  
- #: tiramisu/option.py:785
+ #: tiramisu/option.py:809
  msgid "invalid IP, must be in private class"
  msgstr "adresse IP invalide, doit être dans la classe privée"
  
+ #: tiramisu/option.py:814 tiramisu/option.py:989
+ msgid "invalid len for vals"
+ msgstr "longueur invalide pour vals"
+ #: tiramisu/option.py:820
+ 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:823
+ 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:864
  msgid "inconsistency in allowed range"
  msgstr "inconsistence dans la plage autorisée"
  
- #: tiramisu/option.py:828
+ #: tiramisu/option.py:869
  msgid "max value is empty"
  msgstr "la valeur maximum est vide"
  
- #: tiramisu/option.py:845
+ #: tiramisu/option.py:886
  msgid "invalid port, range must have two values only"
  msgstr "port invalide, une plage doit avoir deux valeurs seulement"
  
- #: tiramisu/option.py:848
+ #: tiramisu/option.py:889
  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:857
+ #: tiramisu/option.py:898
  msgid "invalid port"
  msgstr "port invalide"
  
- #: tiramisu/option.py:859
+ #: tiramisu/option.py:900
  msgid "invalid port, must be an between {0} and {1}"
  msgstr "port invalide, port doit être entre {0} et {1}"
  
- #: tiramisu/option.py:873
+ #: tiramisu/option.py:914
  msgid "invalid network address"
  msgstr "adresse réseau invalide"
  
- #: tiramisu/option.py:878
- msgid "invalid network address, must not be in reserved class"
- msgstr "adresse réseau invalide, ne doit pas être dans la classe reservée"
+ #: tiramisu/option.py:920
+ msgid "network address shouldn't be in reserved class"
+ msgstr "l'adresse réseau ne devait pas être dans la classe réservée"
+ #: tiramisu/option.py:922
+ 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:890
+ #: tiramisu/option.py:935
  msgid "invalid netmask address"
  msgstr "masque de sous-réseau invalide"
  
- #: tiramisu/option.py:906
+ #: tiramisu/option.py:952
  msgid "invalid len for opts"
  msgstr "longueur invalide pour opts"
  
- #: tiramisu/option.py:920
+ #: tiramisu/option.py:966
  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:925
+ #: tiramisu/option.py:971
  msgid "invalid network {0} ({1}) with netmask {2}"
  msgstr "réseau invalide {0} ({1}) avec masque {2}"
  
- #: tiramisu/option.py:939
+ #: tiramisu/option.py:985
  msgid "invalid broadcast address"
  msgstr "adresse de broadcast invalide"
  
- #: tiramisu/option.py:943
- msgid "invalid len for vals"
- msgstr "longueur invalide pour vals"
- #: tiramisu/option.py:948
+ #: tiramisu/option.py:994
  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:970
+ #: tiramisu/option.py:1016
  msgid "unknown type_ {0} for hostname"
  msgstr "type_ inconnu {0} pour le nom d'hôte"
  
- #: tiramisu/option.py:973
+ #: tiramisu/option.py:1019
  msgid "allow_ip must be a boolean"
  msgstr "allow_ip doit être un booléen"
  
- #: tiramisu/option.py:975
+ #: tiramisu/option.py:1021
  msgid "allow_without_dot must be a boolean"
  msgstr "allow_without_dot doit être un booléen"
  
- #: tiramisu/option.py:1019
+ #: tiramisu/option.py:1065
  msgid "invalid domainname, must have dot"
  msgstr "nom de domaine invalide, doit avoir un point"
  
- #: tiramisu/option.py:1021
+ #: tiramisu/option.py:1067
  msgid "invalid domainname's length (max 255)"
  msgstr "longueur du nom de domaine invalide (maximum {1})"
  
- #: tiramisu/option.py:1023
+ #: tiramisu/option.py:1069
  msgid "invalid domainname's length (min 2)"
  msgstr "longueur du nom de domaine invalide (minimum 2)"
  
- #: tiramisu/option.py:1025
+ #: tiramisu/option.py:1071
  msgid "invalid domainname"
  msgstr "nom de domaine invalide"
  
- #: tiramisu/option.py:1038
- msgid "invalid email address, should contains one @"
- msgstr "adresse email invalide, devrait contenir un @"
+ #: tiramisu/option.py:1084
+ msgid "invalid email address, must contains one @"
+ msgstr "adresse email invalide, doit contenir un @"
  
- #: tiramisu/option.py:1041
+ #: tiramisu/option.py:1087
  msgid "invalid username in email address"
  msgstr "nom d'utilisateur invalide dans une adresse email"
  
- #: tiramisu/option.py:1054
- msgid "invalid url, should start with http:// or https://"
- msgstr "URL invalide, devrait démarré avec http:// ou https://"
+ #: tiramisu/option.py:1100
+ msgid "invalid url, must start with http:// or https://"
+ msgstr "URL invalide, doit démarrer avec http:// ou https://"
  
- #: tiramisu/option.py:1073
+ #: tiramisu/option.py:1119
  msgid "invalid url, port must be an between 0 and 65536"
  msgstr "URL invalide, port doit être entre 0 et 65536"
  
- #: tiramisu/option.py:1079
- msgid "invalid url, should ends with filename"
- msgstr "URL invalide, devrait finir avec un nom de fichier"
+ #: tiramisu/option.py:1125
+ msgid "invalid url, must ends with filename"
+ msgstr "URL invalide, doit finir avec un nom de fichier"
  
- #: tiramisu/option.py:1091
+ #: tiramisu/option.py:1137
  msgid "invalid username"
  msgstr "utilisateur invalide"
  
- #: tiramisu/option.py:1102
+ #: tiramisu/option.py:1148
  msgid "invalid filename"
  msgstr "nom de fichier invalide"
  
- #: tiramisu/option.py:1129
+ #: tiramisu/option.py:1175
  msgid "duplicate option name: {0}"
  msgstr "nom de l'option dupliqué : {0}"
  
- #: tiramisu/option.py:1147
+ #: tiramisu/option.py:1193
  msgid "unknown Option {0} in OptionDescription {1}"
  msgstr "Option {0} inconnue pour l'OptionDescription {1}"
  
- #: tiramisu/option.py:1198
+ #: tiramisu/option.py:1244
  msgid "duplicate option: {0}"
  msgstr "option dupliquée : {0}"
  
- #: tiramisu/option.py:1228
+ #: tiramisu/option.py:1275
  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:1236
+ #: tiramisu/option.py:1283
  msgid "no option for path {0}"
  msgstr "pas d'option pour le chemin {0}"
  
- #: tiramisu/option.py:1242
+ #: tiramisu/option.py:1289
  msgid "no option {0} found"
  msgstr "pas d'option {0} trouvée"
  
- #: tiramisu/option.py:1252
+ #: tiramisu/option.py:1299
  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:1264
+ #: tiramisu/option.py:1311
  msgid "master group {0} shall not have a subgroup"
  msgstr "groupe maître {0} ne doit pas avoir de sous-groupe"
  
- #: tiramisu/option.py:1267
+ #: tiramisu/option.py:1314
  msgid "master group {0} shall not have a symlinkoption"
  msgstr "groupe maître {0} ne doit pas avoir de symlinkoption"
  
- #: tiramisu/option.py:1270
+ #: tiramisu/option.py:1317
  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:1280
+ #: tiramisu/option.py:1327
  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:1288
+ #: tiramisu/option.py:1335
  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:1296
+ #: tiramisu/option.py:1343
  msgid "group_type: {0} not allowed"
  msgstr "group_type : {0} non autorisé"
  
- #: tiramisu/option.py:1385
+ #: tiramisu/option.py:1443
  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:1402
+ #: tiramisu/option.py:1460
  msgid ""
  "malformed requirements for option: {0} require must have option, expected "
  "and action keys"
@@@ -391,68 -420,68 +420,68 @@@ msgstr "
  "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
  "option, expected et action"
  
- #: tiramisu/option.py:1407
+ #: tiramisu/option.py:1465
  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.py:1411
+ #: tiramisu/option.py:1469
  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.py:1415
+ #: tiramisu/option.py:1473
  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.py:1419
+ #: tiramisu/option.py:1477
  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.py:1422
- msgid "malformed requirements option {0} should not be a multi"
+ #: tiramisu/option.py:1480
+ 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.py:1428
+ #: tiramisu/option.py:1486
  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:1433
+ #: tiramisu/option.py:1491
  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:1458
- msgid "{0} should be a function"
+ #: tiramisu/option.py:1516
+ msgid "{0} must be a function"
  msgstr "{0} doit être une fonction"
  
- #: tiramisu/option.py:1461
- msgid "{0}_params should be a dict"
- msgstr "{0}_params devrait être un dict"
+ #: tiramisu/option.py:1519
+ msgid "{0}_params must be a dict"
+ msgstr "{0}_params doit être un dict"
  
- #: tiramisu/option.py:1464
- msgid "{0}_params with key {1} should not have length different to 1"
+ #: tiramisu/option.py:1522
+ msgid "{0}_params with key {1} mustn't have length different to 1"
  msgstr ""
- "{0}_params avec la clef {1} devrait ne pas avoir une longueur différent de 1"
+ "{0}_params avec la clef {1} ne doit pas avoir une longueur différent de 1"
  
- #: tiramisu/option.py:1468
- msgid "{0}_params should be tuple for key \"{1}\""
- msgstr "{0}_params devrait être un tuple pour la clef \"{1}\""
+ #: tiramisu/option.py:1526
+ msgid "{0}_params must be tuple for key \"{1}\""
+ msgstr "{0}_params doit être un tuple pour la clef \"{1}\""
  
- #: tiramisu/option.py:1474
+ #: tiramisu/option.py:1532
  msgid "validator not support tuple"
  msgstr "validator n'accepte pas de tuple"
  
- #: tiramisu/option.py:1477
- msgid "{0}_params should have an option not a {0} for first argument"
- msgstr "{0}_params devrait avoir une option pas un {0} pour premier argument"
+ #: tiramisu/option.py:1535
+ 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:1481
- msgid "{0}_params should have a boolean not a {0} for second argument"
- msgstr "{0}_params devrait avoir un boolean pas un {0} pour second argument"
+ #: tiramisu/option.py:1539
+ 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:116
  msgid "can't rebind {0}"
@@@ -477,24 -506,24 +506,24 @@@ msgid "if opt is not None, path should 
  msgstr ""
  "si opt n'est pas None, path devrait ne pas être à None dans _getproperties"
  
 -#: tiramisu/setting.py:483
 +#: tiramisu/setting.py:487
  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:489
 +#: tiramisu/setting.py:493
  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:507
 +#: tiramisu/setting.py:511
  msgid "permissive must be a tuple"
  msgstr "permissive doit être un tuple"
  
 -#: tiramisu/setting.py:514 tiramisu/value.py:334
 +#: tiramisu/setting.py:518 tiramisu/value.py:334
  msgid "invalid generic owner {0}"
  msgstr "invalide owner générique {0}"
  
 -#: tiramisu/setting.py:602
 +#: tiramisu/setting.py:606
  msgid ""
  "malformed requirements imbrication detected for option: '{0}' with "
  "requirement on: '{1}'"
@@@ -502,7 -531,7 +531,7 @@@ msgstr "
  "imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
  "requirement sur : '{1}'"
  
 -#: tiramisu/setting.py:613
 +#: tiramisu/setting.py:617
  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}"
  
@@@ -531,48 -560,43 +560,48 @@@ msgstr "un espace de stockage dictionar
  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:426
 +#: tiramisu/value.py:423
 +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:462
  msgid "{0} is already a Multi "
  msgstr "{0} est déjà une Multi"
  
 -#: tiramisu/value.py:462 tiramisu/value.py:526
 +#: tiramisu/value.py:498 tiramisu/value.py:562
  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:498
 +#: tiramisu/value.py:534
  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:536
 +#: tiramisu/value.py:572
  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:540
 +#: tiramisu/value.py:576
  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:549
 +#: tiramisu/value.py:585
  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:557
 +#: tiramisu/value.py:593
  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:565
 +#: tiramisu/value.py:601
  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:576
 +#: tiramisu/value.py:612
  msgid "invalid value {0} for option {1}: {2}"
  msgstr "valeur invalide {0} pour l'option {1} : {2}"
  
 -#: tiramisu/value.py:594
 +#: tiramisu/value.py:630
  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"
  
@@@ -5,7 -5,7 +5,7 @@@
  msgid ""
  msgstr ""
  "Project-Id-Version: PACKAGE VERSION\n"
- "POT-Creation-Date: 2014-03-09 20:14+CET\n"
+ "POT-Creation-Date: 2014-03-12 21:49+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"
@@@ -28,7 -28,7 +28,7 @@@ msgid "unknown group_type: {0}
  msgstr ""
  
  #: tiramisu/config.py:164 tiramisu/setting.py:339 tiramisu/value.py:57
 -#: tiramisu/value.py:449
 +#: tiramisu/value.py:485
  msgid "the context does not exist anymore"
  msgstr ""
  
@@@ -120,308 -120,336 +120,336 @@@ msgstr "
  msgid "params defined for a callback function but no callback defined yet for option {0}"
  msgstr ""
  
- #: tiramisu/option.py:423 tiramisu/option.py:433
+ #: tiramisu/option.py:425 tiramisu/option.py:450
  msgid "invalid value for option {0}: {1}"
  msgstr ""
  
- #: tiramisu/option.py:450
+ #: tiramisu/option.py:444
+ msgid "warning on the value of the option {0}: {1}"
+ msgstr ""
+ #: tiramisu/option.py:461
  msgid "invalid value {0} for option {1} which must be a list"
  msgstr ""
  
- #: tiramisu/option.py:506
- msgid "consistency should be set with an option"
+ #: tiramisu/option.py:519
+ msgid "consistency must be set with an option"
  msgstr ""
  
- #: tiramisu/option.py:508
+ #: tiramisu/option.py:521
  msgid "cannot add consistency with itself"
  msgstr ""
  
- #: tiramisu/option.py:510
- msgid "every options in consistency should be multi or none"
+ #: tiramisu/option.py:523
+ msgid "every options in consistency must be multi or none"
+ msgstr ""
+ #: tiramisu/option.py:544
+ msgid "same value for {0} and {1}, should be different"
  msgstr ""
  
- #: tiramisu/option.py:530
- msgid "same value for {0} and {1}"
+ #: tiramisu/option.py:546
+ msgid "same value for {0} and {1}, must be different"
  msgstr ""
  
- #: tiramisu/option.py:623
+ #: tiramisu/option.py:640
  msgid "values must be a tuple for {0}"
  msgstr ""
  
- #: tiramisu/option.py:626
+ #: tiramisu/option.py:643
  msgid "open_values must be a boolean for {0}"
  msgstr ""
  
- #: tiramisu/option.py:648
+ #: tiramisu/option.py:665
  msgid "value {0} is not permitted, only {1} is allowed"
  msgstr ""
  
- #: tiramisu/option.py:660
+ #: tiramisu/option.py:677
  msgid "invalid boolean"
  msgstr ""
  
- #: tiramisu/option.py:670
+ #: tiramisu/option.py:687
  msgid "invalid integer"
  msgstr ""
  
- #: tiramisu/option.py:680
+ #: tiramisu/option.py:697
  msgid "invalid float"
  msgstr ""
  
- #: tiramisu/option.py:690
+ #: tiramisu/option.py:707
  msgid "invalid string"
  msgstr ""
  
- #: tiramisu/option.py:707
+ #: tiramisu/option.py:724
  msgid "invalid unicode"
  msgstr ""
  
- #: tiramisu/option.py:719
+ #: tiramisu/option.py:736
  msgid "malformed symlinkoption must be an option for symlink {0}"
  msgstr ""
  
- #: tiramisu/option.py:770 tiramisu/option.py:773 tiramisu/option.py:778
+ #: tiramisu/option.py:787 tiramisu/option.py:790 tiramisu/option.py:795
  msgid "invalid IP"
  msgstr ""
  
- #: tiramisu/option.py:783
- msgid "invalid IP, mustn't not be in reserved class"
+ #: tiramisu/option.py:801
+ msgid "IP shouldn't be in reserved class"
+ msgstr ""
+ #: tiramisu/option.py:803
+ msgid "invalid IP, mustn't be in reserved class"
  msgstr ""
  
- #: tiramisu/option.py:785
+ #: tiramisu/option.py:807
+ msgid "IP should be in private class"
+ msgstr ""
+ #: tiramisu/option.py:809
  msgid "invalid IP, must be in private class"
  msgstr ""
  
+ #: tiramisu/option.py:814 tiramisu/option.py:989
+ msgid "invalid len for vals"
+ msgstr ""
+ #: tiramisu/option.py:820
+ msgid "IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
+ msgstr ""
  #: tiramisu/option.py:823
+ msgid "invalid IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
+ msgstr ""
+ #: tiramisu/option.py:864
  msgid "inconsistency in allowed range"
  msgstr ""
  
- #: tiramisu/option.py:828
+ #: tiramisu/option.py:869
  msgid "max value is empty"
  msgstr ""
  
- #: tiramisu/option.py:845
+ #: tiramisu/option.py:886
  msgid "invalid port, range must have two values only"
  msgstr ""
  
- #: tiramisu/option.py:848
+ #: tiramisu/option.py:889
  msgid "invalid port, first port in range must be smaller than the second one"
  msgstr ""
  
- #: tiramisu/option.py:857
+ #: tiramisu/option.py:898
  msgid "invalid port"
  msgstr ""
  
- #: tiramisu/option.py:859
+ #: tiramisu/option.py:900
  msgid "invalid port, must be an between {0} and {1}"
  msgstr ""
  
- #: tiramisu/option.py:873
+ #: tiramisu/option.py:914
  msgid "invalid network address"
  msgstr ""
  
- #: tiramisu/option.py:878
- msgid "invalid network address, must not be in reserved class"
+ #: tiramisu/option.py:920
+ msgid "network address shouldn't be in reserved class"
+ msgstr ""
+ #: tiramisu/option.py:922
+ msgid "invalid network address, mustn't be in reserved class"
  msgstr ""
  
- #: tiramisu/option.py:890
+ #: tiramisu/option.py:935
  msgid "invalid netmask address"
  msgstr ""
  
- #: tiramisu/option.py:906
+ #: tiramisu/option.py:952
  msgid "invalid len for opts"
  msgstr ""
  
- #: tiramisu/option.py:920
+ #: tiramisu/option.py:966
  msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
  msgstr ""
  
- #: tiramisu/option.py:925
+ #: tiramisu/option.py:971
  msgid "invalid network {0} ({1}) with netmask {2}"
  msgstr ""
  
- #: tiramisu/option.py:939
+ #: tiramisu/option.py:985
  msgid "invalid broadcast address"
  msgstr ""
  
- #: tiramisu/option.py:943
- msgid "invalid len for vals"
- msgstr ""
- #: tiramisu/option.py:948
+ #: tiramisu/option.py:994
  msgid "invalid broadcast {0} ({1}) with network {2} ({3}) and netmask {4} ({5})"
  msgstr ""
  
- #: tiramisu/option.py:970
+ #: tiramisu/option.py:1016
  msgid "unknown type_ {0} for hostname"
  msgstr ""
  
- #: tiramisu/option.py:973
+ #: tiramisu/option.py:1019
  msgid "allow_ip must be a boolean"
  msgstr ""
  
- #: tiramisu/option.py:975
+ #: tiramisu/option.py:1021
  msgid "allow_without_dot must be a boolean"
  msgstr ""
  
- #: tiramisu/option.py:1019
+ #: tiramisu/option.py:1065
  msgid "invalid domainname, must have dot"
  msgstr ""
  
- #: tiramisu/option.py:1021
+ #: tiramisu/option.py:1067
  msgid "invalid domainname's length (max 255)"
  msgstr ""
  
- #: tiramisu/option.py:1023
+ #: tiramisu/option.py:1069
  msgid "invalid domainname's length (min 2)"
  msgstr ""
  
- #: tiramisu/option.py:1025
+ #: tiramisu/option.py:1071
  msgid "invalid domainname"
  msgstr ""
  
- #: tiramisu/option.py:1038
- msgid "invalid email address, should contains one @"
+ #: tiramisu/option.py:1084
+ msgid "invalid email address, must contains one @"
  msgstr ""
  
- #: tiramisu/option.py:1041
+ #: tiramisu/option.py:1087
  msgid "invalid username in email address"
  msgstr ""
  
- #: tiramisu/option.py:1054
- msgid "invalid url, should start with http:// or https://"
+ #: tiramisu/option.py:1100
+ msgid "invalid url, must start with http:// or https://"
  msgstr ""
  
- #: tiramisu/option.py:1073
+ #: tiramisu/option.py:1119
  msgid "invalid url, port must be an between 0 and 65536"
  msgstr ""
  
- #: tiramisu/option.py:1079
- msgid "invalid url, should ends with filename"
+ #: tiramisu/option.py:1125
+ msgid "invalid url, must ends with filename"
  msgstr ""
  
- #: tiramisu/option.py:1091
+ #: tiramisu/option.py:1137
  msgid "invalid username"
  msgstr ""
  
- #: tiramisu/option.py:1102
+ #: tiramisu/option.py:1148
  msgid "invalid filename"
  msgstr ""
  
- #: tiramisu/option.py:1129
+ #: tiramisu/option.py:1175
  msgid "duplicate option name: {0}"
  msgstr ""
  
- #: tiramisu/option.py:1147
+ #: tiramisu/option.py:1193
  msgid "unknown Option {0} in OptionDescription {1}"
  msgstr ""
  
- #: tiramisu/option.py:1198
+ #: tiramisu/option.py:1244
  msgid "duplicate option: {0}"
  msgstr ""
  
- #: tiramisu/option.py:1228
+ #: tiramisu/option.py:1275
  msgid "consistency with option {0} which is not in Config"
  msgstr ""
  
- #: tiramisu/option.py:1236
+ #: tiramisu/option.py:1283
  msgid "no option for path {0}"
  msgstr ""
  
- #: tiramisu/option.py:1242
+ #: tiramisu/option.py:1289
  msgid "no option {0} found"
  msgstr ""
  
- #: tiramisu/option.py:1252
+ #: tiramisu/option.py:1299
  msgid "cannot change group_type if already set (old {0}, new {1})"
  msgstr ""
  
- #: tiramisu/option.py:1264
+ #: tiramisu/option.py:1311
  msgid "master group {0} shall not have a subgroup"
  msgstr ""
  
- #: tiramisu/option.py:1267
+ #: tiramisu/option.py:1314
  msgid "master group {0} shall not have a symlinkoption"
  msgstr ""
  
- #: tiramisu/option.py:1270
+ #: tiramisu/option.py:1317
  msgid "not allowed option {0} in group {1}: this option is not a multi"
  msgstr ""
  
- #: tiramisu/option.py:1280
+ #: tiramisu/option.py:1327
  msgid "master group with wrong master name for {0}"
  msgstr ""
  
- #: tiramisu/option.py:1288
+ #: tiramisu/option.py:1335
  msgid "callback of master's option shall not refered a slave's ones"
  msgstr ""
  
- #: tiramisu/option.py:1296
+ #: tiramisu/option.py:1343
  msgid "group_type: {0} not allowed"
  msgstr ""
  
- #: tiramisu/option.py:1385
+ #: tiramisu/option.py:1443
  msgid "malformed requirements type for option: {0}, must be a dict"
  msgstr ""
  
- #: tiramisu/option.py:1402
+ #: tiramisu/option.py:1460
  msgid "malformed requirements for option: {0} require must have option, expected and action keys"
  msgstr ""
  
- #: tiramisu/option.py:1407
+ #: tiramisu/option.py:1465
  msgid "malformed requirements for option: {0} inverse must be boolean"
  msgstr ""
  
- #: tiramisu/option.py:1411
+ #: tiramisu/option.py:1469
  msgid "malformed requirements for option: {0} transitive must be boolean"
  msgstr ""
  
- #: tiramisu/option.py:1415
+ #: tiramisu/option.py:1473
  msgid "malformed requirements for option: {0} same_action must be boolean"
  msgstr ""
  
- #: tiramisu/option.py:1419
+ #: tiramisu/option.py:1477
  msgid "malformed requirements must be an option in option {0}"
  msgstr ""
  
- #: tiramisu/option.py:1422
- msgid "malformed requirements option {0} should not be a multi"
+ #: tiramisu/option.py:1480
+ msgid "malformed requirements option {0} must not be a multi"
  msgstr ""
  
- #: tiramisu/option.py:1428
+ #: tiramisu/option.py:1486
  msgid "malformed requirements second argument must be valid for option {0}: {1}"
  msgstr ""
  
- #: tiramisu/option.py:1433
+ #: tiramisu/option.py:1491
  msgid "inconsistency in action types for option: {0} action: {1}"
  msgstr ""
  
- #: tiramisu/option.py:1458
- msgid "{0} should be a function"
+ #: tiramisu/option.py:1516
+ msgid "{0} must be a function"
  msgstr ""
  
- #: tiramisu/option.py:1461
- msgid "{0}_params should be a dict"
+ #: tiramisu/option.py:1519
+ msgid "{0}_params must be a dict"
  msgstr ""
  
- #: tiramisu/option.py:1464
- msgid "{0}_params with key {1} should not have length different to 1"
+ #: tiramisu/option.py:1522
+ msgid "{0}_params with key {1} mustn't have length different to 1"
  msgstr ""
  
- #: tiramisu/option.py:1468
- msgid "{0}_params should be tuple for key \"{1}\""
+ #: tiramisu/option.py:1526
+ msgid "{0}_params must be tuple for key \"{1}\""
  msgstr ""
  
- #: tiramisu/option.py:1474
+ #: tiramisu/option.py:1532
  msgid "validator not support tuple"
  msgstr ""
  
- #: tiramisu/option.py:1477
- msgid "{0}_params should have an option not a {0} for first argument"
+ #: tiramisu/option.py:1535
+ msgid "{0}_params must have an option not a {0} for first argument"
  msgstr ""
  
- #: tiramisu/option.py:1481
- msgid "{0}_params should have a boolean not a {0} for second argument"
+ #: tiramisu/option.py:1539
+ msgid "{0}_params must have a boolean not a {0} for second argument"
  msgstr ""
  
  #: tiramisu/setting.py:116
@@@ -444,27 -472,27 +472,27 @@@ msgstr "
  msgid "if opt is not None, path should not be None in _getproperties"
  msgstr ""
  
 -#: tiramisu/setting.py:483
 +#: tiramisu/setting.py:487
  msgid "cannot change the value for option {0} this option is frozen"
  msgstr ""
  
 -#: tiramisu/setting.py:489
 +#: tiramisu/setting.py:493
  msgid "trying to access to an option named: {0} with properties {1}"
  msgstr ""
  
 -#: tiramisu/setting.py:507
 +#: tiramisu/setting.py:511
  msgid "permissive must be a tuple"
  msgstr ""
  
 -#: tiramisu/setting.py:514 tiramisu/value.py:334
 +#: tiramisu/setting.py:518 tiramisu/value.py:334
  msgid "invalid generic owner {0}"
  msgstr ""
  
 -#: tiramisu/setting.py:602
 +#: tiramisu/setting.py:606
  msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
  msgstr ""
  
 -#: tiramisu/setting.py:613
 +#: tiramisu/setting.py:617
  msgid "option '{0}' has requirement's property error: {1} {2}"
  msgstr ""
  
@@@ -492,47 -520,43 +520,47 @@@ msgstr "
  msgid "no value for {0} cannot change owner to {1}"
  msgstr ""
  
 -#: tiramisu/value.py:426
 +#: tiramisu/value.py:423
 +msgid "can force cache only if cache is actived in config"
 +msgstr ""
 +
 +#: tiramisu/value.py:462
  msgid "{0} is already a Multi "
  msgstr ""
  
 -#: tiramisu/value.py:462 tiramisu/value.py:526
 +#: tiramisu/value.py:498 tiramisu/value.py:562
  msgid "invalid len for the slave: {0} which has {1} as master"
  msgstr ""
  
 -#: tiramisu/value.py:498
 +#: tiramisu/value.py:534
  msgid "cannot append a value on a multi option {0} which is a slave"
  msgstr ""
  
 -#: tiramisu/value.py:536
 +#: tiramisu/value.py:572
  msgid "cannot sort multi option {0} if master or slave"
  msgstr ""
  
 -#: tiramisu/value.py:540
 +#: tiramisu/value.py:576
  msgid "cmp is not permitted in python v3 or greater"
  msgstr ""
  
 -#: tiramisu/value.py:549
 +#: tiramisu/value.py:585
  msgid "cannot reverse multi option {0} if master or slave"
  msgstr ""
  
 -#: tiramisu/value.py:557
 +#: tiramisu/value.py:593
  msgid "cannot insert multi option {0} if master or slave"
  msgstr ""
  
 -#: tiramisu/value.py:565
 +#: tiramisu/value.py:601
  msgid "cannot extend multi option {0} if master or slave"
  msgstr ""
  
 -#: tiramisu/value.py:576
 +#: tiramisu/value.py:612
  msgid "invalid value {0} for option {1}: {2}"
  msgstr ""
  
 -#: tiramisu/value.py:594
 +#: tiramisu/value.py:630
  msgid "cannot pop a value on a multi option {0} which is a slave"
  msgstr ""