This commit is contained in:
Emmanuel Garette 2016-11-20 18:02:10 +01:00
parent 0f4b1caca4
commit 8e7b4101f1
7 changed files with 305 additions and 270 deletions

View file

@ -39,6 +39,11 @@ def test_multi_unique():
c.int.extend([4, 5, 6])
def test_non_valid_multi():
raises(ValueError, "IntOption('int', '', multi='string')")
raises(ValueError, "IntOption('int', '', multi=True, unique='string')")
def test_non_multi_unique():
raises(ValueError, "IntOption('int', '', unique=True)")

View file

@ -6,11 +6,15 @@ from py.test import raises
from tiramisu.setting import owners, groups
from tiramisu.config import Config
from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\
BroadcastOption, SymLinkOption, OptionDescription, submulti
BroadcastOption, StrOption, SymLinkOption, OptionDescription, submulti
from tiramisu.error import ConfigError, ValueWarning, PropertiesOptionError
import warnings
def return_value(value=None):
return value
def test_consistency():
a = IntOption('a', '')
b = IntOption('b', '')
@ -67,9 +71,15 @@ def test_consistency_warnings_only_more_option():
with warnings.catch_warnings(record=True) as w:
c.b = 1
assert w != []
assert len(w) == 1
with warnings.catch_warnings(record=True) as w:
c.d
assert w != []
assert len(w) == 1
with warnings.catch_warnings(record=True) as w:
c.d = 1
assert w != []
assert len(w) == 1
def test_consistency_not_equal():

View file

@ -83,8 +83,6 @@ class SubConfig(object):
self = self.getattr(step,
force_permissive=force_permissive,
returns_raise=returns_raise)
if isinstance(self, Exception):
return self, None
return self, path[-1]
#def __hash__(self):
@ -272,14 +270,11 @@ class SubConfig(object):
homeconfig, name = self.cfgimpl_get_home_by_path(
name, force_permissive=force_permissive,
returns_raise=returns_raise)
if isinstance(homeconfig, Exception):
cfg = homeconfig
else:
cfg = homeconfig.getattr(name, force_permissive=force_permissive,
validate=validate,
_setting_properties=_setting_properties,
_self_properties=_self_properties,
index=index, returns_raise=returns_raise)
cfg = homeconfig.getattr(name, force_permissive=force_permissive,
validate=validate,
_setting_properties=_setting_properties,
_self_properties=_self_properties,
index=index, returns_raise=returns_raise)
else:
context = self._cfgimpl_get_context()
option = self.cfgimpl_get_description().__getattr__(name,

View file

@ -473,7 +473,7 @@ class Option(OnlyOption):
if warnings_only:
if isinstance(err, ValueError):
msg = _('attention, "{0}" could be an invalid {1} for "{2}", {3}').format(
value, self._display_name, self.impl_get_display_name(), err)
value, self._display_name, current_opt.impl_get_display_name(), err)
else:
msg = '{}'.format(err)
warnings.warn_explicit(ValueWarning(msg, self),
@ -614,8 +614,8 @@ class Option(OnlyOption):
for idx, val in enumerate(value):
if isinstance(val, list):
return ValueError(_('invalid value "{}" for "{}" '
'which must not be a list'.format(val,
self.impl_get_display_name())))
'which must not be a list').format(val,
self.impl_get_display_name()))
err = do_validation(val, force_index, idx)
if err:
return err
@ -803,15 +803,11 @@ class Option(OnlyOption):
log.debug(_('_cons_not_equal: {} are not different').format(display_list(list(equal))))
if is_current:
equal.remove('"' + current_opt.impl_get_display_name() + '"')
if len(equal) == 0:
msg = _('this value is already present')
return ValueError(msg)
if warnings_only:
msg = _('should be different from the value of {}')
else:
if warnings_only:
msg = _('should be different from the value of {}')
else:
msg = _('must be different from the value of {}')
return ValueError(msg.format(display_list(list(equal))))
msg = _('must be different from the value of {}')
return ValueError(msg.format(display_list(list(equal))))
else:
if warnings_only:
msg = _('value for {} should be different')
@ -1005,16 +1001,6 @@ class SymLinkOption(OnlyOption):
def impl_is_readonly(self):
return True
def impl_getproperties(self):
return self._impl_getopt()._properties
def impl_get_callback(self):
return self._impl_getopt().impl_get_callback()
def impl_has_callback(self):
"to know if a callback has been defined or not"
return self._impl_getopt().impl_has_callback()
def impl_is_multi(self):
return self._impl_getopt().impl_is_multi()
@ -1034,10 +1020,7 @@ class DynSymLinkOption(object):
self._opt = opt
def __getattr__(self, name, context=undefined):
if name in ('_opt', '_readonly', 'impl_getpath', '_name', '_state_opt'):
return object.__getattr__(self, name)
else:
return getattr(self._impl_getopt(), name)
return getattr(self._impl_getopt(), name)
def impl_getname(self):
return self._name

View file

@ -396,7 +396,7 @@ class NetmaskOption(Option):
def __cons_netmask(self, opts, val_netmask, val_ipnetwork, make_net,
warnings_only):
if len(opts) != 2:
raise ConfigError(_('invalid len for opts')) # pragma: optional cover
return ConfigError(_('invalid len for opts')) # pragma: optional cover
msg = None
try:
ip = IP('{0}/{1}'.format(val_ipnetwork, val_netmask),

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-16 22:29+0100\n"
"POT-Creation-Date: 2016-11-20 17:58+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
"Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@ -30,88 +30,88 @@ msgstr ""
msgid "descr must be an optiondescription, not {0}"
msgstr "descr doit être une optiondescription pas un {0}"
#: tiramisu/config.py:148
#: tiramisu/config.py:146
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:738
#: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54
#: tiramisu/value.py:749
msgid "the context does not exist anymore"
msgstr "le context n'existe plus"
#: tiramisu/config.py:192
#: tiramisu/config.py:190
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:228
#: tiramisu/config.py:226
msgid "can't assign to an OptionDescription"
msgstr "ne peut pas attribuer une valeur à une OptionDescription"
#: tiramisu/config.py:389
#: tiramisu/config.py:384
msgid "unknown type_ type {0}for _find"
msgstr "type_ type {0} pour _find inconnu"
#: tiramisu/config.py:432
#: tiramisu/config.py:427
msgid "no option found in config with these criteria"
msgstr "aucune option trouvée dans la config avec ces critères"
#: tiramisu/config.py:480
#: tiramisu/config.py:475
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:503
#: tiramisu/config.py:498
msgid "unexpected path {0}, should start with {1}"
msgstr "chemin imprévu {0}, devrait commencer par {1}"
#: tiramisu/config.py:578
#: tiramisu/config.py:573
msgid "opt in getowner must be an option not {0}"
msgstr "opt dans getowner doit être une option pas {0}"
#: tiramisu/config.py:626
#: tiramisu/config.py:621
msgid "cannot serialize Config with MetaConfig"
msgstr "impossible de sérialiser une Config avec une MetaConfig"
#: tiramisu/config.py:640
#: tiramisu/config.py:635
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:705
#: tiramisu/config.py:700
msgid "invalid name: {0} for config"
msgstr "nom invalide : {0} pour la config"
#: tiramisu/config.py:737
#: tiramisu/config.py:732
msgid "groupconfig's children must be a list"
msgstr "enfants d'une groupconfig doit être une liste"
#: tiramisu/config.py:741
#: tiramisu/config.py:736
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:744
#: tiramisu/config.py:739
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:750
#: tiramisu/config.py:745
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:859
#: tiramisu/config.py:854
msgid "metaconfig's children should be config, not {0}"
msgstr "enfants d'une metaconfig doit être une config, pas {0}"
#: tiramisu/config.py:863
#: tiramisu/config.py:858
msgid "child has already a metaconfig's"
msgstr "enfant a déjà une metaconfig"
#: tiramisu/config.py:867
#: tiramisu/config.py:862
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:882
#: tiramisu/config.py:877
msgid ""
"force_default, force_default_if_same or force_dont_change_value cannot be "
"set with only_config"
@ -119,7 +119,7 @@ msgstr ""
"force_default, force_default_if_same ou force_dont_change_value ne peuvent "
"pas être spécifié avec only_config"
#: tiramisu/config.py:888
#: tiramisu/config.py:883
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"
@ -140,59 +140,67 @@ msgstr "propriétés"
msgid "cannot access to {0} \"{1}\" because has {2} {3}"
msgstr "ne peut accéder à l'{0} \"{1}\" a cause de {2} {3}"
#: tiramisu/option/baseoption.py:63
#: tiramisu/option/baseoption.py:62
msgid "{0} must be a function"
msgstr "{0} doit être une fonction"
#: tiramisu/option/baseoption.py:66
#: tiramisu/option/baseoption.py:65
msgid "{0}_params must be a dict"
msgstr "{0}_params doit être un dict"
#: tiramisu/option/baseoption.py:69
#: tiramisu/option/baseoption.py:68
msgid "{0}_params with key {1} mustn't have length different to 1"
msgstr ""
"{0}_params avec la clef {1} ne doit pas avoir une longueur différent de 1"
#: tiramisu/option/baseoption.py:73
#: tiramisu/option/baseoption.py:72
msgid "{0}_params must be tuple for key \"{1}\""
msgstr "{0}_params doit être un tuple pour la clef \"{1}\""
#: tiramisu/option/baseoption.py:79
#: tiramisu/option/baseoption.py:78
msgid "{0}_params with length of tuple as 1 must only have None as first value"
msgstr ""
"{0}_params avec un tuple de longueur 1 doit seulement avoir None comme "
"première valeur"
#: tiramisu/option/baseoption.py:83
#: tiramisu/option/baseoption.py:82
msgid "{0}_params must only have 1 or 2 as length"
msgstr "{0}_params doit seulement avoir une longueur de 1 ou 2"
#: tiramisu/option/baseoption.py:89
#: tiramisu/option/baseoption.py:88
msgid "{0}_params must have an option not a {0} for first argument"
msgstr "{0}_params doit avoir une option pas un {0} pour premier argument"
#: tiramisu/option/baseoption.py:93
#: tiramisu/option/baseoption.py:92
msgid "{0}_params must have a boolean not a {0} for second argument"
msgstr "{0}_params doit avoir un booléen pas un {0} pour second argument"
#: tiramisu/option/baseoption.py:110
#: tiramisu/option/baseoption.py:109
msgid "invalid name: {0} for option"
msgstr "nom invalide : {0} pour l'option"
#: tiramisu/option/baseoption.py:112
#: tiramisu/option/baseoption.py:111
msgid "default_multi is set whereas multi is False in option: {0}"
msgstr ""
"default_multi est spécifié alors que multi est à False pour l'option : {0}"
#: tiramisu/option/baseoption.py:124
#: tiramisu/option/baseoption.py:123
msgid "invalid multi value"
msgstr "valeur multiple invalide"
#: tiramisu/option/baseoption.py:134
#: tiramisu/option/baseoption.py:125
msgid "unique must be a boolean"
msgstr "unique doit être un booléan"
#: tiramisu/option/baseoption.py:127
msgid "unique must be set only with multi value"
msgstr "unique doit être activé uniquement avec une valeur multiple"
#: tiramisu/option/baseoption.py:137
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:173
#: tiramisu/option/baseoption.py:176
msgid ""
"params defined for a callback function but no callback defined yet for "
"option {0}"
@ -200,137 +208,138 @@ msgstr ""
"params définis pour une fonction callback mais par de callback encore "
"définis pour l'option {0}"
#: tiramisu/option/baseoption.py:178
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:181
msgid "a callback is already set for {0}, cannot set another one's"
msgstr "un calback a déjà été définit pour {0}, ne peut en définir un autre"
#: tiramisu/option/baseoption.py:262
#: tiramisu/option/baseoption.py:265
msgid "cannot serialize Option, only in OptionDescription"
msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
#: tiramisu/option/baseoption.py:343 tiramisu/storage/dictionary/option.py:119
#: tiramisu/option/baseoption.py:346 tiramisu/storage/dictionary/option.py:123
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:364
#: tiramisu/option/baseoption.py:367
msgid "invalid string"
msgstr "invalide caractère"
#: tiramisu/option/baseoption.py:367
#: tiramisu/option/baseoption.py:370
msgid "invalid unicode or string"
msgstr "invalide unicode ou string"
#: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577
msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}"
#: tiramisu/option/baseoption.py:536 tiramisu/option/baseoption.py:581
msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\""
#: tiramisu/option/baseoption.py:548
msgid "do_validation for {0}: error in value"
msgstr "do_validation for {0} : erreur dans un la valeur"
#: tiramisu/option/baseoption.py:567
#: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572
msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}"
msgstr ""
"attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", "
"{3}"
#: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607
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:513 tiramisu/option/baseoption.py:624
msgid "invalid value \"{}\", this value is already in \"{}\""
msgstr "valeur invalide \"{}\", cette valeur est déjà dans \"{}\""
#: tiramisu/option/baseoption.py:613
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:554 tiramisu/option/baseoption.py:591
msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}"
#: tiramisu/option/baseoption.py:664 tiramisu/option/baseoption.py:668
#: tiramisu/option/baseoption.py:558 tiramisu/option/baseoption.py:595
msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\""
#: tiramisu/option/baseoption.py:569
msgid "do_validation for {0}: error in value"
msgstr "do_validation for {0} : erreur dans un la valeur"
#: tiramisu/option/baseoption.py:611 tiramisu/option/baseoption.py:629
msgid "invalid value \"{0}\" for \"{1}\" which must be a list"
msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste"
#: tiramisu/option/baseoption.py:616
msgid "invalid value \"{}\" for \"{}\" which must not be a list"
msgstr "valeur invalide \"{0}\" pour \"{1}\" qui ne doit pas être une liste"
#: tiramisu/option/baseoption.py:638
msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list"
msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste de liste"
#: tiramisu/option/baseoption.py:691 tiramisu/option/baseoption.py:695
msgid "cannot add consistency with submulti option"
msgstr "ne peut ajouter de test de consistence a une option submulti"
#: tiramisu/option/baseoption.py:670
#: tiramisu/option/baseoption.py:697
msgid "consistency must be set with an option"
msgstr "consistency doit être configuré avec une option"
#: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680
#: tiramisu/option/baseoption.py:700 tiramisu/option/baseoption.py:707
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:676
#: tiramisu/option/baseoption.py:703
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:683
#: tiramisu/option/baseoption.py:710
msgid "cannot add consistency with itself"
msgstr "ne peut ajouter une consistency avec lui même"
#: tiramisu/option/baseoption.py:685
#: tiramisu/option/baseoption.py:712
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:702
#: tiramisu/option/baseoption.py:729
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:709
#: tiramisu/option/baseoption.py:736
msgid "consistency {0} not available for this option"
msgstr "consistency {0} non valable pour cette option"
#: tiramisu/option/baseoption.py:713
#: tiramisu/option/baseoption.py:740
msgid "unknow parameter {0} in consistency"
msgstr "paramètre inconnu {0} dans un test de consistance"
#: tiramisu/option/baseoption.py:773
#: tiramisu/option/baseoption.py:803
msgid "_cons_not_equal: {} are not different"
msgstr "_cons_not_equal: {} sont différents"
#: tiramisu/option/baseoption.py:777
msgid "this value is already present"
msgstr "cette valeur est déjà présente"
#: tiramisu/option/baseoption.py:781
#: tiramisu/option/baseoption.py:807
msgid "should be different from the value of {}"
msgstr "devrait être différent de la valeur de {}"
#: tiramisu/option/baseoption.py:783
#: tiramisu/option/baseoption.py:809
msgid "must be different from the value of {}"
msgstr "doit être différent de la valeur de {}"
#: tiramisu/option/baseoption.py:787
#: tiramisu/option/baseoption.py:813
msgid "value for {} should be different"
msgstr "valeur pour {} devrait être différent"
#: tiramisu/option/baseoption.py:789
#: tiramisu/option/baseoption.py:815
msgid "value for {} must be different"
msgstr "valeur pour {} doit être différent"
#: tiramisu/option/baseoption.py:845
#: tiramisu/option/baseoption.py:871
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:865
#: tiramisu/option/baseoption.py:891
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:871
#: tiramisu/option/baseoption.py:897
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:879
#: tiramisu/option/baseoption.py:905
msgid ""
"malformed requirements for option: {0} require must have option, expected "
"and action keys"
@ -338,33 +347,33 @@ msgstr ""
"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
"option, expected et action"
#: tiramisu/option/baseoption.py:886
#: tiramisu/option/baseoption.py:912
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:891
#: tiramisu/option/baseoption.py:917
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:895
#: tiramisu/option/baseoption.py:921
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:899
#: tiramisu/option/baseoption.py:925
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:903
#: tiramisu/option/baseoption.py:929
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:906
#: tiramisu/option/baseoption.py:932
msgid ""
"malformed requirements multi option must not set as requires of non multi "
"option {0}"
@ -372,18 +381,18 @@ 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:912
#: tiramisu/option/baseoption.py:938
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:917
#: tiramisu/option/baseoption.py:943
msgid "inconsistency in action types for option: {0} action: {1}"
msgstr "incohérence dans les types action pour l'option : {0} action {1}"
#: tiramisu/option/baseoption.py:945
#: tiramisu/option/baseoption.py:971
msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
@ -699,8 +708,8 @@ msgid "group_type: {0} not allowed"
msgstr "group_type : {0} non autorisé"
#: tiramisu/option/optiondescription.py:313
msgid "DynOptionDescription callback return not uniq value"
msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique"
msgid "DynOptionDescription callback return not unique value"
msgstr "le callback de DynOptionDescription retourne une valeur non unique"
#: tiramisu/option/optiondescription.py:316
msgid "invalid suffix: {0} for option"
@ -759,7 +768,7 @@ msgstr ""
msgid "permissive must be a tuple"
msgstr "permissive doit être un tuple"
#: tiramisu/setting.py:545 tiramisu/value.py:528
#: tiramisu/setting.py:545 tiramisu/value.py:539
msgid "invalid generic owner {0}"
msgstr "invalide owner générique {0}"
@ -795,46 +804,46 @@ msgstr "ne peut pas importer le stockage {0}"
msgid "option {0} not already exists in storage {1}"
msgstr "option {0} n'existe pas dans l'espace de stockage {1}"
#: tiramisu/storage/dictionary/option.py:104
#: tiramisu/storage/dictionary/option.py:108
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:144
#: tiramisu/storage/dictionary/option.py:148
#: tiramisu/storage/dictionary/value.py:234
#: tiramisu/storage/sqlalchemy/option.py:666
msgid "information's item not found: {0}"
msgstr "aucune config spécifiée alors que c'est nécessaire"
#: tiramisu/storage/dictionary/option.py:406
#: tiramisu/storage/dictionary/option.py:413
msgid "use impl_get_opt_by_path only with root OptionDescription"
msgstr "utiliser impl_get_opt_by_path seulement sur l'OptionDescription racine"
#: tiramisu/storage/dictionary/option.py:408
#: tiramisu/storage/dictionary/option.py:415
#: tiramisu/storage/sqlalchemy/option.py:730
msgid "no option for path {0}"
msgstr "pas d'option pour le chemin {0}"
#: tiramisu/storage/dictionary/option.py:413
#: tiramisu/storage/dictionary/option.py:420
#: tiramisu/storage/sqlalchemy/option.py:740
msgid "use impl_get_path_by_opt only with root OptionDescription"
msgstr ""
"utiliser impl_get_path_by_opt seulement avec une OptionDescription racine"
#: tiramisu/storage/dictionary/option.py:415
#: tiramisu/storage/dictionary/option.py:422
#: tiramisu/storage/sqlalchemy/option.py:741
msgid "no option {0} found"
msgstr "pas d'option {0} trouvée"
#: tiramisu/storage/dictionary/option.py:462
#: tiramisu/storage/dictionary/option.py:469
msgid "cannot find dynpath"
msgstr "ne peut trouver le dynpath"
#: tiramisu/storage/dictionary/option.py:551
#: tiramisu/storage/dictionary/option.py:558
#: tiramisu/storage/sqlalchemy/option.py:894
msgid "suffix and context needed if it's a dyn option"
msgstr "suffix et context obligatoire si c'est une option dynamique"
#: tiramisu/storage/dictionary/option.py:572
#: tiramisu/storage/dictionary/option.py:579
#: tiramisu/storage/sqlalchemy/option.py:926
msgid "unknown Option {0} in OptionDescription {1}"
msgstr "Option {0} inconnue pour l'OptionDescription {1}"
@ -857,55 +866,76 @@ 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:378
#: tiramisu/value.py:388
msgid "you should only set value with config"
msgstr "vous devez seul affecter une valeur avec un config"
#: tiramisu/value.py:489
#: tiramisu/value.py:500
msgid "owner only avalaible for an option"
msgstr "owner seulement possible pour une option"
#: tiramisu/value.py:533
#: tiramisu/value.py:544
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:667
#: tiramisu/value.py:678
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:704
#: tiramisu/value.py:715
msgid "{0} is already a Multi "
msgstr "{0} est déjà une Multi"
#: tiramisu/value.py:784
#: tiramisu/value.py:795
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:817
#: tiramisu/value.py:828
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:821
#: tiramisu/value.py:832
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:830
#: tiramisu/value.py:841
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:837
#: tiramisu/value.py:848
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:854
#: tiramisu/value.py:865
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:889
#: tiramisu/value.py:905
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 "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"
#~ 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"
#~ 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"
#~ msgid "this value is already present"
#~ msgstr "cette valeur est déjà présente"
#~ msgid "DynOptionDescription callback return not uniq value"
#~ msgstr ""
#~ "callback d'une DynOptionDescription ne retourne pas une valeur unique"
#~ msgid "malformed consistency option {0} must be a master/slaves"
#~ msgstr ""
#~ "test de consistence mal formé pour l'option {0} doit être une maître/"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2016-11-16 22:25+CET\n"
"POT-Creation-Date: 2016-11-20 17:57+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"
@ -27,88 +27,88 @@ msgstr ""
msgid "descr must be an optiondescription, not {0}"
msgstr ""
#: tiramisu/config.py:148
#: tiramisu/config.py:146
msgid "unknown group_type: {0}"
msgstr ""
#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54
#: tiramisu/value.py:738
#: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54
#: tiramisu/value.py:749
msgid "the context does not exist anymore"
msgstr ""
#: tiramisu/config.py:192
#: tiramisu/config.py:190
msgid "no option description found for this config (may be GroupConfig)"
msgstr ""
#: tiramisu/config.py:228
#: tiramisu/config.py:226
msgid "can't assign to an OptionDescription"
msgstr ""
#: tiramisu/config.py:389
#: tiramisu/config.py:384
msgid "unknown type_ type {0}for _find"
msgstr ""
#: tiramisu/config.py:432
#: tiramisu/config.py:427
msgid "no option found in config with these criteria"
msgstr ""
#: tiramisu/config.py:480
#: tiramisu/config.py:475
msgid "make_dict can't filtering with value without option"
msgstr ""
#: tiramisu/config.py:503
#: tiramisu/config.py:498
msgid "unexpected path {0}, should start with {1}"
msgstr ""
#: tiramisu/config.py:578
#: tiramisu/config.py:573
msgid "opt in getowner must be an option not {0}"
msgstr ""
#: tiramisu/config.py:626
#: tiramisu/config.py:621
msgid "cannot serialize Config with MetaConfig"
msgstr ""
#: tiramisu/config.py:640
#: tiramisu/config.py:635
msgid "this storage is not serialisable, could be a none persistent storage"
msgstr ""
#: tiramisu/config.py:705
#: tiramisu/config.py:700
msgid "invalid name: {0} for config"
msgstr ""
#: tiramisu/config.py:737
#: tiramisu/config.py:732
msgid "groupconfig's children must be a list"
msgstr ""
#: tiramisu/config.py:741
#: tiramisu/config.py:736
msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
msgstr ""
#: tiramisu/config.py:744
#: tiramisu/config.py:739
msgid "name must be set to config before creating groupconfig"
msgstr ""
#: tiramisu/config.py:750
#: tiramisu/config.py:745
msgid "config name must be uniq in groupconfig for {0}"
msgstr ""
#: tiramisu/config.py:859
#: tiramisu/config.py:854
msgid "metaconfig's children should be config, not {0}"
msgstr ""
#: tiramisu/config.py:863
#: tiramisu/config.py:858
msgid "child has already a metaconfig's"
msgstr ""
#: tiramisu/config.py:867
#: tiramisu/config.py:862
msgid "all config in metaconfig must have the same optiondescription"
msgstr ""
#: tiramisu/config.py:882
#: tiramisu/config.py:877
msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config"
msgstr ""
#: tiramisu/config.py:888
#: tiramisu/config.py:883
msgid "force_default and force_dont_change_value cannot be set together"
msgstr ""
@ -128,211 +128,223 @@ msgstr ""
msgid "cannot access to {0} \"{1}\" because has {2} {3}"
msgstr ""
#: tiramisu/option/baseoption.py:63
#: tiramisu/option/baseoption.py:62
msgid "{0} must be a function"
msgstr ""
#: tiramisu/option/baseoption.py:66
#: tiramisu/option/baseoption.py:65
msgid "{0}_params must be a dict"
msgstr ""
#: tiramisu/option/baseoption.py:69
#: tiramisu/option/baseoption.py:68
msgid "{0}_params with key {1} mustn't have length different to 1"
msgstr ""
#: tiramisu/option/baseoption.py:73
#: tiramisu/option/baseoption.py:72
msgid "{0}_params must be tuple for key \"{1}\""
msgstr ""
#: tiramisu/option/baseoption.py:79
#: tiramisu/option/baseoption.py:78
msgid "{0}_params with length of tuple as 1 must only have None as first value"
msgstr ""
#: tiramisu/option/baseoption.py:83
#: tiramisu/option/baseoption.py:82
msgid "{0}_params must only have 1 or 2 as length"
msgstr ""
#: tiramisu/option/baseoption.py:89
#: tiramisu/option/baseoption.py:88
msgid "{0}_params must have an option not a {0} for first argument"
msgstr ""
#: tiramisu/option/baseoption.py:93
#: tiramisu/option/baseoption.py:92
msgid "{0}_params must have a boolean not a {0} for second argument"
msgstr ""
#: tiramisu/option/baseoption.py:110
#: tiramisu/option/baseoption.py:109
msgid "invalid name: {0} for option"
msgstr ""
#: tiramisu/option/baseoption.py:112
#: tiramisu/option/baseoption.py:111
msgid "default_multi is set whereas multi is False in option: {0}"
msgstr ""
#: tiramisu/option/baseoption.py:124
#: tiramisu/option/baseoption.py:123
msgid "invalid multi value"
msgstr ""
#: tiramisu/option/baseoption.py:134
#: tiramisu/option/baseoption.py:125
msgid "unique must be a boolean"
msgstr ""
#: tiramisu/option/baseoption.py:127
msgid "unique must be set only with multi value"
msgstr ""
#: tiramisu/option/baseoption.py:137
msgid "invalid properties type {0} for {1}, must be a tuple"
msgstr ""
#: tiramisu/option/baseoption.py:173
#: tiramisu/option/baseoption.py:176
msgid "params defined for a callback function but no callback defined yet for option {0}"
msgstr ""
#: tiramisu/option/baseoption.py:178
msgid "a callback is already set for option {0}, cannot set another one's"
#: tiramisu/option/baseoption.py:181
msgid "a callback is already set for {0}, cannot set another one's"
msgstr ""
#: tiramisu/option/baseoption.py:262
#: tiramisu/option/baseoption.py:265
msgid "cannot serialize Option, only in OptionDescription"
msgstr ""
#: tiramisu/option/baseoption.py:343 tiramisu/storage/dictionary/option.py:119
#: tiramisu/option/baseoption.py:346 tiramisu/storage/dictionary/option.py:123
msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr ""
#: tiramisu/option/baseoption.py:364
#: tiramisu/option/baseoption.py:367
msgid "invalid string"
msgstr ""
#: tiramisu/option/baseoption.py:367
#: tiramisu/option/baseoption.py:370
msgid "invalid unicode or string"
msgstr ""
#: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577
msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr ""
#: tiramisu/option/baseoption.py:536 tiramisu/option/baseoption.py:581
msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr ""
#: tiramisu/option/baseoption.py:548
msgid "do_validation for {0}: error in value"
msgstr ""
#: tiramisu/option/baseoption.py:567
#: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572
msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}"
msgstr ""
#: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607
msgid "invalid value {0} for option {1} which must be a list"
#: tiramisu/option/baseoption.py:513 tiramisu/option/baseoption.py:624
msgid "invalid value \"{}\", this value is already in \"{}\""
msgstr ""
#: tiramisu/option/baseoption.py:613
msgid "invalid value {0} for option {1} which must be a list of list"
#: tiramisu/option/baseoption.py:554 tiramisu/option/baseoption.py:591
msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr ""
#: tiramisu/option/baseoption.py:664 tiramisu/option/baseoption.py:668
#: tiramisu/option/baseoption.py:558 tiramisu/option/baseoption.py:595
msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr ""
#: tiramisu/option/baseoption.py:569
msgid "do_validation for {0}: error in value"
msgstr ""
#: tiramisu/option/baseoption.py:611 tiramisu/option/baseoption.py:629
msgid "invalid value \"{0}\" for \"{1}\" which must be a list"
msgstr ""
#: tiramisu/option/baseoption.py:616
msgid "invalid value \"{}\" for \"{}\" which must not be a list"
msgstr ""
#: tiramisu/option/baseoption.py:638
msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list"
msgstr ""
#: tiramisu/option/baseoption.py:691 tiramisu/option/baseoption.py:695
msgid "cannot add consistency with submulti option"
msgstr ""
#: tiramisu/option/baseoption.py:670
#: tiramisu/option/baseoption.py:697
msgid "consistency must be set with an option"
msgstr ""
#: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680
#: tiramisu/option/baseoption.py:700 tiramisu/option/baseoption.py:707
msgid "almost one option in consistency is in a dynoptiondescription but not all"
msgstr ""
#: tiramisu/option/baseoption.py:676
#: tiramisu/option/baseoption.py:703
msgid "option in consistency must be in same dynoptiondescription"
msgstr ""
#: tiramisu/option/baseoption.py:683
#: tiramisu/option/baseoption.py:710
msgid "cannot add consistency with itself"
msgstr ""
#: tiramisu/option/baseoption.py:685
#: tiramisu/option/baseoption.py:712
msgid "every options in consistency must be multi or none"
msgstr ""
#: tiramisu/option/baseoption.py:702
#: tiramisu/option/baseoption.py:729
msgid "'{0}' ({1}) cannot add consistency, option is read-only"
msgstr ""
#: tiramisu/option/baseoption.py:709
#: tiramisu/option/baseoption.py:736
msgid "consistency {0} not available for this option"
msgstr ""
#: tiramisu/option/baseoption.py:713
#: tiramisu/option/baseoption.py:740
msgid "unknow parameter {0} in consistency"
msgstr ""
#: tiramisu/option/baseoption.py:773
#: tiramisu/option/baseoption.py:803
msgid "_cons_not_equal: {} are not different"
msgstr ""
#: tiramisu/option/baseoption.py:777
msgid "this value is already present"
msgstr ""
#: tiramisu/option/baseoption.py:781
#: tiramisu/option/baseoption.py:807
msgid "should be different from the value of {}"
msgstr ""
#: tiramisu/option/baseoption.py:783
#: tiramisu/option/baseoption.py:809
msgid "must be different from the value of {}"
msgstr ""
#: tiramisu/option/baseoption.py:787
#: tiramisu/option/baseoption.py:813
msgid "value for {} should be different"
msgstr ""
#: tiramisu/option/baseoption.py:789
#: tiramisu/option/baseoption.py:815
msgid "value for {} must be different"
msgstr ""
#: tiramisu/option/baseoption.py:845
#: tiramisu/option/baseoption.py:871
msgid "default value not allowed if option: {0} is calculated"
msgstr ""
#: tiramisu/option/baseoption.py:865
#: tiramisu/option/baseoption.py:891
msgid "malformed requirements type for option: {0}, must be a dict"
msgstr ""
#: tiramisu/option/baseoption.py:871
#: tiramisu/option/baseoption.py:897
msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
msgstr ""
#: tiramisu/option/baseoption.py:879
#: tiramisu/option/baseoption.py:905
msgid "malformed requirements for option: {0} require must have option, expected and action keys"
msgstr ""
#: tiramisu/option/baseoption.py:886
#: tiramisu/option/baseoption.py:912
msgid "malformed requirements for option: {0} action cannot be force_store_value"
msgstr ""
#: tiramisu/option/baseoption.py:891
#: tiramisu/option/baseoption.py:917
msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr ""
#: tiramisu/option/baseoption.py:895
#: tiramisu/option/baseoption.py:921
msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr ""
#: tiramisu/option/baseoption.py:899
#: tiramisu/option/baseoption.py:925
msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr ""
#: tiramisu/option/baseoption.py:903
#: tiramisu/option/baseoption.py:929
msgid "malformed requirements must be an option in option {0}"
msgstr ""
#: tiramisu/option/baseoption.py:906
#: tiramisu/option/baseoption.py:932
msgid "malformed requirements multi option must not set as requires of non multi option {0}"
msgstr ""
#: tiramisu/option/baseoption.py:912
#: tiramisu/option/baseoption.py:938
msgid "malformed requirements second argument must be valid for option {0}: {1}"
msgstr ""
#: tiramisu/option/baseoption.py:917
#: tiramisu/option/baseoption.py:943
msgid "inconsistency in action types for option: {0} action: {1}"
msgstr ""
#: tiramisu/option/baseoption.py:945
#: tiramisu/option/baseoption.py:971
msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr ""
@ -633,7 +645,7 @@ msgid "group_type: {0} not allowed"
msgstr ""
#: tiramisu/option/optiondescription.py:313
msgid "DynOptionDescription callback return not uniq value"
msgid "DynOptionDescription callback return not unique value"
msgstr ""
#: tiramisu/option/optiondescription.py:316
@ -689,7 +701,7 @@ msgstr ""
msgid "permissive must be a tuple"
msgstr ""
#: tiramisu/setting.py:545 tiramisu/value.py:528
#: tiramisu/setting.py:545 tiramisu/value.py:539
msgid "invalid generic owner {0}"
msgstr ""
@ -721,45 +733,45 @@ msgstr ""
msgid "option {0} not already exists in storage {1}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:104
#: tiramisu/storage/dictionary/option.py:108
msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:144
#: tiramisu/storage/dictionary/option.py:148
#: tiramisu/storage/dictionary/value.py:234
#: tiramisu/storage/sqlalchemy/option.py:666
msgid "information's item not found: {0}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:406
#: tiramisu/storage/dictionary/option.py:413
msgid "use impl_get_opt_by_path only with root OptionDescription"
msgstr ""
#: tiramisu/storage/dictionary/option.py:408
#: tiramisu/storage/dictionary/option.py:415
#: tiramisu/storage/sqlalchemy/option.py:730
msgid "no option for path {0}"
msgstr ""
#: tiramisu/storage/dictionary/option.py:413
#: tiramisu/storage/dictionary/option.py:420
#: tiramisu/storage/sqlalchemy/option.py:740
msgid "use impl_get_path_by_opt only with root OptionDescription"
msgstr ""
#: tiramisu/storage/dictionary/option.py:415
#: tiramisu/storage/dictionary/option.py:422
#: tiramisu/storage/sqlalchemy/option.py:741
msgid "no option {0} found"
msgstr ""
#: tiramisu/storage/dictionary/option.py:462
#: tiramisu/storage/dictionary/option.py:469
msgid "cannot find dynpath"
msgstr ""
#: tiramisu/storage/dictionary/option.py:551
#: tiramisu/storage/dictionary/option.py:558
#: tiramisu/storage/sqlalchemy/option.py:894
msgid "suffix and context needed if it's a dyn option"
msgstr ""
#: tiramisu/storage/dictionary/option.py:572
#: tiramisu/storage/dictionary/option.py:579
#: tiramisu/storage/sqlalchemy/option.py:926
msgid "unknown Option {0} in OptionDescription {1}"
msgstr ""
@ -781,51 +793,51 @@ msgstr ""
msgid "information's item not found {0}"
msgstr ""
#: tiramisu/value.py:378
#: tiramisu/value.py:388
msgid "you should only set value with config"
msgstr ""
#: tiramisu/value.py:489
#: tiramisu/value.py:500
msgid "owner only avalaible for an option"
msgstr ""
#: tiramisu/value.py:533
#: tiramisu/value.py:544
msgid "no value for {0} cannot change owner to {1}"
msgstr ""
#: tiramisu/value.py:667
#: tiramisu/value.py:678
msgid "can force cache only if cache is actived in config"
msgstr ""
#: tiramisu/value.py:704
#: tiramisu/value.py:715
msgid "{0} is already a Multi "
msgstr ""
#: tiramisu/value.py:784
#: tiramisu/value.py:795
msgid "cannot append a value on a multi option {0} which is a slave"
msgstr ""
#: tiramisu/value.py:817
#: tiramisu/value.py:828
msgid "cannot sort multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:821
#: tiramisu/value.py:832
msgid "cmp is not permitted in python v3 or greater"
msgstr ""
#: tiramisu/value.py:830
#: tiramisu/value.py:841
msgid "cannot reverse multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:837
#: tiramisu/value.py:848
msgid "cannot insert multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:854
#: tiramisu/value.py:865
msgid "cannot extend multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:889
#: tiramisu/value.py:905
msgid "cannot pop a value on a multi option {0} which is a slave"
msgstr ""