consistency "not_equal" works now with multi

This commit is contained in:
Emmanuel Garette 2016-11-16 22:31:42 +01:00
parent 8249b8eb20
commit fc36f674eb
7 changed files with 266 additions and 151 deletions

View file

@ -1,3 +1,6 @@
Wed Nov 16 22:30:12 2016 +0200 Emmanuel Garette <egarette@cadoles.com>
* consistency "not_equal" works now with multi
Wed Oct 12 21:55:53 2016 +0200 Emmanuel Garette <egarette@cadoles.com> Wed Oct 12 21:55:53 2016 +0200 Emmanuel Garette <egarette@cadoles.com>
* consistency is now check "not_equal" if one option has * consistency is now check "not_equal" if one option has
PropertiesOptionError PropertiesOptionError

View file

@ -217,7 +217,7 @@ def test_consistency_not_equal_default_submulti():
raises(ConfigError, "a.impl_add_consistency('not_equal', b)") raises(ConfigError, "a.impl_add_consistency('not_equal', b)")
def test_consistency_not_equal_multi(): def test_consistency_not_equal_masterslave():
a = IntOption('a', '', multi=True) a = IntOption('a', '', multi=True)
b = IntOption('b', '', multi=True) b = IntOption('b', '', multi=True)
od = OptionDescription('a', '', [a, b]) od = OptionDescription('a', '', [a, b])
@ -233,7 +233,7 @@ def test_consistency_not_equal_multi():
c.b = [2] c.b = [2]
def test_consistency_not_equal_multi_default(): def test_consistency_not_equal_masterslaves_default():
a = IntOption('a', '', multi=True) a = IntOption('a', '', multi=True)
b = IntOption('b', '', multi=True, default_multi=1) b = IntOption('b', '', multi=True, default_multi=1)
od = OptionDescription('a', '', [a, b]) od = OptionDescription('a', '', [a, b])
@ -247,6 +247,46 @@ def test_consistency_not_equal_multi_default():
del(c.a) del(c.a)
def test_consistency_not_equal_multi():
a = IntOption('a', '', multi=True)
b = IntOption('b', '', multi=True)
od = OptionDescription('a', '', [a, b])
a.impl_add_consistency('not_equal', b)
c = Config(od)
assert c.a == []
assert c.b == []
c.a = [1]
del(c.a)
c.a = [1]
raises(ValueError, "c.b = [1]")
c.b = [2]
raises(ValueError, "c.b = [2, 1]")
raises(ValueError, "c.b.append(1)")
c.b.append(3)
raises(ValueError, "c.b.append(3)")
raises(ValueError, "c.a.append(3)")
raises(ValueError, "c.a.append(3)")
def test_consistency_not_equal_multi_default():
a = IntOption('a', '', multi=True, default=[1])
b = IntOption('b', '', multi=True, default=[1, 2])
od = OptionDescription('a', '', [a, b])
raises(ValueError, "a.impl_add_consistency('not_equal', b)")
def test_consistency_not_equal_multi_default_modif():
a = IntOption('a', '', multi=True)
b = IntOption('b', '', multi=True, default=[1, 2])
od = OptionDescription('a', '', [a, b])
a.impl_add_consistency('not_equal', b)
c = Config(od)
assert c.a == []
assert c.b == [1, 2]
raises(ValueError, 'c.a.append(1)')
raises(ValueError, 'c.b.append(1)')
def test_consistency_default(): def test_consistency_default():
a = IntOption('a', '', 1) a = IntOption('a', '', 1)
b = IntOption('b', '', 1) b = IntOption('b', '', 1)

View file

@ -519,7 +519,14 @@ def test_pprint():
except Exception, err: except Exception, err:
pass pass
assert str(err) == msg_error.format('option', 'Test string option', 'properties', display_list(['disabled (' + display_list([msg_is.format('string2', 'string'), msg_is.format('Test int option', '1')]) + ')', 'hidden (' + msg_is_not.format('Test int option', display_list([2, 3, 4], 'or')) + ')'])) list_disabled_1 = 'disabled (' + display_list([msg_is.format('string2', 'string'), msg_is.format('Test int option', '1')]) + ')'
list_disabled_2 = 'disabled (' + display_list([msg_is.format('Test int option', '1'), msg_is.format('string2', 'string')]) + ')'
list_hidden = 'hidden (' + msg_is_not.format('Test int option', display_list([2, 3, 4], 'or')) + ')'
comp1 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_disabled_1, list_hidden]))
comp2 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_disabled_2, list_hidden]))
comp3 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_hidden, list_disabled_1]))
comp4 = str(err) == msg_error.format('option', 'Test string option', 'properties', display_list([list_hidden, list_disabled_2]))
assert comp1 or comp2 or comp3 or comp4
try: try:
config.options.val2 config.options.val2
@ -532,8 +539,23 @@ def test_pprint():
config.val3 config.val3
except Exception, err: except Exception, err:
pass pass
msg_1 = msg_is.format('string2', 'string')
msg_2 = msg_is.format('Test int option', 1)
msg_3 = msg_is_not.format('Test int option', display_list([2, 3, 4], 'or'))
assert str(err) == msg_error.format('option', 'val3', 'property', 'hidden (' + display_list([msg_is.format('string2', 'string'), msg_is.format('Test int option', 1), msg_is_not.format('Test int option', display_list([2, 3, 4], 'or'))]) + ')') list_hidden = 'hidden (' + display_list([msg_1, msg_2, msg_3]) + ')'
comp1 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
list_hidden = 'hidden (' + display_list([msg_1, msg_3, msg_2]) + ')'
comp2 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
list_hidden = 'hidden (' + display_list([msg_2, msg_1, msg_3]) + ')'
comp3 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
list_hidden = 'hidden (' + display_list([msg_2, msg_3, msg_1]) + ')'
comp4 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
list_hidden = 'hidden (' + display_list([msg_3, msg_1, msg_2]) + ')'
comp5 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
list_hidden = 'hidden (' + display_list([msg_3, msg_2, msg_1]) + ')'
comp6 = str(err) == msg_error.format('option', 'val3', 'property', list_hidden)
assert comp1 or comp2 or comp3 or comp4 or comp5 or comp6
try: try:
config.string config.string

View file

@ -32,12 +32,17 @@ from ..storage import get_storages_option
from . import MasterSlaves from . import MasterSlaves
if sys.version_info[0] >= 3: # pragma: optional cover
xrange = range
StorageBase = get_storages_option('base') StorageBase = get_storages_option('base')
submulti = 2 submulti = 2
name_regexp = re.compile(r'^[a-z][a-zA-Z\d\-_]*$') name_regexp = re.compile(r'^[a-z][a-zA-Z\d\-_]*$')
forbidden_names = frozenset(['iter_all', 'iter_group', 'find', 'find_first', forbidden_names = frozenset(['iter_all', 'iter_group', 'find', 'find_first',
'make_dict', 'unwrap_from_path', 'read_only', 'make_dict', 'unwrap_from_path', 'read_only',
'read_write', 'getowner', 'set_contexts']) 'read_write', 'getowner', 'set_contexts'])
allowed_const_list = ['_cons_not_equal']
def valid_name(name): def valid_name(name):
@ -382,7 +387,7 @@ class Option(OnlyOption):
_empty = '' _empty = ''
def _launch_consistency(self, current_opt, func, option, value, context, def _launch_consistency(self, current_opt, func, option, value, context,
index, submulti_index, all_cons_opts, warnings_only, index, submulti_index, opts, warnings_only,
transitive): transitive):
"""Launch consistency now """Launch consistency now
@ -396,8 +401,8 @@ class Option(OnlyOption):
:param index: only for multi option, consistency should be launch for :param index: only for multi option, consistency should be launch for
specified index specified index
:type index: `int` :type index: `int`
:param all_cons_opts: all options concerne by this consistency :param opts: all options concerne by this consistency
:type all_cons_opts: `list` of `tiramisu.option.Option` :type opts: `list` of `tiramisu.option.Option`
:param warnings_only: specific raise error for warning :param warnings_only: specific raise error for warning
:type warnings_only: `boolean` :type warnings_only: `boolean`
:param transitive: propertyerror is transitive :param transitive: propertyerror is transitive
@ -407,14 +412,16 @@ class Option(OnlyOption):
descr = context.cfgimpl_get_description() descr = context.cfgimpl_get_description()
all_cons_vals = [] all_cons_vals = []
all_cons_opts = []
val_consistencies = True val_consistencies = True
for opt in all_cons_opts: for opt in opts:
is_multi = opt.impl_is_multi() and not opt.impl_is_master_slaves()
if (isinstance(opt, DynSymLinkOption) and option._dyn == opt._dyn) or \ if not is_multi and ((isinstance(opt, DynSymLinkOption) and option._dyn == opt._dyn) or \
option == opt: option == opt):
# option is current option # option is current option
# we have already value, so use it # we have already value, so use it
all_cons_vals.append(value) all_cons_vals.append(value)
all_cons_opts.append(opt)
else: else:
#if context, calculate value, otherwise get default value #if context, calculate value, otherwise get default value
path = None path = None
@ -423,8 +430,12 @@ class Option(OnlyOption):
path = opt.impl_getpath(context) path = opt.impl_getpath(context)
else: else:
path = descr.impl_get_path_by_opt(opt) path = descr.impl_get_path_by_opt(opt)
if is_multi:
_index = None
else:
_index = index
opt_value = context.getattr(path, validate=False, opt_value = context.getattr(path, validate=False,
index=index, index=_index,
force_permissive=True, force_permissive=True,
returns_raise=True) returns_raise=True)
if isinstance(opt_value, Exception): if isinstance(opt_value, Exception):
@ -445,7 +456,13 @@ class Option(OnlyOption):
if self.impl_is_multi() and index is None: if self.impl_is_multi() and index is None:
# only check propertyerror for master/slaves is transitive # only check propertyerror for master/slaves is transitive
val_consistencies = False val_consistencies = False
if is_multi and isinstance(opt_value, list):
all_cons_vals.extend(opt_value)
for len_ in xrange(len(opt_value)):
all_cons_opts.append(opt)
else:
all_cons_vals.append(opt_value) all_cons_vals.append(opt_value)
all_cons_opts.append(opt)
if val_consistencies: if val_consistencies:
return getattr(self, func)(current_opt, all_cons_opts, all_cons_vals, warnings_only) return getattr(self, func)(current_opt, all_cons_opts, all_cons_vals, warnings_only)
@ -750,12 +767,16 @@ class Option(OnlyOption):
for opt_ in [opts[idx_inf], opts[idx_inf + idx_sup + 1]]: for opt_ in [opts[idx_inf], opts[idx_inf + idx_sup + 1]]:
if opt_ == current_opt: if opt_ == current_opt:
is_current = True is_current = True
else:
equal.add('"{}"'.format(opt_.impl_get_display_name())) equal.add('"{}"'.format(opt_.impl_get_display_name()))
if equal: if equal:
if debug: if debug:
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() + '"')
if len(equal) == 0:
msg = _('this value is already present')
return ValueError(msg)
else:
if warnings_only: if warnings_only:
msg = _('should be different from the value of {}') msg = _('should be different from the value of {}')
else: else:

View file

@ -24,7 +24,7 @@ import re
from ..i18n import _ from ..i18n import _
from ..setting import groups, undefined, owners # , log from ..setting import groups, undefined, owners # , log
from .baseoption import BaseOption, SymLinkOption, Option from .baseoption import BaseOption, SymLinkOption, Option, allowed_const_list
from . import MasterSlaves from . import MasterSlaves
from ..error import ConfigError, ConflictError from ..error import ConfigError, ConflictError
from ..storage import get_storages_option from ..storage import get_storages_option
@ -131,22 +131,22 @@ class OptionDescription(BaseOption, StorageOptionDescription):
force_store_values.append((subpath, option)) force_store_values.append((subpath, option))
for func, all_cons_opts, params in option._get_consistencies(): for func, all_cons_opts, params in option._get_consistencies():
option._valid_consistencies(all_cons_opts[1:], init=False) option._valid_consistencies(all_cons_opts[1:], init=False)
if is_multi: if func not in allowed_const_list and is_multi:
is_slave = option.impl_is_master_slaves() is_slave = option.impl_is_master_slaves()
if not is_slave: if not is_slave:
raise ValueError(_('malformed consistency option {0} ' raise ValueError(_('malformed consistency option "{0}" '
'must be a master/slaves').format( 'must be a master/slaves').format(
option.impl_getname())) option.impl_getname()))
masterslaves = option.impl_get_master_slaves() masterslaves = option.impl_get_master_slaves()
for opt in all_cons_opts: for opt in all_cons_opts:
if is_multi: if func not in allowed_const_list and is_multi:
if not opt.impl_is_master_slaves(): if not opt.impl_is_master_slaves():
raise ValueError(_('malformed consistency option {0} ' raise ValueError(_('malformed consistency option "{0}" '
'must not be a multi for {1}').format( 'must not be a multi for "{1}"').format(
option.impl_getname(), opt.impl_getname())) option.impl_getname(), opt.impl_getname()))
elif masterslaves != opt.impl_get_master_slaves(): elif masterslaves != opt.impl_get_master_slaves():
raise ValueError(_('malformed consistency option {0} ' raise ValueError(_('malformed consistency option "{0}" '
'must be in same master/slaves for {1}').format( 'must be in same master/slaves for "{1}"').format(
option.impl_getname(), opt.impl_getname())) option.impl_getname(), opt.impl_getname()))
_consistencies.setdefault(opt, _consistencies.setdefault(opt,
[]).append((func, []).append((func,

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-14 21:31+0100\n" "POT-Creation-Date: 2016-11-16 22:29+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"
@ -128,71 +128,71 @@ msgstr ""
msgid " {} " msgid " {} "
msgstr " {} " msgstr " {} "
#: tiramisu/error.py:49 #: tiramisu/error.py:52
msgid "property" msgid "property"
msgstr "propriété" msgstr "propriété"
#: tiramisu/error.py:51 #: tiramisu/error.py:54
msgid "properties" msgid "properties"
msgstr "propriétés" msgstr "propriétés"
#: tiramisu/error.py:53 tiramisu/setting.py:517 #: tiramisu/error.py:56 tiramisu/setting.py:517
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:58 #: tiramisu/option/baseoption.py:63
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:61 #: tiramisu/option/baseoption.py:66
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:64 #: tiramisu/option/baseoption.py:69
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:68 #: tiramisu/option/baseoption.py:73
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:74 #: tiramisu/option/baseoption.py:79
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:78 #: tiramisu/option/baseoption.py:83
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:84 #: tiramisu/option/baseoption.py:89
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:88 #: tiramisu/option/baseoption.py:93
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:105 #: tiramisu/option/baseoption.py:110
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:107 #: tiramisu/option/baseoption.py:112
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:119 #: tiramisu/option/baseoption.py:124
msgid "invalid multi value" msgid "invalid multi value"
msgstr "valeur multiple invalide" msgstr "valeur multiple invalide"
#: tiramisu/option/baseoption.py:129 #: tiramisu/option/baseoption.py:134
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:168 #: tiramisu/option/baseoption.py:173
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,131 +200,137 @@ 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:173 #: tiramisu/option/baseoption.py:178
msgid "a callback is already set for option {0}, cannot set another one's" msgid "a callback is already set for option {0}, cannot set another one's"
msgstr "" msgstr ""
"un callback est en lecture seul pour l'option {0}, ne peut en placer une " "un callback est en lecture seul pour l'option {0}, ne peut en placer une "
"autre" "autre"
#: tiramisu/option/baseoption.py:257 #: tiramisu/option/baseoption.py:262
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:338 tiramisu/storage/dictionary/option.py:119 #: tiramisu/option/baseoption.py:343 tiramisu/storage/dictionary/option.py:119
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:359 #: tiramisu/option/baseoption.py:364
msgid "invalid string" msgid "invalid string"
msgstr "invalide caractère" msgstr "invalide caractère"
#: tiramisu/option/baseoption.py:362 #: tiramisu/option/baseoption.py:367
msgid "invalid unicode or string" msgid "invalid unicode or string"
msgstr "invalide unicode ou string" msgstr "invalide unicode ou string"
#: tiramisu/option/baseoption.py:515 tiramisu/option/baseoption.py:560 #: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577
msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}" msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr "\"{0}\" est une {1} invalide pour \"{2}\", {3}" msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}"
#: tiramisu/option/baseoption.py:519 tiramisu/option/baseoption.py:564 #: tiramisu/option/baseoption.py:536 tiramisu/option/baseoption.py:581
msgid "\"{0}\" is an invalid {1} for \"{2}\"" msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr "\"{0}\" est une {1} invalide pour \"{2}\"" msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\""
#: tiramisu/option/baseoption.py:531 #: tiramisu/option/baseoption.py:548
msgid "do_validation for {0}: error in value" msgid "do_validation for {0}: error in value"
msgstr "do_validation for {0} : erreur dans un la valeur" msgstr "do_validation for {0} : erreur dans un la valeur"
#: tiramisu/option/baseoption.py:550 #: 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 "attention, \"{0}\" peut être une {1} invalide pour \"{2}\", {3}" msgstr ""
"attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", "
"{3}"
#: tiramisu/option/baseoption.py:580 tiramisu/option/baseoption.py:590 #: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607
msgid "invalid value {0} for option {1} which must be a list" 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" msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste"
#: tiramisu/option/baseoption.py:596 #: tiramisu/option/baseoption.py:613
msgid "invalid value {0} for option {1} which must be a list of list" msgid "invalid value {0} for option {1} which must be a list of list"
msgstr "" msgstr ""
"valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste" "valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste"
#: tiramisu/option/baseoption.py:647 tiramisu/option/baseoption.py:651 #: tiramisu/option/baseoption.py:664 tiramisu/option/baseoption.py:668
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:653 #: tiramisu/option/baseoption.py:670
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:656 tiramisu/option/baseoption.py:663 #: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680
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:659 #: tiramisu/option/baseoption.py:676
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:666 #: tiramisu/option/baseoption.py:683
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:668 #: tiramisu/option/baseoption.py:685
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:685 #: tiramisu/option/baseoption.py:702
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:692 #: tiramisu/option/baseoption.py:709
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:696 #: tiramisu/option/baseoption.py:713
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:757 #: tiramisu/option/baseoption.py:773
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:760 #: tiramisu/option/baseoption.py:777
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:762 #: tiramisu/option/baseoption.py:783
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:766 #: tiramisu/option/baseoption.py:787
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:768 #: tiramisu/option/baseoption.py:789
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:824 #: tiramisu/option/baseoption.py:845
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:844 #: tiramisu/option/baseoption.py:865
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:850 #: tiramisu/option/baseoption.py:871
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:858 #: tiramisu/option/baseoption.py:879
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"
@ -332,33 +338,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:865 #: tiramisu/option/baseoption.py:886
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:870 #: tiramisu/option/baseoption.py:891
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:874 #: tiramisu/option/baseoption.py:895
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:878 #: tiramisu/option/baseoption.py:899
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:882 #: tiramisu/option/baseoption.py:903
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:885 #: tiramisu/option/baseoption.py:906
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}"
@ -366,18 +372,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:891 #: tiramisu/option/baseoption.py:912
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:896 #: tiramisu/option/baseoption.py:917
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:924 #: tiramisu/option/baseoption.py:945
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}"
@ -624,21 +630,24 @@ msgid "option description seems to be part of an other config"
msgstr "l'option description semble faire parti d'une autre config" msgstr "l'option description semble faire parti d'une autre config"
#: tiramisu/option/optiondescription.py:137 #: tiramisu/option/optiondescription.py:137
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/esclave" "test de consistence mal formé pour l'option \"{0}\" doit être une maître/"
"esclave"
#: tiramisu/option/optiondescription.py:144 #: tiramisu/option/optiondescription.py:144
msgid "malformed consistency option {0} must not be a multi for {1}" msgid "malformed consistency option \"{0}\" must not be a multi for \"{1}\""
msgstr "" msgstr ""
"test de consistence mal formé pour l'option {0} ne doit doit pas être une " "test de consistence mal formé pour l'option \"{0}\" ne doit doit pas être "
"liste pour {1}" "une liste pour \"{1}\""
#: tiramisu/option/optiondescription.py:148 #: tiramisu/option/optiondescription.py:148
msgid "malformed consistency option {0} must be in same master/slaves for {1}" msgid ""
"malformed consistency option \"{0}\" must be in same master/slaves for "
"\"{1}\""
msgstr "" msgstr ""
"test de consistence mal formé pour l'option {0} doit être dans la même " "test de consistence mal formé pour l'option \"{0}\" doit être dans la même "
"maître/esclave pour {1}" "maître/esclave pour \"{1}\""
#: tiramisu/option/optiondescription.py:173 #: tiramisu/option/optiondescription.py:173
msgid "malformed requirements option {0} must be in same master/slaves for {1}" msgid "malformed requirements option {0} must be in same master/slaves for {1}"
@ -897,6 +906,22 @@ msgstr "ne peut étendre une option multi {0} pour une maître ou une esclave"
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 "malformed consistency option {0} must be a master/slaves"
#~ msgstr ""
#~ "test de consistence mal formé pour l'option {0} doit être une maître/"
#~ "esclave"
#~ msgid "malformed consistency option {0} must not be a multi for {1}"
#~ msgstr ""
#~ "test de consistence mal formé pour l'option {0} ne doit doit pas être une "
#~ "liste pour {1}"
#~ msgid ""
#~ "malformed consistency option {0} must be in same master/slaves for {1}"
#~ msgstr ""
#~ "test de consistence mal formé pour l'option {0} doit être dans la même "
#~ "maître/esclave pour {1}"
#~ msgid "invalid value for option {0}: {1}" #~ msgid "invalid value for option {0}: {1}"
#~ msgstr "valeur invalide pour l'option {0} : {1}" #~ msgstr "valeur invalide pour l'option {0} : {1}"

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-14 21:31+CET\n" "POT-Creation-Date: 2016-11-16 22:25+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"
@ -116,219 +116,223 @@ msgstr ""
msgid " {} " msgid " {} "
msgstr "" msgstr ""
#: tiramisu/error.py:49 #: tiramisu/error.py:52
msgid "property" msgid "property"
msgstr "" msgstr ""
#: tiramisu/error.py:51 #: tiramisu/error.py:54
msgid "properties" msgid "properties"
msgstr "" msgstr ""
#: tiramisu/error.py:53 tiramisu/setting.py:517 #: tiramisu/error.py:56 tiramisu/setting.py:517
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:58 #: tiramisu/option/baseoption.py:63
msgid "{0} must be a function" msgid "{0} must be a function"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:61 #: tiramisu/option/baseoption.py:66
msgid "{0}_params must be a dict" msgid "{0}_params must be a dict"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:64 #: tiramisu/option/baseoption.py:69
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:68 #: tiramisu/option/baseoption.py:73
msgid "{0}_params must be tuple for key \"{1}\"" msgid "{0}_params must be tuple for key \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:74 #: tiramisu/option/baseoption.py:79
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:78 #: tiramisu/option/baseoption.py:83
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:84 #: tiramisu/option/baseoption.py:89
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:88 #: tiramisu/option/baseoption.py:93
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:105 #: tiramisu/option/baseoption.py:110
msgid "invalid name: {0} for option" msgid "invalid name: {0} for option"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:107 #: tiramisu/option/baseoption.py:112
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:119 #: tiramisu/option/baseoption.py:124
msgid "invalid multi value" msgid "invalid multi value"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:129 #: tiramisu/option/baseoption.py:134
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:168 #: tiramisu/option/baseoption.py:173
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:173 #: tiramisu/option/baseoption.py:178
msgid "a callback is already set for option {0}, cannot set another one's" msgid "a callback is already set for option {0}, cannot set another one's"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:257 #: tiramisu/option/baseoption.py:262
msgid "cannot serialize Option, only in OptionDescription" msgid "cannot serialize Option, only in OptionDescription"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:338 tiramisu/storage/dictionary/option.py:119 #: tiramisu/option/baseoption.py:343 tiramisu/storage/dictionary/option.py:119
msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:359 #: tiramisu/option/baseoption.py:364
msgid "invalid string" msgid "invalid string"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:362 #: tiramisu/option/baseoption.py:367
msgid "invalid unicode or string" msgid "invalid unicode or string"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:515 tiramisu/option/baseoption.py:560 #: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577
msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}" msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:519 tiramisu/option/baseoption.py:564 #: tiramisu/option/baseoption.py:536 tiramisu/option/baseoption.py:581
msgid "\"{0}\" is an invalid {1} for \"{2}\"" msgid "\"{0}\" is an invalid {1} for \"{2}\""
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:531 #: tiramisu/option/baseoption.py:548
msgid "do_validation for {0}: error in value" msgid "do_validation for {0}: error in value"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:550 #: 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:580 tiramisu/option/baseoption.py:590 #: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607
msgid "invalid value {0} for option {1} which must be a list" msgid "invalid value {0} for option {1} which must be a list"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:596 #: tiramisu/option/baseoption.py:613
msgid "invalid value {0} for option {1} which must be a list of list" msgid "invalid value {0} for option {1} which must be a list of list"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:647 tiramisu/option/baseoption.py:651 #: tiramisu/option/baseoption.py:664 tiramisu/option/baseoption.py:668
msgid "cannot add consistency with submulti option" msgid "cannot add consistency with submulti option"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:653 #: tiramisu/option/baseoption.py:670
msgid "consistency must be set with an option" msgid "consistency must be set with an option"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:656 tiramisu/option/baseoption.py:663 #: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680
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:659 #: tiramisu/option/baseoption.py:676
msgid "option in consistency must be in same dynoptiondescription" msgid "option in consistency must be in same dynoptiondescription"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:666 #: tiramisu/option/baseoption.py:683
msgid "cannot add consistency with itself" msgid "cannot add consistency with itself"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:668 #: tiramisu/option/baseoption.py:685
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:685 #: tiramisu/option/baseoption.py:702
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:692 #: tiramisu/option/baseoption.py:709
msgid "consistency {0} not available for this option" msgid "consistency {0} not available for this option"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:696 #: tiramisu/option/baseoption.py:713
msgid "unknow parameter {0} in consistency" msgid "unknow parameter {0} in consistency"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:757 #: tiramisu/option/baseoption.py:773
msgid "_cons_not_equal: {} are not different" msgid "_cons_not_equal: {} are not different"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:760 #: tiramisu/option/baseoption.py:777
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:762 #: tiramisu/option/baseoption.py:783
msgid "must be different from the value of {}" msgid "must be different from the value of {}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:766 #: tiramisu/option/baseoption.py:787
msgid "value for {} should be different" msgid "value for {} should be different"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:768 #: tiramisu/option/baseoption.py:789
msgid "value for {} must be different" msgid "value for {} must be different"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:824 #: tiramisu/option/baseoption.py:845
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:844 #: tiramisu/option/baseoption.py:865
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:850 #: tiramisu/option/baseoption.py:871
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:858 #: tiramisu/option/baseoption.py:879
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:865 #: tiramisu/option/baseoption.py:886
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:870 #: tiramisu/option/baseoption.py:891
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:874 #: tiramisu/option/baseoption.py:895
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:878 #: tiramisu/option/baseoption.py:899
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:882 #: tiramisu/option/baseoption.py:903
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:885 #: tiramisu/option/baseoption.py:906
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:891 #: tiramisu/option/baseoption.py:912
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:896 #: tiramisu/option/baseoption.py:917
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:924 #: tiramisu/option/baseoption.py:945
msgid "malformed symlinkoption must be an option for symlink {0}" msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "" msgstr ""
@ -573,15 +577,15 @@ msgid "option description seems to be part of an other config"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:137 #: tiramisu/option/optiondescription.py:137
msgid "malformed consistency option {0} must be a master/slaves" msgid "malformed consistency option \"{0}\" must be a master/slaves"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:144 #: tiramisu/option/optiondescription.py:144
msgid "malformed consistency option {0} must not be a multi for {1}" msgid "malformed consistency option \"{0}\" must not be a multi for \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:148 #: tiramisu/option/optiondescription.py:148
msgid "malformed consistency option {0} must be in same master/slaves for {1}" msgid "malformed consistency option \"{0}\" must be in same master/slaves for \"{1}\""
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:173 #: tiramisu/option/optiondescription.py:173