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]) 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(): def test_non_multi_unique():
raises(ValueError, "IntOption('int', '', unique=True)") 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.setting import owners, groups
from tiramisu.config import Config from tiramisu.config import Config
from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\ from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\
BroadcastOption, SymLinkOption, OptionDescription, submulti BroadcastOption, StrOption, SymLinkOption, OptionDescription, submulti
from tiramisu.error import ConfigError, ValueWarning, PropertiesOptionError from tiramisu.error import ConfigError, ValueWarning, PropertiesOptionError
import warnings import warnings
def return_value(value=None):
return value
def test_consistency(): def test_consistency():
a = IntOption('a', '') a = IntOption('a', '')
b = IntOption('b', '') b = IntOption('b', '')
@ -67,9 +71,15 @@ def test_consistency_warnings_only_more_option():
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
c.b = 1 c.b = 1
assert w != [] 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: with warnings.catch_warnings(record=True) as w:
c.d = 1 c.d = 1
assert w != [] assert w != []
assert len(w) == 1
def test_consistency_not_equal(): def test_consistency_not_equal():

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Tiramisu\n" "Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: \n"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n" "Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
"Language-Team: Tiramisu's team <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}" msgid "descr must be an optiondescription, not {0}"
msgstr "descr doit être une optiondescription pas un {0}" msgstr "descr doit être une optiondescription pas un {0}"
#: tiramisu/config.py:148 #: tiramisu/config.py:146
msgid "unknown group_type: {0}" msgid "unknown group_type: {0}"
msgstr "group_type inconnu: {0}" msgstr "group_type inconnu: {0}"
#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54 #: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54
#: tiramisu/value.py:738 #: tiramisu/value.py:749
msgid "the context does not exist anymore" msgid "the context does not exist anymore"
msgstr "le context n'existe plus" 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)" msgid "no option description found for this config (may be GroupConfig)"
msgstr "" msgstr ""
"pas d'option description trouvé pour cette config (peut être un GroupConfig)" "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" msgid "can't assign to an OptionDescription"
msgstr "ne peut pas attribuer une valeur à une 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" msgid "unknown type_ type {0}for _find"
msgstr "type_ type {0} pour _find inconnu" msgstr "type_ type {0} pour _find inconnu"
#: tiramisu/config.py:432 #: tiramisu/config.py:427
msgid "no option found in config with these criteria" msgid "no option found in config with these criteria"
msgstr "aucune option trouvée dans la config avec ces critères" 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" msgid "make_dict can't filtering with value without option"
msgstr "make_dict ne peut filtrer sur une valeur mais sans 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}" msgid "unexpected path {0}, should start with {1}"
msgstr "chemin imprévu {0}, devrait commencer par {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}" msgid "opt in getowner must be an option not {0}"
msgstr "opt dans getowner doit être une option pas {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" msgid "cannot serialize Config with MetaConfig"
msgstr "impossible de sérialiser une Config avec une 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" 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" 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" msgid "invalid name: {0} for config"
msgstr "nom invalide : {0} pour la config" msgstr "nom invalide : {0} pour la config"
#: tiramisu/config.py:737 #: tiramisu/config.py:732
msgid "groupconfig's children must be a list" msgid "groupconfig's children must be a list"
msgstr "enfants d'une groupconfig doit être une liste" 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" msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
msgstr "" msgstr ""
"les enfants d'un groupconfig doivent être des Config, MetaConfig ou " "les enfants d'un groupconfig doivent être des Config, MetaConfig ou "
"GroupConfig" "GroupConfig"
#: tiramisu/config.py:744 #: tiramisu/config.py:739
msgid "name must be set to config before creating groupconfig" msgid "name must be set to config before creating groupconfig"
msgstr "un nom doit être donné à la config avant de créer un 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}" msgid "config name must be uniq in groupconfig for {0}"
msgstr "le nom de la config doit être unique dans un groupconfig pour {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}" msgid "metaconfig's children should be config, not {0}"
msgstr "enfants d'une metaconfig doit être une config, pas {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" msgid "child has already a metaconfig's"
msgstr "enfant a déjà une metaconfig" 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" msgid "all config in metaconfig must have the same optiondescription"
msgstr "" msgstr ""
"toutes les configs d'une metaconfig doivent avoir la même optiondescription" "toutes les configs d'une metaconfig doivent avoir la même optiondescription"
#: tiramisu/config.py:882 #: tiramisu/config.py:877
msgid "" msgid ""
"force_default, force_default_if_same or force_dont_change_value cannot be " "force_default, force_default_if_same or force_dont_change_value cannot be "
"set with only_config" "set with only_config"
@ -119,7 +119,7 @@ msgstr ""
"force_default, force_default_if_same ou force_dont_change_value ne peuvent " "force_default, force_default_if_same ou force_dont_change_value ne peuvent "
"pas être spécifié avec only_config" "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" msgid "force_default and force_dont_change_value cannot be set together"
msgstr "" msgstr ""
"force_default et force_dont_change_value ne peuvent pas être mis ensemble" "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}" msgid "cannot access to {0} \"{1}\" because has {2} {3}"
msgstr "ne peut accéder à l'{0} \"{1}\" a cause de {2} {3}" msgstr "ne peut accéder à l'{0} \"{1}\" a cause de {2} {3}"
#: tiramisu/option/baseoption.py:63 #: tiramisu/option/baseoption.py:62
msgid "{0} must be a function" msgid "{0} must be a function"
msgstr "{0} doit être une fonction" msgstr "{0} doit être une fonction"
#: tiramisu/option/baseoption.py:66 #: tiramisu/option/baseoption.py:65
msgid "{0}_params must be a dict" msgid "{0}_params must be a dict"
msgstr "{0}_params doit être un 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" msgid "{0}_params with key {1} mustn't have length different to 1"
msgstr "" msgstr ""
"{0}_params avec la clef {1} ne doit 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/baseoption.py:73 #: tiramisu/option/baseoption.py:72
msgid "{0}_params must be tuple for key \"{1}\"" msgid "{0}_params must be tuple for key \"{1}\""
msgstr "{0}_params doit être un tuple pour la clef \"{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" msgid "{0}_params with length of tuple as 1 must only have None as first value"
msgstr "" msgstr ""
"{0}_params avec un tuple de longueur 1 doit seulement avoir None comme " "{0}_params avec un tuple de longueur 1 doit seulement avoir None comme "
"première valeur" "première valeur"
#: tiramisu/option/baseoption.py:83 #: tiramisu/option/baseoption.py:82
msgid "{0}_params must only have 1 or 2 as length" msgid "{0}_params must only have 1 or 2 as length"
msgstr "{0}_params doit seulement avoir une longueur de 1 ou 2" 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" 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" 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" 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" 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" msgid "invalid name: {0} for option"
msgstr "nom invalide : {0} pour l'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}" msgid "default_multi is set whereas multi is False in option: {0}"
msgstr "" msgstr ""
"default_multi est spécifié alors que multi est à False pour l'option : {0}" "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" msgid "invalid multi value"
msgstr "valeur multiple invalide" 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" msgid "invalid properties type {0} for {1}, must be a tuple"
msgstr "type des properties invalide {0} pour {1}, doit être un tuple" msgstr "type des properties invalide {0} pour {1}, doit être un tuple"
#: tiramisu/option/baseoption.py:173 #: tiramisu/option/baseoption.py:176
msgid "" msgid ""
"params defined for a callback function but no callback defined yet for " "params defined for a callback function but no callback defined yet for "
"option {0}" "option {0}"
@ -200,137 +208,138 @@ msgstr ""
"params définis pour une fonction callback mais par de callback encore " "params définis pour une fonction callback mais par de callback encore "
"définis pour l'option {0}" "définis pour l'option {0}"
#: tiramisu/option/baseoption.py:178 #: tiramisu/option/baseoption.py:181
msgid "a callback is already set for option {0}, cannot set another one's" msgid "a callback is already set for {0}, cannot set another one's"
msgstr "" msgstr "un calback a déjà été définit pour {0}, ne peut en définir un autre"
"un callback est en lecture seul pour l'option {0}, ne peut en placer une "
"autre"
#: tiramisu/option/baseoption.py:262 #: tiramisu/option/baseoption.py:265
msgid "cannot serialize Option, only in OptionDescription" msgid "cannot serialize Option, only in OptionDescription"
msgstr "ne peut serialiser une Option, seulement via une 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" msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule" 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" msgid "invalid string"
msgstr "invalide caractère" msgstr "invalide caractère"
#: tiramisu/option/baseoption.py:367 #: tiramisu/option/baseoption.py:370
msgid "invalid unicode or string" msgid "invalid unicode or string"
msgstr "invalide unicode ou string" msgstr "invalide unicode ou string"
#: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577 #: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572
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
msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}" msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}"
msgstr "" msgstr ""
"attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", " "attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", "
"{3}" "{3}"
#: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607 #: tiramisu/option/baseoption.py:513 tiramisu/option/baseoption.py:624
msgid "invalid value {0} for option {1} which must be a list" msgid "invalid value \"{}\", this value is already in \"{}\""
msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste" msgstr "valeur invalide \"{}\", cette valeur est déjà dans \"{}\""
#: tiramisu/option/baseoption.py:613 #: tiramisu/option/baseoption.py:554 tiramisu/option/baseoption.py:591
msgid "invalid value {0} for option {1} which must be a list of list" msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr "" msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}"
"valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste"
#: 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" msgid "cannot add consistency with submulti option"
msgstr "ne peut ajouter de test de consistence a une option submulti" 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" msgid "consistency must be set with an option"
msgstr "consistency doit être configuré avec une 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 "" msgid ""
"almost one option in consistency is in a dynoptiondescription but not all" "almost one option in consistency is in a dynoptiondescription but not all"
msgstr "" msgstr ""
"au moins une option dans le test de consistance est dans une " "au moins une option dans le test de consistance est dans une "
"dynoptiondescription mais pas toutes" "dynoptiondescription mais pas toutes"
#: tiramisu/option/baseoption.py:676 #: tiramisu/option/baseoption.py:703
msgid "option in consistency must be in same dynoptiondescription" msgid "option in consistency must be in same dynoptiondescription"
msgstr "" msgstr ""
"option dans une consistency doit être dans le même dynoptiondescription" "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" msgid "cannot add consistency with itself"
msgstr "ne peut ajouter une consistency avec lui même" 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" msgid "every options in consistency must be multi or none"
msgstr "" msgstr ""
"toutes les options d'une consistency doivent être multi ou ne pas l'être" "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" msgid "'{0}' ({1}) cannot add consistency, option is read-only"
msgstr "" msgstr ""
"'{0}' ({1}) ne peut ajouter de consistency, l'option est en lecture seul" "'{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" msgid "consistency {0} not available for this option"
msgstr "consistency {0} non valable pour cette 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" msgid "unknow parameter {0} in consistency"
msgstr "paramètre inconnu {0} dans un test de consistance" 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" msgid "_cons_not_equal: {} are not different"
msgstr "_cons_not_equal: {} sont différents" msgstr "_cons_not_equal: {} sont différents"
#: tiramisu/option/baseoption.py:777 #: tiramisu/option/baseoption.py:807
msgid "this value is already present"
msgstr "cette valeur est déjà présente"
#: tiramisu/option/baseoption.py:781
msgid "should be different from the value of {}" msgid "should be different from the value of {}"
msgstr "devrait être différent de la valeur de {}" 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 {}" msgid "must be different from the value of {}"
msgstr "doit être différent de la valeur de {}" 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" msgid "value for {} should be different"
msgstr "valeur pour {} devrait être différent" msgstr "valeur pour {} devrait être différent"
#: tiramisu/option/baseoption.py:789 #: tiramisu/option/baseoption.py:815
msgid "value for {} must be different" msgid "value for {} must be different"
msgstr "valeur pour {} doit être différent" 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" 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" 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" msgid "malformed requirements type for option: {0}, must be a dict"
msgstr "" msgstr ""
"type requirements malformé pour l'option : {0}, doit être un dictionnaire" "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}" msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} clefs inconnues {1}, doit " "requirements mal formés pour l'option : {0} clefs inconnues {1}, doit "
"seulement avoir {2}" "seulement avoir {2}"
#: tiramisu/option/baseoption.py:879 #: tiramisu/option/baseoption.py:905
msgid "" msgid ""
"malformed requirements for option: {0} require must have option, expected " "malformed requirements for option: {0} require must have option, expected "
"and action keys" "and action keys"
@ -338,33 +347,33 @@ msgstr ""
"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs " "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
"option, expected et action" "option, expected et action"
#: tiramisu/option/baseoption.py:886 #: tiramisu/option/baseoption.py:912
msgid "" msgid ""
"malformed requirements for option: {0} action cannot be force_store_value" "malformed requirements for option: {0} action cannot be force_store_value"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} action ne peut pas être " "requirements mal formés pour l'option : {0} action ne peut pas être "
"force_store_value" "force_store_value"
#: tiramisu/option/baseoption.py:891 #: tiramisu/option/baseoption.py:917
msgid "malformed requirements for option: {0} inverse must be boolean" msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} inverse doit être un booléen" "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" msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} transitive doit être booléen" "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" msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} same_action doit être un booléen" "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}" msgid "malformed requirements must be an option in option {0}"
msgstr "requirements mal formés doit être une option dans l'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 "" msgid ""
"malformed requirements multi option must not set as requires of non multi " "malformed requirements multi option must not set as requires of non multi "
"option {0}" "option {0}"
@ -372,18 +381,18 @@ msgstr ""
"requirements mal formés une option multiple ne doit pas être spécifié comme " "requirements mal formés une option multiple ne doit pas être spécifié comme "
"pré-requis à l'option non multiple {0}" "pré-requis à l'option non multiple {0}"
#: tiramisu/option/baseoption.py:912 #: tiramisu/option/baseoption.py:938
msgid "" msgid ""
"malformed requirements second argument must be valid for option {0}: {1}" "malformed requirements second argument must be valid for option {0}: {1}"
msgstr "" msgstr ""
"requirements mal formés deuxième argument doit être valide pour l'option " "requirements mal formés deuxième argument doit être valide pour l'option "
"{0} : {1}" "{0} : {1}"
#: tiramisu/option/baseoption.py:917 #: tiramisu/option/baseoption.py:943
msgid "inconsistency in action types for option: {0} action: {1}" msgid "inconsistency in action types for option: {0} action: {1}"
msgstr "incohérence dans les types action pour l'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}" msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "symlinkoption mal formé, doit être une option pour 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é" msgstr "group_type : {0} non autorisé"
#: tiramisu/option/optiondescription.py:313 #: tiramisu/option/optiondescription.py:313
msgid "DynOptionDescription callback return not uniq value" msgid "DynOptionDescription callback return not unique value"
msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique" msgstr "le callback de DynOptionDescription retourne une valeur non unique"
#: tiramisu/option/optiondescription.py:316 #: tiramisu/option/optiondescription.py:316
msgid "invalid suffix: {0} for option" msgid "invalid suffix: {0} for option"
@ -759,7 +768,7 @@ msgstr ""
msgid "permissive must be a tuple" msgid "permissive must be a tuple"
msgstr "permissive doit être un 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}" msgid "invalid generic owner {0}"
msgstr "invalide owner générique {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}" msgid "option {0} not already exists in storage {1}"
msgstr "option {0} n'existe pas dans l'espace de stockage {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}" msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr "la valeur default_multi est invalide {0} pour l'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/dictionary/value.py:234
#: tiramisu/storage/sqlalchemy/option.py:666 #: tiramisu/storage/sqlalchemy/option.py:666
msgid "information's item not found: {0}" msgid "information's item not found: {0}"
msgstr "aucune config spécifiée alors que c'est nécessaire" 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" msgid "use impl_get_opt_by_path only with root OptionDescription"
msgstr "utiliser impl_get_opt_by_path seulement sur l'OptionDescription racine" 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 #: tiramisu/storage/sqlalchemy/option.py:730
msgid "no option for path {0}" msgid "no option for path {0}"
msgstr "pas d'option pour le chemin {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 #: tiramisu/storage/sqlalchemy/option.py:740
msgid "use impl_get_path_by_opt only with root OptionDescription" msgid "use impl_get_path_by_opt only with root OptionDescription"
msgstr "" msgstr ""
"utiliser impl_get_path_by_opt seulement avec une OptionDescription racine" "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 #: tiramisu/storage/sqlalchemy/option.py:741
msgid "no option {0} found" msgid "no option {0} found"
msgstr "pas d'option {0} trouvée" msgstr "pas d'option {0} trouvée"
#: tiramisu/storage/dictionary/option.py:462 #: tiramisu/storage/dictionary/option.py:469
msgid "cannot find dynpath" msgid "cannot find dynpath"
msgstr "ne peut trouver le 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 #: tiramisu/storage/sqlalchemy/option.py:894
msgid "suffix and context needed if it's a dyn option" msgid "suffix and context needed if it's a dyn option"
msgstr "suffix et context obligatoire si c'est une option dynamique" 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 #: tiramisu/storage/sqlalchemy/option.py:926
msgid "unknown Option {0} in OptionDescription {1}" msgid "unknown Option {0} in OptionDescription {1}"
msgstr "Option {0} inconnue pour l'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}" msgid "information's item not found {0}"
msgstr "l'information de l'objet ne sont pas trouvé {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" msgid "you should only set value with config"
msgstr "vous devez seul affecter une valeur avec un 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" msgid "owner only avalaible for an option"
msgstr "owner seulement possible pour une 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}" msgid "no value for {0} cannot change owner to {1}"
msgstr "pas de valeur pour {0} ne peut changer d'utilisateur pour {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" msgid "can force cache only if cache is actived in config"
msgstr "" msgstr ""
"peut force la mise en cache seulement si le cache est activé dans la config" "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 " msgid "{0} is already a Multi "
msgstr "{0} est déjà une 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" 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" 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" 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" 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" msgid "cmp is not permitted in python v3 or greater"
msgstr "cmp n'est pas permis en python v3 ou supérieure" 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" 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" 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" 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" 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" 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" 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" 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" 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" #~ msgid "malformed consistency option {0} must be a master/slaves"
#~ msgstr "" #~ msgstr ""
#~ "test de consistence mal formé pour l'option {0} doit être une maître/" #~ "test de consistence mal formé pour l'option {0} doit être une maître/"

View File

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