test uppercase character before valid domain name for better error message

This commit is contained in:
Emmanuel Garette 2014-12-07 14:51:51 +01:00
parent bc65caa4dc
commit 85297d8c4d
5 changed files with 360 additions and 255 deletions

View File

@ -1,5 +1,7 @@
Sun Dec 7 14:37:32 2014 +0200 Emmanuel Garette <egarette@cadoles.com>
* mandatory master/slave's consistency with default value as slave
* test uppercase character before valid domain name for better error
message
Mon Dec 1 22:58:13 2014 +0200 Emmanuel Garette <egarette@cadoles.com>
* propertyerror are transitive in consistency, now it's possible to set

View File

@ -5,6 +5,7 @@ from py.test import raises
from tiramisu.config import Config
from tiramisu.option import DomainnameOption, EmailOption, URLOption, OptionDescription
from tiramisu.error import ValueWarning
from tiramisu.i18n import _
def test_domainname():
@ -36,6 +37,29 @@ def test_domainname():
c.g = '192.168.1.29'
def test_domainname_upper():
d = DomainnameOption('d', '')
od = OptionDescription('a', '', [d])
c = Config(od)
c.read_write()
c.d = 'toto.com'
msg = _('some characters are uppercase')
has_error = False
try:
c.d = 'TOTO.COM'
except ValueError, err:
assert msg in unicode(err)
has_error = True
assert has_error is True
has_error = False
try:
c.d = 'toTo.com'
except ValueError, err:
assert msg in unicode(err)
has_error = True
assert has_error is True
def test_domainname_warning():
d = DomainnameOption('d', '', warnings_only=True)
f = DomainnameOption('f', '', allow_without_dot=True, warnings_only=True)

View File

@ -409,6 +409,7 @@ class DomainnameOption(Option):
extra['_allow_ip'] = allow_ip
extra['_allow_without_dot'] = allow_without_dot
extra['_domain_re'] = re.compile(r'^[a-z\d][a-z\d\-]*$')
extra['_has_upper'] = re.compile('[A-Z]')
super(DomainnameOption, self).__init__(name, doc, default=default,
default_multi=default_multi,
@ -452,9 +453,11 @@ class DomainnameOption(Option):
def _second_level_validation(self, value, warnings_only):
def _valid_char(val):
if self._get_extra('_has_upper').search(val):
raise ValueError(_('some characters are uppercase'))
if not self._get_extra('_domain_re').search(val):
if warnings_only:
raise ValueError(_('same characters may cause problems'))
raise ValueError(_('some characters may cause problems'))
else:
raise ValueError(_('invalid domainname'))
#not for IP

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-10-26 09:35+CET\n"
"POT-Creation-Date: 2014-12-07 14:44+CET\n"
"PO-Revision-Date: \n"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
"Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@ -21,73 +21,104 @@ msgstr ""
"impossible d'effectuer le calcul, l'option {0} a les propriétés : {1} pour : "
"{2}"
#: tiramisu/config.py:58
#: tiramisu/config.py:59
msgid "descr must be an optiondescription, not {0}"
msgstr "descr doit être une optiondescription pas un {0}"
#: tiramisu/config.py:137
#: tiramisu/config.py:139
msgid "unknown group_type: {0}"
msgstr "group_type inconnu: {0}"
#: tiramisu/config.py:176 tiramisu/setting.py:321 tiramisu/value.py:54
#: tiramisu/value.py:555
#: tiramisu/config.py:178 tiramisu/setting.py:320 tiramisu/value.py:54
#: tiramisu/value.py:605
msgid "the context does not exist anymore"
msgstr "le context n'existe plus"
#: tiramisu/config.py:181
#: tiramisu/config.py:183
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:209
#: tiramisu/config.py:211
msgid "can't assign to an OptionDescription"
msgstr "ne peut pas attribuer une valeur à une OptionDescription"
#: tiramisu/config.py:335
#: tiramisu/config.py:340
msgid "unknown type_ type {0}for _find"
msgstr "type_ type {0} pour _find inconnu"
#: tiramisu/config.py:370
#: tiramisu/config.py:380
msgid "no option found in config with these criteria"
msgstr "aucune option trouvée dans la config avec ces critères"
#: tiramisu/config.py:420
#: tiramisu/config.py:430
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:439
#: tiramisu/config.py:449
msgid "unexpected path {0}, should start with {1}"
msgstr "chemin imprévu {0}, devrait commencer par {1}"
#: tiramisu/config.py:507
#: tiramisu/config.py:519
msgid "opt in getowner must be an option not {0}"
msgstr "opt dans getowner doit être une option pas {0}"
#: tiramisu/config.py:552
#: tiramisu/config.py:564
msgid "cannot serialize Config with MetaConfig"
msgstr "impossible de sérialiser une Config avec une MetaConfig"
#: tiramisu/config.py:566
#: tiramisu/config.py:578
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:629
msgid "metaconfig's children must be a list"
msgstr "enfants d'une metaconfig doit être une liste"
#: tiramisu/config.py:631
msgid "invalid name: {0} for config"
msgstr "nom invalide : {0} pour la config"
#: tiramisu/config.py:723
#: tiramisu/config.py:655
msgid "groupconfig's children must be a list"
msgstr "enfants d'une groupconfig doit être une liste"
#: tiramisu/config.py:659
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:662
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:670
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:785
msgid "metaconfig's children should be config, not {0}"
msgstr "enfants d'une metaconfig doit être une config, pas {0}"
#: tiramisu/config.py:727
#: tiramisu/config.py:789
msgid "child has already a metaconfig's"
msgstr "enfant a déjà une metaconfig"
#: tiramisu/config.py:731
#: tiramisu/config.py:793
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:805
msgid ""
"force_default, force_default_if_same or force_dont_change_value cannot be "
"set with only_config"
msgstr ""
"force_default, force_default_if_same ou force_dont_change_value ne peuvent "
"pas être spécifié avec only_config"
#: tiramisu/config.py:811
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/option/baseoption.py:56
msgid "{0} must be a function"
msgstr "{0} doit être une fonction"
@ -141,7 +172,7 @@ msgstr ""
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:144
#: tiramisu/option/baseoption.py:145
msgid ""
"params defined for a callback function but no callback defined yet for "
"option {0}"
@ -149,112 +180,115 @@ msgstr ""
"params définis pour une fonction callback mais par de callback encore "
"définis pour l'option {0}"
#: tiramisu/option/baseoption.py:149
#: tiramisu/option/baseoption.py:150
msgid "a callback is already set for option {0}, cannot set another one's"
msgstr ""
"un callback est en lecture seul pour l'option {0}, ne peut en placer une "
"autre"
#: tiramisu/option/baseoption.py:276
#: tiramisu/option/baseoption.py:277
msgid "cannot serialize Option, only in OptionDescription"
msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
#: tiramisu/option/baseoption.py:354
#: tiramisu/option/baseoption.py:363
msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
#: tiramisu/option/baseoption.py:509 tiramisu/option/baseoption.py:552
#: tiramisu/option/baseoption.py:528 tiramisu/option/baseoption.py:571
msgid "invalid value for option {0}: {1}"
msgstr "valeur invalide pour l'option {0} : {1}"
#: tiramisu/option/baseoption.py:522
#: tiramisu/option/baseoption.py:541
msgid "do_validation for {0}: error in value"
msgstr "do_validation for {0} : erreur dans un la valeur"
#: tiramisu/option/baseoption.py:528
#: tiramisu/option/baseoption.py:547
msgid "do_validation for {0}: warning in value"
msgstr "do_validation for {0} : warning dans un la valeur"
#: tiramisu/option/baseoption.py:538
#: tiramisu/option/baseoption.py:557
msgid "do_validation for {0}: error in consistency"
msgstr "do_validation for {0} : erreur dans un test de consistance"
#: tiramisu/option/baseoption.py:542
#: tiramisu/option/baseoption.py:561
msgid "do_validation for {0}: warning in consistency"
msgstr "do_validation for {0} : warning dans un test de consistance"
#: tiramisu/option/baseoption.py:546
#: tiramisu/option/baseoption.py:565
msgid "warning on the value of the option {0}: {1}"
msgstr "avertissement sur la valeur de l'option {0} : {1}"
#: tiramisu/option/baseoption.py:564 tiramisu/option/baseoption.py:573
#: tiramisu/option/baseoption.py:583 tiramisu/option/baseoption.py:592
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/baseoption.py:579
#: tiramisu/option/baseoption.py:598
msgid "invalid value {0} for option {1} which must be a list of list"
msgstr ""
"valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste"
#: tiramisu/option/baseoption.py:632
#, fuzzy
#: tiramisu/option/baseoption.py:651
msgid "'{0}' ({1}) cannot add consistency, option is read-only"
msgstr ""
"'{0}' ({1}) ne peut ajouter de consistency, l'option est en lecture seul"
#: tiramisu/option/baseoption.py:643
#: tiramisu/option/baseoption.py:663
msgid "unknow parameter {0} in consistency"
msgstr "paramètre inconnu {0} dans un test de consistance"
#: tiramisu/option/baseoption.py:670
msgid "consistency must be set with an option"
msgstr "consistency doit être configuré avec une option"
#: tiramisu/option/baseoption.py:646 tiramisu/option/baseoption.py:653
#: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680
msgid ""
"almost one option in consistency is in a dynoptiondescription but not all"
msgstr ""
"au moins une option dans le test de consistance est dans une "
"dynoptiondescription mais pas toutes"
#: tiramisu/option/baseoption.py:649
#: tiramisu/option/baseoption.py:676
msgid "option in consistency must be in same dynoptiondescription"
msgstr ""
"option dans une consistency doit être dans le même dynoptiondescription"
#: tiramisu/option/baseoption.py:656
#: tiramisu/option/baseoption.py:683
msgid "cannot add consistency with itself"
msgstr "ne peut ajouter une consistency avec lui même"
#: tiramisu/option/baseoption.py:658
#: tiramisu/option/baseoption.py:685
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:662
#: tiramisu/option/baseoption.py:689
msgid "consistency {0} not available for this option"
msgstr "consistency {0} non valable pour cette option"
#: tiramisu/option/baseoption.py:689
#: tiramisu/option/baseoption.py:717
msgid "same value for {0} and {1}, should be different"
msgstr "même valeur pour {0} et {1}, devrait être différent"
#: tiramisu/option/baseoption.py:691
#: tiramisu/option/baseoption.py:719
msgid "same value for {0} and {1}, must be different"
msgstr "même valeur pour {0} et {1}, doit être différent"
#: tiramisu/option/baseoption.py:748
#: tiramisu/option/baseoption.py:776
msgid "default value not allowed if option: {0} is calculated"
msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée"
#: tiramisu/option/baseoption.py:770
#: tiramisu/option/baseoption.py:798
msgid "malformed requirements type for option: {0}, must be a dict"
msgstr ""
"type requirements malformé pour l'option : {0}, doit être un dictionnaire"
#: tiramisu/option/baseoption.py:776
#: tiramisu/option/baseoption.py:804
msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
msgstr ""
"requirements mal formés pour l'option : {0} clefs inconnues {1}, doit "
"seulement avoir {2}"
#: tiramisu/option/baseoption.py:787
#: tiramisu/option/baseoption.py:815
msgid ""
"malformed requirements for option: {0} require must have option, expected "
"and action keys"
@ -262,49 +296,49 @@ msgstr ""
"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
"option, expected et action"
#: tiramisu/option/baseoption.py:791
#: tiramisu/option/baseoption.py:819
msgid ""
"malformed requirements for option: {0} action cannot be force_store_value"
msgstr ""
"requirements mal formés pour l'option : {0} action ne peut pas être "
"force_store_value"
#: tiramisu/option/baseoption.py:796
#: tiramisu/option/baseoption.py:824
msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr ""
"requirements mal formés pour l'option : {0} inverse doit être un booléen"
#: tiramisu/option/baseoption.py:800
#: tiramisu/option/baseoption.py:828
msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr ""
"requirements mal formés pour l'option : {0} transitive doit être booléen"
#: tiramisu/option/baseoption.py:804
#: tiramisu/option/baseoption.py:832
msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr ""
"requirements mal formés pour l'option : {0} same_action doit être un booléen"
#: tiramisu/option/baseoption.py:808
#: tiramisu/option/baseoption.py:836
msgid "malformed requirements must be an option in option {0}"
msgstr "requirements mal formés doit être une option dans l'option {0}"
#: tiramisu/option/baseoption.py:811
#: tiramisu/option/baseoption.py:839
msgid "malformed requirements option {0} must not be a multi for {1}"
msgstr ""
"requirements mal formés pour l'option {0} ne doit pas être une multi pour {1}"
#: tiramisu/option/baseoption.py:818
#: tiramisu/option/baseoption.py:846
msgid ""
"malformed requirements second argument must be valid for option {0}: {1}"
msgstr ""
"requirements mal formés deuxième argument doit être valide pour l'option "
"{0} : {1}"
#: tiramisu/option/baseoption.py:823
#: tiramisu/option/baseoption.py:851
msgid "inconsistency in action types for option: {0} action: {1}"
msgstr "incohérence dans les types action pour l'option : {0} action {1}"
#: tiramisu/option/baseoption.py:851
#: tiramisu/option/baseoption.py:879
msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
@ -332,7 +366,7 @@ msgstr ""
"callback d'une variable maitre ne devrait pas référencer des variables "
"esclaves"
#: tiramisu/option/masterslave.py:198
#: tiramisu/option/masterslave.py:258
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"
@ -406,55 +440,59 @@ 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/option.py:254
#: tiramisu/option/option.py:256
msgid "inconsistency in allowed range"
msgstr "inconsistence dans la plage autorisée"
#: tiramisu/option/option.py:259
#: tiramisu/option/option.py:261
msgid "max value is empty"
msgstr "la valeur maximum est vide"
#: tiramisu/option/option.py:277
#: tiramisu/option/option.py:279
msgid "invalid port, range must have two values only"
msgstr "port invalide, une plage doit avoir deux valeurs seulement"
#: tiramisu/option/option.py:280
#: tiramisu/option/option.py:282
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/option.py:289
#: tiramisu/option/option.py:291
msgid "invalid port"
msgstr "port invalide"
#: tiramisu/option/option.py:291
#: tiramisu/option/option.py:293
msgid "invalid port, must be an between {0} and {1}"
msgstr "port invalide, port doit être entre {0} et {1}"
#: tiramisu/option/option.py:304
#: tiramisu/option/option.py:306
msgid "invalid network address"
msgstr "adresse réseau invalide"
#: tiramisu/option/option.py:310
#: tiramisu/option/option.py:312
msgid "network address is in reserved class"
msgstr "l'adresse réseau est pas dans une plage d'adresse réservée"
#: tiramisu/option/option.py:312
#: tiramisu/option/option.py:314
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/option.py:324
#: tiramisu/option/option.py:326
msgid "invalid netmask address"
msgstr "masque de sous-réseau invalide"
#: tiramisu/option/option.py:341
#: tiramisu/option/option.py:343
msgid "invalid len for opts"
msgstr "longueur invalide pour opts"
#: tiramisu/option/option.py:355
#: tiramisu/option/option.py:352
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/option.py:355
msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a broadcast"
msgstr "IP invalide {0} ({1}) avec masque {2}, cette IP est un broadcast"
#: tiramisu/option/option.py:360
msgid "invalid network {0} ({1}) with netmask {2}"
msgstr "réseau invalide {0} ({1}) avec masque {2}"
@ -481,55 +519,59 @@ 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:428
#: tiramisu/option/option.py:429
msgid "invalid domainname's length (min 2)"
msgstr "longueur du nom de domaine invalide (minimum 2)"
#: tiramisu/option/option.py:430
#: tiramisu/option/option.py:431
msgid "invalid domainname's length (max {0})"
msgstr "longueur du nom de domaine invalide (maximum {0})"
#: tiramisu/option/option.py:445
#: tiramisu/option/option.py:446
msgid "invalid domainname, must have dot"
msgstr "nom de domaine invalide, doit avoir un point"
#: tiramisu/option/option.py:447
#: tiramisu/option/option.py:448
msgid "invalid domainname's length (max 255)"
msgstr "longueur du nom de domaine invalide (maximum {1})"
#: tiramisu/option/option.py:457
msgid "same characters may cause problems"
msgid "some characters are uppercase"
msgstr "des caractères sont en majuscule"
#: tiramisu/option/option.py:460
msgid "some characters may cause problems"
msgstr "des caractères peuvent poser problèmes"
#: tiramisu/option/option.py:459
#: tiramisu/option/option.py:462
msgid "invalid domainname"
msgstr "nom de domaine invalide"
#: tiramisu/option/option.py:483
#: tiramisu/option/option.py:486
msgid "invalid email address, must contains one @"
msgstr "adresse email invalide, doit contenir un @"
#: tiramisu/option/option.py:486
#: tiramisu/option/option.py:489
msgid "invalid username in email address"
msgstr "nom d'utilisateur invalide dans une adresse email"
#: tiramisu/option/option.py:502
#: tiramisu/option/option.py:505
msgid "invalid url, must start with http:// or https://"
msgstr "URL invalide, doit démarrer avec http:// ou https://"
#: tiramisu/option/option.py:521
#: tiramisu/option/option.py:524
msgid "invalid url, port must be an between 0 and 65536"
msgstr "URL invalide, port doit être entre 0 et 65536"
#: tiramisu/option/option.py:528
#: tiramisu/option/option.py:531
msgid "invalid url, must ends with filename"
msgstr "URL invalide, doit finir avec un nom de fichier"
#: tiramisu/option/option.py:542
#: tiramisu/option/option.py:545
msgid "invalid username"
msgstr "utilisateur invalide"
#: tiramisu/option/option.py:552
#: tiramisu/option/option.py:555
msgid "invalid filename"
msgstr "nom de fichier invalide"
@ -545,36 +587,36 @@ msgstr "option ne doit pas commencé pareil qu'un dynoptiondescription"
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/optiondescription.py:139
#: tiramisu/option/optiondescription.py:145
msgid "duplicate option: {0}"
msgstr "option dupliquée : {0}"
#: tiramisu/option/optiondescription.py:155
#: tiramisu/option/optiondescription.py:156
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/optiondescription.py:163
#: tiramisu/option/optiondescription.py:164
msgid "group_type: {0} not allowed"
msgstr "group_type : {0} non autorisé"
#: tiramisu/option/optiondescription.py:260
#: tiramisu/option/optiondescription.py:262
msgid "DynOptionDescription callback return not uniq value"
msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique"
#: tiramisu/option/optiondescription.py:263
#: tiramisu/option/optiondescription.py:265
msgid "invalid suffix: {0} for option"
msgstr "suffix invalide : {0} pour l'option"
#: tiramisu/option/optiondescription.py:316
#: tiramisu/option/optiondescription.py:318
msgid "cannot set optiondescription in an dynoptiondescription"
msgstr ""
"impossible de mettre une optiondescription dans un dynoptiondescription"
#: tiramisu/option/optiondescription.py:321
#: tiramisu/option/optiondescription.py:323
msgid "cannot set symlinkoption in an dynoptiondescription"
msgstr "impossible de placer un symlinkoption dans un dynoptiondescription"
#: tiramisu/option/optiondescription.py:329
#: tiramisu/option/optiondescription.py:331
msgid "callback is mandatory for dynoptiondescription"
msgstr "callback est obligatoire pour un dynoptiondescription"
@ -586,47 +628,47 @@ msgstr "ne peut redéfinir ({0})"
msgid "can't unbind {0}"
msgstr "ne peut supprimer ({0})"
#: tiramisu/setting.py:255
#: tiramisu/setting.py:254
msgid "cannot append {0} property for option {1}: this property is calculated"
msgstr ""
"ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est "
"calculée"
#: tiramisu/setting.py:341
#: tiramisu/setting.py:343
msgid "you should only append/remove properties"
msgstr "pour pouvait seulement ajouter/supprimer des propriétés"
#: tiramisu/setting.py:345
#: tiramisu/setting.py:347
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:363
#: tiramisu/setting.py:368
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:407
#: tiramisu/setting.py:412
msgid "cannot add those properties: {0}"
msgstr "ne peut pas ajouter ces propriétés : {0}"
#: tiramisu/setting.py:469
#: tiramisu/setting.py:477
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:475
#: tiramisu/setting.py:483
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:493
#: tiramisu/setting.py:501
msgid "permissive must be a tuple"
msgstr "permissive doit être un tuple"
#: tiramisu/setting.py:500 tiramisu/value.py:379
#: tiramisu/setting.py:508 tiramisu/value.py:426
msgid "invalid generic owner {0}"
msgstr "invalide owner générique {0}"
#: tiramisu/setting.py:588
#: tiramisu/setting.py:596
msgid ""
"malformed requirements imbrication detected for option: '{0}' with "
"requirement on: '{1}'"
@ -634,7 +676,7 @@ msgstr ""
"imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
"requirement sur : '{1}'"
#: tiramisu/setting.py:599
#: tiramisu/setting.py:607
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}"
@ -650,108 +692,107 @@ 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:89
#: tiramisu/storage/dictionary/option.py:99
msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}"
#: tiramisu/storage/dictionary/option.py:131 tiramisu/value.py:441
#: tiramisu/storage/dictionary/option.py:141
#: tiramisu/storage/sqlalchemy/option.py:434 tiramisu/value.py:490
msgid "information's item not found: {0}"
msgstr "aucune config spécifiée alors que c'est nécessaire"
#: tiramisu/storage/dictionary/option.py:336
#: tiramisu/storage/sqlalchemy/option.py:348
#: tiramisu/storage/dictionary/option.py:362
#: tiramisu/storage/sqlalchemy/option.py:478
msgid "no option for path {0}"
msgstr "pas d'option pour le chemin {0}"
#: tiramisu/storage/dictionary/option.py:342
#: tiramisu/storage/sqlalchemy/option.py:355
#: tiramisu/storage/dictionary/option.py:368
#: tiramisu/storage/sqlalchemy/option.py:485
msgid "no option {0} found"
msgstr "pas d'option {0} trouvée"
#: tiramisu/storage/dictionary/option.py:390
#: tiramisu/storage/dictionary/option.py:417
msgid "cannot find dynpath"
msgstr "ne peut trouver le dynpath"
#: tiramisu/storage/dictionary/option.py:480
#: tiramisu/storage/sqlalchemy/option.py:465
#: tiramisu/storage/dictionary/option.py:507
#: tiramisu/storage/sqlalchemy/option.py:630
msgid "suffix and context needed if it's a dyn option"
msgstr "suffix et context obligatoire si c'est une option dynamique"
#: tiramisu/storage/dictionary/option.py:493
#: tiramisu/storage/dictionary/option.py:520
msgid "{0} instance has no attribute '_readonly'"
msgstr "{0} instance n'a pas l'attribut '_readonly'"
#: tiramisu/storage/dictionary/option.py:507
#: tiramisu/storage/sqlalchemy/option.py:495
#: tiramisu/storage/dictionary/option.py:534
#: tiramisu/storage/sqlalchemy/option.py:660
msgid "unknown Option {0} in OptionDescription {1}"
msgstr "Option {0} inconnue pour l'OptionDescription {1}"
#: tiramisu/storage/dictionary/storage.py:37
#: tiramisu/storage/sqlalchemy/storage.py:37
msgid "dictionary storage cannot delete session"
msgstr ""
"impossible de supprimer une session dans un espace de stockage dictionary"
#: tiramisu/storage/dictionary/storage.py:48
#: tiramisu/storage/sqlalchemy/storage.py:48
#: tiramisu/storage/sqlalchemy/storage.py:66
msgid "session already used"
msgstr "session déjà utilisée"
#: tiramisu/storage/dictionary/storage.py:50
#: tiramisu/storage/sqlalchemy/storage.py:50
msgid "a dictionary cannot be persistent"
msgstr "un espace de stockage dictionary ne peut être persistant"
#: tiramisu/value.py:64
#: tiramisu/value.py:65
msgid "optiondescription has no value"
msgstr "une optiondescription n'a pas de valeur"
#: tiramisu/value.py:303
#: tiramisu/value.py:325
msgid "you should only set value with config"
msgstr "vous devez seul affecter une valeur avec un config"
#: tiramisu/value.py:356
#: tiramisu/value.py:395
msgid "owner only avalaible for an option"
msgstr "owner seulement possible pour une option"
#: tiramisu/value.py:386
#: tiramisu/value.py:433
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:481
#: tiramisu/value.py:531
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:520
#: tiramisu/value.py:570
msgid "{0} is already a Multi "
msgstr "{0} est déjà une Multi"
#: tiramisu/value.py:586
#: tiramisu/value.py:636
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:605
#: tiramisu/value.py:655
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:609
#: tiramisu/value.py:659
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:618
#: tiramisu/value.py:668
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:626
#: tiramisu/value.py:676
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:634
#: tiramisu/value.py:684
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:662
#: tiramisu/value.py:712
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"

View File

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2014-10-26 09:42+CET\n"
"POT-Creation-Date: 2014-12-07 14:44+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"
@ -19,71 +19,95 @@ msgstr ""
msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
msgstr ""
#: tiramisu/config.py:58
#: tiramisu/config.py:59
msgid "descr must be an optiondescription, not {0}"
msgstr ""
#: tiramisu/config.py:137
#: tiramisu/config.py:139
msgid "unknown group_type: {0}"
msgstr ""
#: tiramisu/config.py:176 tiramisu/setting.py:321 tiramisu/value.py:54
#: tiramisu/value.py:555
#: tiramisu/config.py:178 tiramisu/setting.py:320 tiramisu/value.py:54
#: tiramisu/value.py:605
msgid "the context does not exist anymore"
msgstr ""
#: tiramisu/config.py:181
#: tiramisu/config.py:183
msgid "no option description found for this config (may be GroupConfig)"
msgstr ""
#: tiramisu/config.py:209
#: tiramisu/config.py:211
msgid "can't assign to an OptionDescription"
msgstr ""
#: tiramisu/config.py:335
#: tiramisu/config.py:340
msgid "unknown type_ type {0}for _find"
msgstr ""
#: tiramisu/config.py:370
#: tiramisu/config.py:380
msgid "no option found in config with these criteria"
msgstr ""
#: tiramisu/config.py:420
#: tiramisu/config.py:430
msgid "make_dict can't filtering with value without option"
msgstr ""
#: tiramisu/config.py:439
#: tiramisu/config.py:449
msgid "unexpected path {0}, should start with {1}"
msgstr ""
#: tiramisu/config.py:507
#: tiramisu/config.py:519
msgid "opt in getowner must be an option not {0}"
msgstr ""
#: tiramisu/config.py:552
#: tiramisu/config.py:564
msgid "cannot serialize Config with MetaConfig"
msgstr ""
#: tiramisu/config.py:566
#: tiramisu/config.py:578
msgid "this storage is not serialisable, could be a none persistent storage"
msgstr ""
#: tiramisu/config.py:629
msgid "metaconfig's children must be a list"
#: tiramisu/config.py:631
msgid "invalid name: {0} for config"
msgstr ""
#: tiramisu/config.py:723
#: tiramisu/config.py:655
msgid "groupconfig's children must be a list"
msgstr ""
#: tiramisu/config.py:659
msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
msgstr ""
#: tiramisu/config.py:662
msgid "name must be set to config before creating groupconfig"
msgstr ""
#: tiramisu/config.py:670
msgid "config name must be uniq in groupconfig for {0}"
msgstr ""
#: tiramisu/config.py:785
msgid "metaconfig's children should be config, not {0}"
msgstr ""
#: tiramisu/config.py:727
#: tiramisu/config.py:789
msgid "child has already a metaconfig's"
msgstr ""
#: tiramisu/config.py:731
#: tiramisu/config.py:793
msgid "all config in metaconfig must have the same optiondescription"
msgstr ""
#: tiramisu/config.py:805
msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config"
msgstr ""
#: tiramisu/config.py:811
msgid "force_default and force_dont_change_value cannot be set together"
msgstr ""
#: tiramisu/option/baseoption.py:56
msgid "{0} must be a function"
msgstr ""
@ -132,139 +156,143 @@ msgstr ""
msgid "invalid properties type {0} for {1}, must be a tuple"
msgstr ""
#: tiramisu/option/baseoption.py:144
#: tiramisu/option/baseoption.py:145
msgid "params defined for a callback function but no callback defined yet for option {0}"
msgstr ""
#: tiramisu/option/baseoption.py:149
#: tiramisu/option/baseoption.py:150
msgid "a callback is already set for option {0}, cannot set another one's"
msgstr ""
#: tiramisu/option/baseoption.py:276
#: tiramisu/option/baseoption.py:277
msgid "cannot serialize Option, only in OptionDescription"
msgstr ""
#: tiramisu/option/baseoption.py:354
#: tiramisu/option/baseoption.py:363
msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr ""
#: tiramisu/option/baseoption.py:509 tiramisu/option/baseoption.py:552
#: tiramisu/option/baseoption.py:528 tiramisu/option/baseoption.py:571
msgid "invalid value for option {0}: {1}"
msgstr ""
#: tiramisu/option/baseoption.py:522
#: tiramisu/option/baseoption.py:541
msgid "do_validation for {0}: error in value"
msgstr ""
#: tiramisu/option/baseoption.py:528
#: tiramisu/option/baseoption.py:547
msgid "do_validation for {0}: warning in value"
msgstr ""
#: tiramisu/option/baseoption.py:538
#: tiramisu/option/baseoption.py:557
msgid "do_validation for {0}: error in consistency"
msgstr ""
#: tiramisu/option/baseoption.py:542
#: tiramisu/option/baseoption.py:561
msgid "do_validation for {0}: warning in consistency"
msgstr ""
#: tiramisu/option/baseoption.py:546
#: tiramisu/option/baseoption.py:565
msgid "warning on the value of the option {0}: {1}"
msgstr ""
#: tiramisu/option/baseoption.py:564 tiramisu/option/baseoption.py:573
#: tiramisu/option/baseoption.py:583 tiramisu/option/baseoption.py:592
msgid "invalid value {0} for option {1} which must be a list"
msgstr ""
#: tiramisu/option/baseoption.py:579
#: tiramisu/option/baseoption.py:598
msgid "invalid value {0} for option {1} which must be a list of list"
msgstr ""
#: tiramisu/option/baseoption.py:632
#: tiramisu/option/baseoption.py:651
msgid "'{0}' ({1}) cannot add consistency, option is read-only"
msgstr ""
#: tiramisu/option/baseoption.py:643
#: tiramisu/option/baseoption.py:663
msgid "unknow parameter {0} in consistency"
msgstr ""
#: tiramisu/option/baseoption.py:670
msgid "consistency must be set with an option"
msgstr ""
#: tiramisu/option/baseoption.py:646 tiramisu/option/baseoption.py:653
#: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680
msgid "almost one option in consistency is in a dynoptiondescription but not all"
msgstr ""
#: tiramisu/option/baseoption.py:649
#: tiramisu/option/baseoption.py:676
msgid "option in consistency must be in same dynoptiondescription"
msgstr ""
#: tiramisu/option/baseoption.py:656
#: tiramisu/option/baseoption.py:683
msgid "cannot add consistency with itself"
msgstr ""
#: tiramisu/option/baseoption.py:658
#: tiramisu/option/baseoption.py:685
msgid "every options in consistency must be multi or none"
msgstr ""
#: tiramisu/option/baseoption.py:662
#: tiramisu/option/baseoption.py:689
msgid "consistency {0} not available for this option"
msgstr ""
#: tiramisu/option/baseoption.py:689
#: tiramisu/option/baseoption.py:717
msgid "same value for {0} and {1}, should be different"
msgstr ""
#: tiramisu/option/baseoption.py:691
#: tiramisu/option/baseoption.py:719
msgid "same value for {0} and {1}, must be different"
msgstr ""
#: tiramisu/option/baseoption.py:748
#: tiramisu/option/baseoption.py:776
msgid "default value not allowed if option: {0} is calculated"
msgstr ""
#: tiramisu/option/baseoption.py:770
#: tiramisu/option/baseoption.py:798
msgid "malformed requirements type for option: {0}, must be a dict"
msgstr ""
#: tiramisu/option/baseoption.py:776
#: tiramisu/option/baseoption.py:804
msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
msgstr ""
#: tiramisu/option/baseoption.py:787
#: tiramisu/option/baseoption.py:815
msgid "malformed requirements for option: {0} require must have option, expected and action keys"
msgstr ""
#: tiramisu/option/baseoption.py:791
#: tiramisu/option/baseoption.py:819
msgid "malformed requirements for option: {0} action cannot be force_store_value"
msgstr ""
#: tiramisu/option/baseoption.py:796
#: tiramisu/option/baseoption.py:824
msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr ""
#: tiramisu/option/baseoption.py:800
#: tiramisu/option/baseoption.py:828
msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr ""
#: tiramisu/option/baseoption.py:804
#: tiramisu/option/baseoption.py:832
msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr ""
#: tiramisu/option/baseoption.py:808
#: tiramisu/option/baseoption.py:836
msgid "malformed requirements must be an option in option {0}"
msgstr ""
#: tiramisu/option/baseoption.py:811
#: tiramisu/option/baseoption.py:839
msgid "malformed requirements option {0} must not be a multi for {1}"
msgstr ""
#: tiramisu/option/baseoption.py:818
#: tiramisu/option/baseoption.py:846
msgid "malformed requirements second argument must be valid for option {0}: {1}"
msgstr ""
#: tiramisu/option/baseoption.py:823
#: tiramisu/option/baseoption.py:851
msgid "inconsistency in action types for option: {0} action: {1}"
msgstr ""
#: tiramisu/option/baseoption.py:851
#: tiramisu/option/baseoption.py:879
msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr ""
@ -288,7 +316,7 @@ msgstr ""
msgid "callback of master's option shall not refered a slave's ones"
msgstr ""
#: tiramisu/option/masterslave.py:198
#: tiramisu/option/masterslave.py:258
msgid "invalid len for the slave: {0} which has {1} as master"
msgstr ""
@ -361,54 +389,58 @@ msgstr ""
msgid "invalid IP {0} ({1}) not in network {2} ({3}) with netmask {4} ({5})"
msgstr ""
#: tiramisu/option/option.py:254
#: tiramisu/option/option.py:256
msgid "inconsistency in allowed range"
msgstr ""
#: tiramisu/option/option.py:259
#: tiramisu/option/option.py:261
msgid "max value is empty"
msgstr ""
#: tiramisu/option/option.py:277
#: tiramisu/option/option.py:279
msgid "invalid port, range must have two values only"
msgstr ""
#: tiramisu/option/option.py:280
#: tiramisu/option/option.py:282
msgid "invalid port, first port in range must be smaller than the second one"
msgstr ""
#: tiramisu/option/option.py:289
#: tiramisu/option/option.py:291
msgid "invalid port"
msgstr ""
#: tiramisu/option/option.py:291
#: tiramisu/option/option.py:293
msgid "invalid port, must be an between {0} and {1}"
msgstr ""
#: tiramisu/option/option.py:304
#: tiramisu/option/option.py:306
msgid "invalid network address"
msgstr ""
#: tiramisu/option/option.py:310
#: tiramisu/option/option.py:312
msgid "network address is in reserved class"
msgstr ""
#: tiramisu/option/option.py:312
#: tiramisu/option/option.py:314
msgid "invalid network address, mustn't be in reserved class"
msgstr ""
#: tiramisu/option/option.py:324
#: tiramisu/option/option.py:326
msgid "invalid netmask address"
msgstr ""
#: tiramisu/option/option.py:341
#: tiramisu/option/option.py:343
msgid "invalid len for opts"
msgstr ""
#: tiramisu/option/option.py:355
#: tiramisu/option/option.py:352
msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
msgstr ""
#: tiramisu/option/option.py:355
msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a broadcast"
msgstr ""
#: tiramisu/option/option.py:360
msgid "invalid network {0} ({1}) with netmask {2}"
msgstr ""
@ -433,55 +465,59 @@ msgstr ""
msgid "allow_without_dot must be a boolean"
msgstr ""
#: tiramisu/option/option.py:428
#: tiramisu/option/option.py:429
msgid "invalid domainname's length (min 2)"
msgstr ""
#: tiramisu/option/option.py:430
#: tiramisu/option/option.py:431
msgid "invalid domainname's length (max {0})"
msgstr ""
#: tiramisu/option/option.py:445
#: tiramisu/option/option.py:446
msgid "invalid domainname, must have dot"
msgstr ""
#: tiramisu/option/option.py:447
#: tiramisu/option/option.py:448
msgid "invalid domainname's length (max 255)"
msgstr ""
#: tiramisu/option/option.py:457
msgid "same characters may cause problems"
msgid "some characters are uppercase"
msgstr ""
#: tiramisu/option/option.py:459
#: tiramisu/option/option.py:460
msgid "some characters may cause problems"
msgstr ""
#: tiramisu/option/option.py:462
msgid "invalid domainname"
msgstr ""
#: tiramisu/option/option.py:483
#: tiramisu/option/option.py:486
msgid "invalid email address, must contains one @"
msgstr ""
#: tiramisu/option/option.py:486
#: tiramisu/option/option.py:489
msgid "invalid username in email address"
msgstr ""
#: tiramisu/option/option.py:502
#: tiramisu/option/option.py:505
msgid "invalid url, must start with http:// or https://"
msgstr ""
#: tiramisu/option/option.py:521
#: tiramisu/option/option.py:524
msgid "invalid url, port must be an between 0 and 65536"
msgstr ""
#: tiramisu/option/option.py:528
#: tiramisu/option/option.py:531
msgid "invalid url, must ends with filename"
msgstr ""
#: tiramisu/option/option.py:542
#: tiramisu/option/option.py:545
msgid "invalid username"
msgstr ""
#: tiramisu/option/option.py:552
#: tiramisu/option/option.py:555
msgid "invalid filename"
msgstr ""
@ -497,35 +533,35 @@ msgstr ""
msgid "consistency with option {0} which is not in Config"
msgstr ""
#: tiramisu/option/optiondescription.py:139
#: tiramisu/option/optiondescription.py:145
msgid "duplicate option: {0}"
msgstr ""
#: tiramisu/option/optiondescription.py:155
#: tiramisu/option/optiondescription.py:156
msgid "cannot change group_type if already set (old {0}, new {1})"
msgstr ""
#: tiramisu/option/optiondescription.py:163
#: tiramisu/option/optiondescription.py:164
msgid "group_type: {0} not allowed"
msgstr ""
#: tiramisu/option/optiondescription.py:260
#: tiramisu/option/optiondescription.py:262
msgid "DynOptionDescription callback return not uniq value"
msgstr ""
#: tiramisu/option/optiondescription.py:263
#: tiramisu/option/optiondescription.py:265
msgid "invalid suffix: {0} for option"
msgstr ""
#: tiramisu/option/optiondescription.py:316
#: tiramisu/option/optiondescription.py:318
msgid "cannot set optiondescription in an dynoptiondescription"
msgstr ""
#: tiramisu/option/optiondescription.py:321
#: tiramisu/option/optiondescription.py:323
msgid "cannot set symlinkoption in an dynoptiondescription"
msgstr ""
#: tiramisu/option/optiondescription.py:329
#: tiramisu/option/optiondescription.py:331
msgid "callback is mandatory for dynoptiondescription"
msgstr ""
@ -537,47 +573,47 @@ msgstr ""
msgid "can't unbind {0}"
msgstr ""
#: tiramisu/setting.py:255
#: tiramisu/setting.py:254
msgid "cannot append {0} property for option {1}: this property is calculated"
msgstr ""
#: tiramisu/setting.py:341
#: tiramisu/setting.py:343
msgid "you should only append/remove properties"
msgstr ""
#: tiramisu/setting.py:345
#: tiramisu/setting.py:347
msgid "opt and all_properties must not be set together in reset"
msgstr ""
#: tiramisu/setting.py:363
#: tiramisu/setting.py:368
msgid "if opt is not None, path should not be None in _getproperties"
msgstr ""
#: tiramisu/setting.py:407
#: tiramisu/setting.py:412
msgid "cannot add those properties: {0}"
msgstr ""
#: tiramisu/setting.py:469
#: tiramisu/setting.py:477
msgid "cannot change the value for option {0} this option is frozen"
msgstr ""
#: tiramisu/setting.py:475
#: tiramisu/setting.py:483
msgid "trying to access to an option named: {0} with properties {1}"
msgstr ""
#: tiramisu/setting.py:493
#: tiramisu/setting.py:501
msgid "permissive must be a tuple"
msgstr ""
#: tiramisu/setting.py:500 tiramisu/value.py:379
#: tiramisu/setting.py:508 tiramisu/value.py:426
msgid "invalid generic owner {0}"
msgstr ""
#: tiramisu/setting.py:588
#: tiramisu/setting.py:596
msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
msgstr ""
#: tiramisu/setting.py:599
#: tiramisu/setting.py:607
msgid "option '{0}' has requirement's property error: {1} {2}"
msgstr ""
@ -593,106 +629,105 @@ msgstr ""
msgid "option {0} not already exists in storage {1}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:89
#: tiramisu/storage/dictionary/option.py:99
msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:131 tiramisu/value.py:441
#: tiramisu/storage/dictionary/option.py:141
#: tiramisu/storage/sqlalchemy/option.py:434 tiramisu/value.py:490
msgid "information's item not found: {0}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:336
#: tiramisu/storage/sqlalchemy/option.py:348
#: tiramisu/storage/dictionary/option.py:362
#: tiramisu/storage/sqlalchemy/option.py:478
msgid "no option for path {0}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:342
#: tiramisu/storage/sqlalchemy/option.py:355
#: tiramisu/storage/dictionary/option.py:368
#: tiramisu/storage/sqlalchemy/option.py:485
msgid "no option {0} found"
msgstr ""
#: tiramisu/storage/dictionary/option.py:390
#: tiramisu/storage/dictionary/option.py:417
msgid "cannot find dynpath"
msgstr ""
#: tiramisu/storage/dictionary/option.py:480
#: tiramisu/storage/sqlalchemy/option.py:465
#: tiramisu/storage/dictionary/option.py:507
#: tiramisu/storage/sqlalchemy/option.py:630
msgid "suffix and context needed if it's a dyn option"
msgstr ""
#: tiramisu/storage/dictionary/option.py:493
#: tiramisu/storage/dictionary/option.py:520
msgid "{0} instance has no attribute '_readonly'"
msgstr ""
#: tiramisu/storage/dictionary/option.py:507
#: tiramisu/storage/sqlalchemy/option.py:495
#: tiramisu/storage/dictionary/option.py:534
#: tiramisu/storage/sqlalchemy/option.py:660
msgid "unknown Option {0} in OptionDescription {1}"
msgstr ""
#: tiramisu/storage/dictionary/storage.py:37
#: tiramisu/storage/sqlalchemy/storage.py:37
msgid "dictionary storage cannot delete session"
msgstr ""
#: tiramisu/storage/dictionary/storage.py:48
#: tiramisu/storage/sqlalchemy/storage.py:48
#: tiramisu/storage/sqlalchemy/storage.py:66
msgid "session already used"
msgstr ""
#: tiramisu/storage/dictionary/storage.py:50
#: tiramisu/storage/sqlalchemy/storage.py:50
msgid "a dictionary cannot be persistent"
msgstr ""
#: tiramisu/value.py:64
#: tiramisu/value.py:65
msgid "optiondescription has no value"
msgstr ""
#: tiramisu/value.py:303
#: tiramisu/value.py:325
msgid "you should only set value with config"
msgstr ""
#: tiramisu/value.py:356
#: tiramisu/value.py:395
msgid "owner only avalaible for an option"
msgstr ""
#: tiramisu/value.py:386
#: tiramisu/value.py:433
msgid "no value for {0} cannot change owner to {1}"
msgstr ""
#: tiramisu/value.py:481
#: tiramisu/value.py:531
msgid "can force cache only if cache is actived in config"
msgstr ""
#: tiramisu/value.py:520
#: tiramisu/value.py:570
msgid "{0} is already a Multi "
msgstr ""
#: tiramisu/value.py:586
#: tiramisu/value.py:636
msgid "cannot append a value on a multi option {0} which is a slave"
msgstr ""
#: tiramisu/value.py:605
#: tiramisu/value.py:655
msgid "cannot sort multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:609
#: tiramisu/value.py:659
msgid "cmp is not permitted in python v3 or greater"
msgstr ""
#: tiramisu/value.py:618
#: tiramisu/value.py:668
msgid "cannot reverse multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:626
#: tiramisu/value.py:676
msgid "cannot insert multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:634
#: tiramisu/value.py:684
msgid "cannot extend multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:662
#: tiramisu/value.py:712
msgid "cannot pop a value on a multi option {0} which is a slave"
msgstr ""