diff --git a/test/test_multi.py b/test/test_multi.py index 2cb541e..bdda282 100644 --- a/test/test_multi.py +++ b/test/test_multi.py @@ -39,6 +39,11 @@ def test_multi_unique(): c.int.extend([4, 5, 6]) +def test_non_valid_multi(): + raises(ValueError, "IntOption('int', '', multi='string')") + raises(ValueError, "IntOption('int', '', multi=True, unique='string')") + + def test_non_multi_unique(): raises(ValueError, "IntOption('int', '', unique=True)") diff --git a/test/test_option_consistency.py b/test/test_option_consistency.py index dca3e9a..a10db36 100644 --- a/test/test_option_consistency.py +++ b/test/test_option_consistency.py @@ -6,11 +6,15 @@ from py.test import raises from tiramisu.setting import owners, groups from tiramisu.config import Config from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\ - BroadcastOption, SymLinkOption, OptionDescription, submulti + BroadcastOption, StrOption, SymLinkOption, OptionDescription, submulti from tiramisu.error import ConfigError, ValueWarning, PropertiesOptionError import warnings +def return_value(value=None): + return value + + def test_consistency(): a = IntOption('a', '') b = IntOption('b', '') @@ -67,9 +71,15 @@ def test_consistency_warnings_only_more_option(): with warnings.catch_warnings(record=True) as w: c.b = 1 assert w != [] + assert len(w) == 1 + with warnings.catch_warnings(record=True) as w: + c.d + assert w != [] + assert len(w) == 1 with warnings.catch_warnings(record=True) as w: c.d = 1 assert w != [] + assert len(w) == 1 def test_consistency_not_equal(): diff --git a/tiramisu/config.py b/tiramisu/config.py index 711e335..d91c905 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -83,8 +83,6 @@ class SubConfig(object): self = self.getattr(step, force_permissive=force_permissive, returns_raise=returns_raise) - if isinstance(self, Exception): - return self, None return self, path[-1] #def __hash__(self): @@ -272,14 +270,11 @@ class SubConfig(object): homeconfig, name = self.cfgimpl_get_home_by_path( name, force_permissive=force_permissive, returns_raise=returns_raise) - if isinstance(homeconfig, Exception): - cfg = homeconfig - else: - cfg = homeconfig.getattr(name, force_permissive=force_permissive, - validate=validate, - _setting_properties=_setting_properties, - _self_properties=_self_properties, - index=index, returns_raise=returns_raise) + cfg = homeconfig.getattr(name, force_permissive=force_permissive, + validate=validate, + _setting_properties=_setting_properties, + _self_properties=_self_properties, + index=index, returns_raise=returns_raise) else: context = self._cfgimpl_get_context() option = self.cfgimpl_get_description().__getattr__(name, diff --git a/tiramisu/option/baseoption.py b/tiramisu/option/baseoption.py index 25239d5..75eda1f 100644 --- a/tiramisu/option/baseoption.py +++ b/tiramisu/option/baseoption.py @@ -473,7 +473,7 @@ class Option(OnlyOption): if warnings_only: if isinstance(err, ValueError): msg = _('attention, "{0}" could be an invalid {1} for "{2}", {3}').format( - value, self._display_name, self.impl_get_display_name(), err) + value, self._display_name, current_opt.impl_get_display_name(), err) else: msg = '{}'.format(err) warnings.warn_explicit(ValueWarning(msg, self), @@ -614,8 +614,8 @@ class Option(OnlyOption): for idx, val in enumerate(value): if isinstance(val, list): return ValueError(_('invalid value "{}" for "{}" ' - 'which must not be a list'.format(val, - self.impl_get_display_name()))) + 'which must not be a list').format(val, + self.impl_get_display_name())) err = do_validation(val, force_index, idx) if err: return err @@ -803,15 +803,11 @@ class Option(OnlyOption): log.debug(_('_cons_not_equal: {} are not different').format(display_list(list(equal)))) if is_current: equal.remove('"' + current_opt.impl_get_display_name() + '"') - if len(equal) == 0: - msg = _('this value is already present') - return ValueError(msg) + if warnings_only: + msg = _('should be different from the value of {}') else: - if warnings_only: - msg = _('should be different from the value of {}') - else: - msg = _('must be different from the value of {}') - return ValueError(msg.format(display_list(list(equal)))) + msg = _('must be different from the value of {}') + return ValueError(msg.format(display_list(list(equal)))) else: if warnings_only: msg = _('value for {} should be different') @@ -1005,16 +1001,6 @@ class SymLinkOption(OnlyOption): def impl_is_readonly(self): return True - def impl_getproperties(self): - return self._impl_getopt()._properties - - def impl_get_callback(self): - return self._impl_getopt().impl_get_callback() - - def impl_has_callback(self): - "to know if a callback has been defined or not" - return self._impl_getopt().impl_has_callback() - def impl_is_multi(self): return self._impl_getopt().impl_is_multi() @@ -1034,10 +1020,7 @@ class DynSymLinkOption(object): self._opt = opt def __getattr__(self, name, context=undefined): - if name in ('_opt', '_readonly', 'impl_getpath', '_name', '_state_opt'): - return object.__getattr__(self, name) - else: - return getattr(self._impl_getopt(), name) + return getattr(self._impl_getopt(), name) def impl_getname(self): return self._name diff --git a/tiramisu/option/option.py b/tiramisu/option/option.py index 64e203d..4491b95 100644 --- a/tiramisu/option/option.py +++ b/tiramisu/option/option.py @@ -396,7 +396,7 @@ class NetmaskOption(Option): def __cons_netmask(self, opts, val_netmask, val_ipnetwork, make_net, warnings_only): if len(opts) != 2: - raise ConfigError(_('invalid len for opts')) # pragma: optional cover + return ConfigError(_('invalid len for opts')) # pragma: optional cover msg = None try: ip = IP('{0}/{1}'.format(val_ipnetwork, val_netmask), diff --git a/translations/fr/tiramisu.po b/translations/fr/tiramisu.po index 4554712..786031a 100644 --- a/translations/fr/tiramisu.po +++ b/translations/fr/tiramisu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Tiramisu\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-16 22:29+0100\n" +"POT-Creation-Date: 2016-11-20 17:58+0100\n" "PO-Revision-Date: \n" "Last-Translator: Emmanuel Garette \n" "Language-Team: Tiramisu's team \n" @@ -30,88 +30,88 @@ msgstr "" msgid "descr must be an optiondescription, not {0}" msgstr "descr doit être une optiondescription pas un {0}" -#: tiramisu/config.py:148 +#: tiramisu/config.py:146 msgid "unknown group_type: {0}" msgstr "group_type inconnu: {0}" -#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54 -#: tiramisu/value.py:738 +#: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54 +#: tiramisu/value.py:749 msgid "the context does not exist anymore" msgstr "le context n'existe plus" -#: tiramisu/config.py:192 +#: tiramisu/config.py:190 msgid "no option description found for this config (may be GroupConfig)" msgstr "" "pas d'option description trouvé pour cette config (peut être un GroupConfig)" -#: tiramisu/config.py:228 +#: tiramisu/config.py:226 msgid "can't assign to an OptionDescription" msgstr "ne peut pas attribuer une valeur à une OptionDescription" -#: tiramisu/config.py:389 +#: tiramisu/config.py:384 msgid "unknown type_ type {0}for _find" msgstr "type_ type {0} pour _find inconnu" -#: tiramisu/config.py:432 +#: tiramisu/config.py:427 msgid "no option found in config with these criteria" msgstr "aucune option trouvée dans la config avec ces critères" -#: tiramisu/config.py:480 +#: tiramisu/config.py:475 msgid "make_dict can't filtering with value without option" msgstr "make_dict ne peut filtrer sur une valeur mais sans option" -#: tiramisu/config.py:503 +#: tiramisu/config.py:498 msgid "unexpected path {0}, should start with {1}" msgstr "chemin imprévu {0}, devrait commencer par {1}" -#: tiramisu/config.py:578 +#: tiramisu/config.py:573 msgid "opt in getowner must be an option not {0}" msgstr "opt dans getowner doit être une option pas {0}" -#: tiramisu/config.py:626 +#: tiramisu/config.py:621 msgid "cannot serialize Config with MetaConfig" msgstr "impossible de sérialiser une Config avec une MetaConfig" -#: tiramisu/config.py:640 +#: tiramisu/config.py:635 msgid "this storage is not serialisable, could be a none persistent storage" msgstr "ce storage n'est sérialisable, devrait être une storage non persistant" -#: tiramisu/config.py:705 +#: tiramisu/config.py:700 msgid "invalid name: {0} for config" msgstr "nom invalide : {0} pour la config" -#: tiramisu/config.py:737 +#: tiramisu/config.py:732 msgid "groupconfig's children must be a list" msgstr "enfants d'une groupconfig doit être une liste" -#: tiramisu/config.py:741 +#: tiramisu/config.py:736 msgid "groupconfig's children must be Config, MetaConfig or GroupConfig" msgstr "" "les enfants d'un groupconfig doivent être des Config, MetaConfig ou " "GroupConfig" -#: tiramisu/config.py:744 +#: tiramisu/config.py:739 msgid "name must be set to config before creating groupconfig" msgstr "un nom doit être donné à la config avant de créer un groupconfig" -#: tiramisu/config.py:750 +#: tiramisu/config.py:745 msgid "config name must be uniq in groupconfig for {0}" msgstr "le nom de la config doit être unique dans un groupconfig pour {0}" -#: tiramisu/config.py:859 +#: tiramisu/config.py:854 msgid "metaconfig's children should be config, not {0}" msgstr "enfants d'une metaconfig doit être une config, pas {0}" -#: tiramisu/config.py:863 +#: tiramisu/config.py:858 msgid "child has already a metaconfig's" msgstr "enfant a déjà une metaconfig" -#: tiramisu/config.py:867 +#: tiramisu/config.py:862 msgid "all config in metaconfig must have the same optiondescription" msgstr "" "toutes les configs d'une metaconfig doivent avoir la même optiondescription" -#: tiramisu/config.py:882 +#: tiramisu/config.py:877 msgid "" "force_default, force_default_if_same or force_dont_change_value cannot be " "set with only_config" @@ -119,7 +119,7 @@ msgstr "" "force_default, force_default_if_same ou force_dont_change_value ne peuvent " "pas être spécifié avec only_config" -#: tiramisu/config.py:888 +#: tiramisu/config.py:883 msgid "force_default and force_dont_change_value cannot be set together" msgstr "" "force_default et force_dont_change_value ne peuvent pas être mis ensemble" @@ -140,59 +140,67 @@ msgstr "propriétés" msgid "cannot access to {0} \"{1}\" because has {2} {3}" msgstr "ne peut accéder à l'{0} \"{1}\" a cause de {2} {3}" -#: tiramisu/option/baseoption.py:63 +#: tiramisu/option/baseoption.py:62 msgid "{0} must be a function" msgstr "{0} doit être une fonction" -#: tiramisu/option/baseoption.py:66 +#: tiramisu/option/baseoption.py:65 msgid "{0}_params must be a dict" msgstr "{0}_params doit être un dict" -#: tiramisu/option/baseoption.py:69 +#: tiramisu/option/baseoption.py:68 msgid "{0}_params with key {1} mustn't have length different to 1" msgstr "" "{0}_params avec la clef {1} ne doit pas avoir une longueur différent de 1" -#: tiramisu/option/baseoption.py:73 +#: tiramisu/option/baseoption.py:72 msgid "{0}_params must be tuple for key \"{1}\"" msgstr "{0}_params doit être un tuple pour la clef \"{1}\"" -#: tiramisu/option/baseoption.py:79 +#: tiramisu/option/baseoption.py:78 msgid "{0}_params with length of tuple as 1 must only have None as first value" msgstr "" "{0}_params avec un tuple de longueur 1 doit seulement avoir None comme " "première valeur" -#: tiramisu/option/baseoption.py:83 +#: tiramisu/option/baseoption.py:82 msgid "{0}_params must only have 1 or 2 as length" msgstr "{0}_params doit seulement avoir une longueur de 1 ou 2" -#: tiramisu/option/baseoption.py:89 +#: tiramisu/option/baseoption.py:88 msgid "{0}_params must have an option not a {0} for first argument" msgstr "{0}_params doit avoir une option pas un {0} pour premier argument" -#: tiramisu/option/baseoption.py:93 +#: tiramisu/option/baseoption.py:92 msgid "{0}_params must have a boolean not a {0} for second argument" msgstr "{0}_params doit avoir un booléen pas un {0} pour second argument" -#: tiramisu/option/baseoption.py:110 +#: tiramisu/option/baseoption.py:109 msgid "invalid name: {0} for option" msgstr "nom invalide : {0} pour l'option" -#: tiramisu/option/baseoption.py:112 +#: tiramisu/option/baseoption.py:111 msgid "default_multi is set whereas multi is False in option: {0}" msgstr "" "default_multi est spécifié alors que multi est à False pour l'option : {0}" -#: tiramisu/option/baseoption.py:124 +#: tiramisu/option/baseoption.py:123 msgid "invalid multi value" msgstr "valeur multiple invalide" -#: tiramisu/option/baseoption.py:134 +#: tiramisu/option/baseoption.py:125 +msgid "unique must be a boolean" +msgstr "unique doit être un booléan" + +#: tiramisu/option/baseoption.py:127 +msgid "unique must be set only with multi value" +msgstr "unique doit être activé uniquement avec une valeur multiple" + +#: tiramisu/option/baseoption.py:137 msgid "invalid properties type {0} for {1}, must be a tuple" msgstr "type des properties invalide {0} pour {1}, doit être un tuple" -#: tiramisu/option/baseoption.py:173 +#: tiramisu/option/baseoption.py:176 msgid "" "params defined for a callback function but no callback defined yet for " "option {0}" @@ -200,137 +208,138 @@ msgstr "" "params définis pour une fonction callback mais par de callback encore " "définis pour l'option {0}" -#: tiramisu/option/baseoption.py:178 -msgid "a callback is already set for option {0}, cannot set another one's" -msgstr "" -"un callback est en lecture seul pour l'option {0}, ne peut en placer une " -"autre" +#: tiramisu/option/baseoption.py:181 +msgid "a callback is already set for {0}, cannot set another one's" +msgstr "un calback a déjà été définit pour {0}, ne peut en définir un autre" -#: tiramisu/option/baseoption.py:262 +#: tiramisu/option/baseoption.py:265 msgid "cannot serialize Option, only in OptionDescription" msgstr "ne peut serialiser une Option, seulement via une OptionDescription" -#: tiramisu/option/baseoption.py:343 tiramisu/storage/dictionary/option.py:119 +#: tiramisu/option/baseoption.py:346 tiramisu/storage/dictionary/option.py:123 msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule" -#: tiramisu/option/baseoption.py:364 +#: tiramisu/option/baseoption.py:367 msgid "invalid string" msgstr "invalide caractère" -#: tiramisu/option/baseoption.py:367 +#: tiramisu/option/baseoption.py:370 msgid "invalid unicode or string" msgstr "invalide unicode ou string" -#: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577 -msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}" -msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}" - -#: tiramisu/option/baseoption.py:536 tiramisu/option/baseoption.py:581 -msgid "\"{0}\" is an invalid {1} for \"{2}\"" -msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\"" - -#: tiramisu/option/baseoption.py:548 -msgid "do_validation for {0}: error in value" -msgstr "do_validation for {0} : erreur dans un la valeur" - -#: tiramisu/option/baseoption.py:567 +#: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572 msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}" msgstr "" "attention, \"{0}\" peut être une option de type {1} invalide pour \"{2}\", " "{3}" -#: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607 -msgid "invalid value {0} for option {1} which must be a list" -msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste" +#: tiramisu/option/baseoption.py:513 tiramisu/option/baseoption.py:624 +msgid "invalid value \"{}\", this value is already in \"{}\"" +msgstr "valeur invalide \"{}\", cette valeur est déjà dans \"{}\"" -#: tiramisu/option/baseoption.py:613 -msgid "invalid value {0} for option {1} which must be a list of list" -msgstr "" -"valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste" +#: tiramisu/option/baseoption.py:554 tiramisu/option/baseoption.py:591 +msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}" +msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\", {3}" -#: tiramisu/option/baseoption.py:664 tiramisu/option/baseoption.py:668 +#: tiramisu/option/baseoption.py:558 tiramisu/option/baseoption.py:595 +msgid "\"{0}\" is an invalid {1} for \"{2}\"" +msgstr "\"{0}\" est une option de type {1} invalide pour \"{2}\"" + +#: tiramisu/option/baseoption.py:569 +msgid "do_validation for {0}: error in value" +msgstr "do_validation for {0} : erreur dans un la valeur" + +#: tiramisu/option/baseoption.py:611 tiramisu/option/baseoption.py:629 +msgid "invalid value \"{0}\" for \"{1}\" which must be a list" +msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste" + +#: tiramisu/option/baseoption.py:616 +msgid "invalid value \"{}\" for \"{}\" which must not be a list" +msgstr "valeur invalide \"{0}\" pour \"{1}\" qui ne doit pas être une liste" + +#: tiramisu/option/baseoption.py:638 +msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list" +msgstr "valeur invalide \"{0}\" pour \"{1}\" qui doit être une liste de liste" + +#: tiramisu/option/baseoption.py:691 tiramisu/option/baseoption.py:695 msgid "cannot add consistency with submulti option" msgstr "ne peut ajouter de test de consistence a une option submulti" -#: tiramisu/option/baseoption.py:670 +#: tiramisu/option/baseoption.py:697 msgid "consistency must be set with an option" msgstr "consistency doit être configuré avec une option" -#: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680 +#: tiramisu/option/baseoption.py:700 tiramisu/option/baseoption.py:707 msgid "" "almost one option in consistency is in a dynoptiondescription but not all" msgstr "" "au moins une option dans le test de consistance est dans une " "dynoptiondescription mais pas toutes" -#: tiramisu/option/baseoption.py:676 +#: tiramisu/option/baseoption.py:703 msgid "option in consistency must be in same dynoptiondescription" msgstr "" "option dans une consistency doit être dans le même dynoptiondescription" -#: tiramisu/option/baseoption.py:683 +#: tiramisu/option/baseoption.py:710 msgid "cannot add consistency with itself" msgstr "ne peut ajouter une consistency avec lui même" -#: tiramisu/option/baseoption.py:685 +#: tiramisu/option/baseoption.py:712 msgid "every options in consistency must be multi or none" msgstr "" "toutes les options d'une consistency doivent être multi ou ne pas l'être" -#: tiramisu/option/baseoption.py:702 +#: tiramisu/option/baseoption.py:729 msgid "'{0}' ({1}) cannot add consistency, option is read-only" msgstr "" "'{0}' ({1}) ne peut ajouter de consistency, l'option est en lecture seul" -#: tiramisu/option/baseoption.py:709 +#: tiramisu/option/baseoption.py:736 msgid "consistency {0} not available for this option" msgstr "consistency {0} non valable pour cette option" -#: tiramisu/option/baseoption.py:713 +#: tiramisu/option/baseoption.py:740 msgid "unknow parameter {0} in consistency" msgstr "paramètre inconnu {0} dans un test de consistance" -#: tiramisu/option/baseoption.py:773 +#: tiramisu/option/baseoption.py:803 msgid "_cons_not_equal: {} are not different" msgstr "_cons_not_equal: {} sont différents" -#: tiramisu/option/baseoption.py:777 -msgid "this value is already present" -msgstr "cette valeur est déjà présente" - -#: tiramisu/option/baseoption.py:781 +#: tiramisu/option/baseoption.py:807 msgid "should be different from the value of {}" msgstr "devrait être différent de la valeur de {}" -#: tiramisu/option/baseoption.py:783 +#: tiramisu/option/baseoption.py:809 msgid "must be different from the value of {}" msgstr "doit être différent de la valeur de {}" -#: tiramisu/option/baseoption.py:787 +#: tiramisu/option/baseoption.py:813 msgid "value for {} should be different" msgstr "valeur pour {} devrait être différent" -#: tiramisu/option/baseoption.py:789 +#: tiramisu/option/baseoption.py:815 msgid "value for {} must be different" msgstr "valeur pour {} doit être différent" -#: tiramisu/option/baseoption.py:845 +#: tiramisu/option/baseoption.py:871 msgid "default value not allowed if option: {0} is calculated" msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée" -#: tiramisu/option/baseoption.py:865 +#: tiramisu/option/baseoption.py:891 msgid "malformed requirements type for option: {0}, must be a dict" msgstr "" "type requirements malformé pour l'option : {0}, doit être un dictionnaire" -#: tiramisu/option/baseoption.py:871 +#: tiramisu/option/baseoption.py:897 msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}" msgstr "" "requirements mal formés pour l'option : {0} clefs inconnues {1}, doit " "seulement avoir {2}" -#: tiramisu/option/baseoption.py:879 +#: tiramisu/option/baseoption.py:905 msgid "" "malformed requirements for option: {0} require must have option, expected " "and action keys" @@ -338,33 +347,33 @@ msgstr "" "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs " "option, expected et action" -#: tiramisu/option/baseoption.py:886 +#: tiramisu/option/baseoption.py:912 msgid "" "malformed requirements for option: {0} action cannot be force_store_value" msgstr "" "requirements mal formés pour l'option : {0} action ne peut pas être " "force_store_value" -#: tiramisu/option/baseoption.py:891 +#: tiramisu/option/baseoption.py:917 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "" "requirements mal formés pour l'option : {0} inverse doit être un booléen" -#: tiramisu/option/baseoption.py:895 +#: tiramisu/option/baseoption.py:921 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "" "requirements mal formés pour l'option : {0} transitive doit être booléen" -#: tiramisu/option/baseoption.py:899 +#: tiramisu/option/baseoption.py:925 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" "requirements mal formés pour l'option : {0} same_action doit être un booléen" -#: tiramisu/option/baseoption.py:903 +#: tiramisu/option/baseoption.py:929 msgid "malformed requirements must be an option in option {0}" msgstr "requirements mal formés doit être une option dans l'option {0}" -#: tiramisu/option/baseoption.py:906 +#: tiramisu/option/baseoption.py:932 msgid "" "malformed requirements multi option must not set as requires of non multi " "option {0}" @@ -372,18 +381,18 @@ msgstr "" "requirements mal formés une option multiple ne doit pas être spécifié comme " "pré-requis à l'option non multiple {0}" -#: tiramisu/option/baseoption.py:912 +#: tiramisu/option/baseoption.py:938 msgid "" "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" "requirements mal formés deuxième argument doit être valide pour l'option " "{0} : {1}" -#: tiramisu/option/baseoption.py:917 +#: tiramisu/option/baseoption.py:943 msgid "inconsistency in action types for option: {0} action: {1}" msgstr "incohérence dans les types action pour l'option : {0} action {1}" -#: tiramisu/option/baseoption.py:945 +#: tiramisu/option/baseoption.py:971 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "symlinkoption mal formé, doit être une option pour symlink {0}" @@ -699,8 +708,8 @@ msgid "group_type: {0} not allowed" msgstr "group_type : {0} non autorisé" #: tiramisu/option/optiondescription.py:313 -msgid "DynOptionDescription callback return not uniq value" -msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique" +msgid "DynOptionDescription callback return not unique value" +msgstr "le callback de DynOptionDescription retourne une valeur non unique" #: tiramisu/option/optiondescription.py:316 msgid "invalid suffix: {0} for option" @@ -759,7 +768,7 @@ msgstr "" msgid "permissive must be a tuple" msgstr "permissive doit être un tuple" -#: tiramisu/setting.py:545 tiramisu/value.py:528 +#: tiramisu/setting.py:545 tiramisu/value.py:539 msgid "invalid generic owner {0}" msgstr "invalide owner générique {0}" @@ -795,46 +804,46 @@ msgstr "ne peut pas importer le stockage {0}" msgid "option {0} not already exists in storage {1}" msgstr "option {0} n'existe pas dans l'espace de stockage {1}" -#: tiramisu/storage/dictionary/option.py:104 +#: tiramisu/storage/dictionary/option.py:108 msgid "invalid default_multi value {0} for option {1}: {2}" msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}" -#: tiramisu/storage/dictionary/option.py:144 +#: tiramisu/storage/dictionary/option.py:148 #: tiramisu/storage/dictionary/value.py:234 #: tiramisu/storage/sqlalchemy/option.py:666 msgid "information's item not found: {0}" msgstr "aucune config spécifiée alors que c'est nécessaire" -#: tiramisu/storage/dictionary/option.py:406 +#: tiramisu/storage/dictionary/option.py:413 msgid "use impl_get_opt_by_path only with root OptionDescription" msgstr "utiliser impl_get_opt_by_path seulement sur l'OptionDescription racine" -#: tiramisu/storage/dictionary/option.py:408 +#: tiramisu/storage/dictionary/option.py:415 #: tiramisu/storage/sqlalchemy/option.py:730 msgid "no option for path {0}" msgstr "pas d'option pour le chemin {0}" -#: tiramisu/storage/dictionary/option.py:413 +#: tiramisu/storage/dictionary/option.py:420 #: tiramisu/storage/sqlalchemy/option.py:740 msgid "use impl_get_path_by_opt only with root OptionDescription" msgstr "" "utiliser impl_get_path_by_opt seulement avec une OptionDescription racine" -#: tiramisu/storage/dictionary/option.py:415 +#: tiramisu/storage/dictionary/option.py:422 #: tiramisu/storage/sqlalchemy/option.py:741 msgid "no option {0} found" msgstr "pas d'option {0} trouvée" -#: tiramisu/storage/dictionary/option.py:462 +#: tiramisu/storage/dictionary/option.py:469 msgid "cannot find dynpath" msgstr "ne peut trouver le dynpath" -#: tiramisu/storage/dictionary/option.py:551 +#: tiramisu/storage/dictionary/option.py:558 #: tiramisu/storage/sqlalchemy/option.py:894 msgid "suffix and context needed if it's a dyn option" msgstr "suffix et context obligatoire si c'est une option dynamique" -#: tiramisu/storage/dictionary/option.py:572 +#: tiramisu/storage/dictionary/option.py:579 #: tiramisu/storage/sqlalchemy/option.py:926 msgid "unknown Option {0} in OptionDescription {1}" msgstr "Option {0} inconnue pour l'OptionDescription {1}" @@ -857,55 +866,76 @@ msgstr "un espace de stockage dictionary ne peut être persistant" msgid "information's item not found {0}" msgstr "l'information de l'objet ne sont pas trouvé {0}" -#: tiramisu/value.py:378 +#: tiramisu/value.py:388 msgid "you should only set value with config" msgstr "vous devez seul affecter une valeur avec un config" -#: tiramisu/value.py:489 +#: tiramisu/value.py:500 msgid "owner only avalaible for an option" msgstr "owner seulement possible pour une option" -#: tiramisu/value.py:533 +#: tiramisu/value.py:544 msgid "no value for {0} cannot change owner to {1}" msgstr "pas de valeur pour {0} ne peut changer d'utilisateur pour {1}" -#: tiramisu/value.py:667 +#: tiramisu/value.py:678 msgid "can force cache only if cache is actived in config" msgstr "" "peut force la mise en cache seulement si le cache est activé dans la config" -#: tiramisu/value.py:704 +#: tiramisu/value.py:715 msgid "{0} is already a Multi " msgstr "{0} est déjà une Multi" -#: tiramisu/value.py:784 +#: tiramisu/value.py:795 msgid "cannot append a value on a multi option {0} which is a slave" msgstr "ne peut ajouter une valeur sur l'option multi {0} qui est une esclave" -#: tiramisu/value.py:817 +#: tiramisu/value.py:828 msgid "cannot sort multi option {0} if master or slave" msgstr "ne peut trier une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:821 +#: tiramisu/value.py:832 msgid "cmp is not permitted in python v3 or greater" msgstr "cmp n'est pas permis en python v3 ou supérieure" -#: tiramisu/value.py:830 +#: tiramisu/value.py:841 msgid "cannot reverse multi option {0} if master or slave" msgstr "ne peut inverser une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:837 +#: tiramisu/value.py:848 msgid "cannot insert multi option {0} if master or slave" msgstr "ne peut insérer une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:854 +#: tiramisu/value.py:865 msgid "cannot extend multi option {0} if master or slave" msgstr "ne peut étendre une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:889 +#: tiramisu/value.py:905 msgid "cannot pop a value on a multi option {0} which is a slave" msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave" +#~ msgid "a callback is already set for option {0}, cannot set another one's" +#~ msgstr "" +#~ "un callback est en lecture seul pour l'option {0}, ne peut en placer une " +#~ "autre" + +#~ msgid "invalid value {0} for option {1} which must be a list" +#~ msgstr "" +#~ "valeur invalide pour l'option {0} : {1} laquelle doit être une liste" + +#~ msgid "invalid value {0} for option {1} which must be a list of list" +#~ msgstr "" +#~ "valeur invalide pour l'option {0} : {1} laquelle doit être une liste de " +#~ "liste" + +#~ msgid "this value is already present" +#~ msgstr "cette valeur est déjà présente" + +#~ msgid "DynOptionDescription callback return not uniq value" +#~ msgstr "" +#~ "callback d'une DynOptionDescription ne retourne pas une valeur unique" + #~ msgid "malformed consistency option {0} must be a master/slaves" #~ msgstr "" #~ "test de consistence mal formé pour l'option {0} doit être une maître/" diff --git a/translations/tiramisu.pot b/translations/tiramisu.pot index cbfa9af..f240748 100644 --- a/translations/tiramisu.pot +++ b/translations/tiramisu.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2016-11-16 22:25+CET\n" +"POT-Creation-Date: 2016-11-20 17:57+CET\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,88 +27,88 @@ msgstr "" msgid "descr must be an optiondescription, not {0}" msgstr "" -#: tiramisu/config.py:148 +#: tiramisu/config.py:146 msgid "unknown group_type: {0}" msgstr "" -#: tiramisu/config.py:187 tiramisu/setting.py:335 tiramisu/value.py:54 -#: tiramisu/value.py:738 +#: tiramisu/config.py:185 tiramisu/setting.py:335 tiramisu/value.py:54 +#: tiramisu/value.py:749 msgid "the context does not exist anymore" msgstr "" -#: tiramisu/config.py:192 +#: tiramisu/config.py:190 msgid "no option description found for this config (may be GroupConfig)" msgstr "" -#: tiramisu/config.py:228 +#: tiramisu/config.py:226 msgid "can't assign to an OptionDescription" msgstr "" -#: tiramisu/config.py:389 +#: tiramisu/config.py:384 msgid "unknown type_ type {0}for _find" msgstr "" -#: tiramisu/config.py:432 +#: tiramisu/config.py:427 msgid "no option found in config with these criteria" msgstr "" -#: tiramisu/config.py:480 +#: tiramisu/config.py:475 msgid "make_dict can't filtering with value without option" msgstr "" -#: tiramisu/config.py:503 +#: tiramisu/config.py:498 msgid "unexpected path {0}, should start with {1}" msgstr "" -#: tiramisu/config.py:578 +#: tiramisu/config.py:573 msgid "opt in getowner must be an option not {0}" msgstr "" -#: tiramisu/config.py:626 +#: tiramisu/config.py:621 msgid "cannot serialize Config with MetaConfig" msgstr "" -#: tiramisu/config.py:640 +#: tiramisu/config.py:635 msgid "this storage is not serialisable, could be a none persistent storage" msgstr "" -#: tiramisu/config.py:705 +#: tiramisu/config.py:700 msgid "invalid name: {0} for config" msgstr "" -#: tiramisu/config.py:737 +#: tiramisu/config.py:732 msgid "groupconfig's children must be a list" msgstr "" -#: tiramisu/config.py:741 +#: tiramisu/config.py:736 msgid "groupconfig's children must be Config, MetaConfig or GroupConfig" msgstr "" -#: tiramisu/config.py:744 +#: tiramisu/config.py:739 msgid "name must be set to config before creating groupconfig" msgstr "" -#: tiramisu/config.py:750 +#: tiramisu/config.py:745 msgid "config name must be uniq in groupconfig for {0}" msgstr "" -#: tiramisu/config.py:859 +#: tiramisu/config.py:854 msgid "metaconfig's children should be config, not {0}" msgstr "" -#: tiramisu/config.py:863 +#: tiramisu/config.py:858 msgid "child has already a metaconfig's" msgstr "" -#: tiramisu/config.py:867 +#: tiramisu/config.py:862 msgid "all config in metaconfig must have the same optiondescription" msgstr "" -#: tiramisu/config.py:882 +#: tiramisu/config.py:877 msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config" msgstr "" -#: tiramisu/config.py:888 +#: tiramisu/config.py:883 msgid "force_default and force_dont_change_value cannot be set together" msgstr "" @@ -128,211 +128,223 @@ msgstr "" msgid "cannot access to {0} \"{1}\" because has {2} {3}" msgstr "" -#: tiramisu/option/baseoption.py:63 +#: tiramisu/option/baseoption.py:62 msgid "{0} must be a function" msgstr "" -#: tiramisu/option/baseoption.py:66 +#: tiramisu/option/baseoption.py:65 msgid "{0}_params must be a dict" msgstr "" -#: tiramisu/option/baseoption.py:69 +#: tiramisu/option/baseoption.py:68 msgid "{0}_params with key {1} mustn't have length different to 1" msgstr "" -#: tiramisu/option/baseoption.py:73 +#: tiramisu/option/baseoption.py:72 msgid "{0}_params must be tuple for key \"{1}\"" msgstr "" -#: tiramisu/option/baseoption.py:79 +#: tiramisu/option/baseoption.py:78 msgid "{0}_params with length of tuple as 1 must only have None as first value" msgstr "" -#: tiramisu/option/baseoption.py:83 +#: tiramisu/option/baseoption.py:82 msgid "{0}_params must only have 1 or 2 as length" msgstr "" -#: tiramisu/option/baseoption.py:89 +#: tiramisu/option/baseoption.py:88 msgid "{0}_params must have an option not a {0} for first argument" msgstr "" -#: tiramisu/option/baseoption.py:93 +#: tiramisu/option/baseoption.py:92 msgid "{0}_params must have a boolean not a {0} for second argument" msgstr "" -#: tiramisu/option/baseoption.py:110 +#: tiramisu/option/baseoption.py:109 msgid "invalid name: {0} for option" msgstr "" -#: tiramisu/option/baseoption.py:112 +#: tiramisu/option/baseoption.py:111 msgid "default_multi is set whereas multi is False in option: {0}" msgstr "" -#: tiramisu/option/baseoption.py:124 +#: tiramisu/option/baseoption.py:123 msgid "invalid multi value" msgstr "" -#: tiramisu/option/baseoption.py:134 +#: tiramisu/option/baseoption.py:125 +msgid "unique must be a boolean" +msgstr "" + +#: tiramisu/option/baseoption.py:127 +msgid "unique must be set only with multi value" +msgstr "" + +#: tiramisu/option/baseoption.py:137 msgid "invalid properties type {0} for {1}, must be a tuple" msgstr "" -#: tiramisu/option/baseoption.py:173 +#: tiramisu/option/baseoption.py:176 msgid "params defined for a callback function but no callback defined yet for option {0}" msgstr "" -#: tiramisu/option/baseoption.py:178 -msgid "a callback is already set for option {0}, cannot set another one's" +#: tiramisu/option/baseoption.py:181 +msgid "a callback is already set for {0}, cannot set another one's" msgstr "" -#: tiramisu/option/baseoption.py:262 +#: tiramisu/option/baseoption.py:265 msgid "cannot serialize Option, only in OptionDescription" msgstr "" -#: tiramisu/option/baseoption.py:343 tiramisu/storage/dictionary/option.py:119 +#: tiramisu/option/baseoption.py:346 tiramisu/storage/dictionary/option.py:123 msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgstr "" -#: tiramisu/option/baseoption.py:364 +#: tiramisu/option/baseoption.py:367 msgid "invalid string" msgstr "" -#: tiramisu/option/baseoption.py:367 +#: tiramisu/option/baseoption.py:370 msgid "invalid unicode or string" msgstr "" -#: tiramisu/option/baseoption.py:532 tiramisu/option/baseoption.py:577 -msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}" -msgstr "" - -#: tiramisu/option/baseoption.py:536 tiramisu/option/baseoption.py:581 -msgid "\"{0}\" is an invalid {1} for \"{2}\"" -msgstr "" - -#: tiramisu/option/baseoption.py:548 -msgid "do_validation for {0}: error in value" -msgstr "" - -#: tiramisu/option/baseoption.py:567 +#: tiramisu/option/baseoption.py:475 tiramisu/option/baseoption.py:572 msgid "attention, \"{0}\" could be an invalid {1} for \"{2}\", {3}" msgstr "" -#: tiramisu/option/baseoption.py:597 tiramisu/option/baseoption.py:607 -msgid "invalid value {0} for option {1} which must be a list" +#: tiramisu/option/baseoption.py:513 tiramisu/option/baseoption.py:624 +msgid "invalid value \"{}\", this value is already in \"{}\"" msgstr "" -#: tiramisu/option/baseoption.py:613 -msgid "invalid value {0} for option {1} which must be a list of list" +#: tiramisu/option/baseoption.py:554 tiramisu/option/baseoption.py:591 +msgid "\"{0}\" is an invalid {1} for \"{2}\", {3}" msgstr "" -#: tiramisu/option/baseoption.py:664 tiramisu/option/baseoption.py:668 +#: tiramisu/option/baseoption.py:558 tiramisu/option/baseoption.py:595 +msgid "\"{0}\" is an invalid {1} for \"{2}\"" +msgstr "" + +#: tiramisu/option/baseoption.py:569 +msgid "do_validation for {0}: error in value" +msgstr "" + +#: tiramisu/option/baseoption.py:611 tiramisu/option/baseoption.py:629 +msgid "invalid value \"{0}\" for \"{1}\" which must be a list" +msgstr "" + +#: tiramisu/option/baseoption.py:616 +msgid "invalid value \"{}\" for \"{}\" which must not be a list" +msgstr "" + +#: tiramisu/option/baseoption.py:638 +msgid "invalid value \"{0}\" for \"{1}\" which must be a list of list" +msgstr "" + +#: tiramisu/option/baseoption.py:691 tiramisu/option/baseoption.py:695 msgid "cannot add consistency with submulti option" msgstr "" -#: tiramisu/option/baseoption.py:670 +#: tiramisu/option/baseoption.py:697 msgid "consistency must be set with an option" msgstr "" -#: tiramisu/option/baseoption.py:673 tiramisu/option/baseoption.py:680 +#: tiramisu/option/baseoption.py:700 tiramisu/option/baseoption.py:707 msgid "almost one option in consistency is in a dynoptiondescription but not all" msgstr "" -#: tiramisu/option/baseoption.py:676 +#: tiramisu/option/baseoption.py:703 msgid "option in consistency must be in same dynoptiondescription" msgstr "" -#: tiramisu/option/baseoption.py:683 +#: tiramisu/option/baseoption.py:710 msgid "cannot add consistency with itself" msgstr "" -#: tiramisu/option/baseoption.py:685 +#: tiramisu/option/baseoption.py:712 msgid "every options in consistency must be multi or none" msgstr "" -#: tiramisu/option/baseoption.py:702 +#: tiramisu/option/baseoption.py:729 msgid "'{0}' ({1}) cannot add consistency, option is read-only" msgstr "" -#: tiramisu/option/baseoption.py:709 +#: tiramisu/option/baseoption.py:736 msgid "consistency {0} not available for this option" msgstr "" -#: tiramisu/option/baseoption.py:713 +#: tiramisu/option/baseoption.py:740 msgid "unknow parameter {0} in consistency" msgstr "" -#: tiramisu/option/baseoption.py:773 +#: tiramisu/option/baseoption.py:803 msgid "_cons_not_equal: {} are not different" msgstr "" -#: tiramisu/option/baseoption.py:777 -msgid "this value is already present" -msgstr "" - -#: tiramisu/option/baseoption.py:781 +#: tiramisu/option/baseoption.py:807 msgid "should be different from the value of {}" msgstr "" -#: tiramisu/option/baseoption.py:783 +#: tiramisu/option/baseoption.py:809 msgid "must be different from the value of {}" msgstr "" -#: tiramisu/option/baseoption.py:787 +#: tiramisu/option/baseoption.py:813 msgid "value for {} should be different" msgstr "" -#: tiramisu/option/baseoption.py:789 +#: tiramisu/option/baseoption.py:815 msgid "value for {} must be different" msgstr "" -#: tiramisu/option/baseoption.py:845 +#: tiramisu/option/baseoption.py:871 msgid "default value not allowed if option: {0} is calculated" msgstr "" -#: tiramisu/option/baseoption.py:865 +#: tiramisu/option/baseoption.py:891 msgid "malformed requirements type for option: {0}, must be a dict" msgstr "" -#: tiramisu/option/baseoption.py:871 +#: tiramisu/option/baseoption.py:897 msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}" msgstr "" -#: tiramisu/option/baseoption.py:879 +#: tiramisu/option/baseoption.py:905 msgid "malformed requirements for option: {0} require must have option, expected and action keys" msgstr "" -#: tiramisu/option/baseoption.py:886 +#: tiramisu/option/baseoption.py:912 msgid "malformed requirements for option: {0} action cannot be force_store_value" msgstr "" -#: tiramisu/option/baseoption.py:891 +#: tiramisu/option/baseoption.py:917 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "" -#: tiramisu/option/baseoption.py:895 +#: tiramisu/option/baseoption.py:921 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "" -#: tiramisu/option/baseoption.py:899 +#: tiramisu/option/baseoption.py:925 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" -#: tiramisu/option/baseoption.py:903 +#: tiramisu/option/baseoption.py:929 msgid "malformed requirements must be an option in option {0}" msgstr "" -#: tiramisu/option/baseoption.py:906 +#: tiramisu/option/baseoption.py:932 msgid "malformed requirements multi option must not set as requires of non multi option {0}" msgstr "" -#: tiramisu/option/baseoption.py:912 +#: tiramisu/option/baseoption.py:938 msgid "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" -#: tiramisu/option/baseoption.py:917 +#: tiramisu/option/baseoption.py:943 msgid "inconsistency in action types for option: {0} action: {1}" msgstr "" -#: tiramisu/option/baseoption.py:945 +#: tiramisu/option/baseoption.py:971 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "" @@ -633,7 +645,7 @@ msgid "group_type: {0} not allowed" msgstr "" #: tiramisu/option/optiondescription.py:313 -msgid "DynOptionDescription callback return not uniq value" +msgid "DynOptionDescription callback return not unique value" msgstr "" #: tiramisu/option/optiondescription.py:316 @@ -689,7 +701,7 @@ msgstr "" msgid "permissive must be a tuple" msgstr "" -#: tiramisu/setting.py:545 tiramisu/value.py:528 +#: tiramisu/setting.py:545 tiramisu/value.py:539 msgid "invalid generic owner {0}" msgstr "" @@ -721,45 +733,45 @@ msgstr "" msgid "option {0} not already exists in storage {1}" msgstr "" -#: tiramisu/storage/dictionary/option.py:104 +#: tiramisu/storage/dictionary/option.py:108 msgid "invalid default_multi value {0} for option {1}: {2}" msgstr "" -#: tiramisu/storage/dictionary/option.py:144 +#: tiramisu/storage/dictionary/option.py:148 #: tiramisu/storage/dictionary/value.py:234 #: tiramisu/storage/sqlalchemy/option.py:666 msgid "information's item not found: {0}" msgstr "" -#: tiramisu/storage/dictionary/option.py:406 +#: tiramisu/storage/dictionary/option.py:413 msgid "use impl_get_opt_by_path only with root OptionDescription" msgstr "" -#: tiramisu/storage/dictionary/option.py:408 +#: tiramisu/storage/dictionary/option.py:415 #: tiramisu/storage/sqlalchemy/option.py:730 msgid "no option for path {0}" msgstr "" -#: tiramisu/storage/dictionary/option.py:413 +#: tiramisu/storage/dictionary/option.py:420 #: tiramisu/storage/sqlalchemy/option.py:740 msgid "use impl_get_path_by_opt only with root OptionDescription" msgstr "" -#: tiramisu/storage/dictionary/option.py:415 +#: tiramisu/storage/dictionary/option.py:422 #: tiramisu/storage/sqlalchemy/option.py:741 msgid "no option {0} found" msgstr "" -#: tiramisu/storage/dictionary/option.py:462 +#: tiramisu/storage/dictionary/option.py:469 msgid "cannot find dynpath" msgstr "" -#: tiramisu/storage/dictionary/option.py:551 +#: tiramisu/storage/dictionary/option.py:558 #: tiramisu/storage/sqlalchemy/option.py:894 msgid "suffix and context needed if it's a dyn option" msgstr "" -#: tiramisu/storage/dictionary/option.py:572 +#: tiramisu/storage/dictionary/option.py:579 #: tiramisu/storage/sqlalchemy/option.py:926 msgid "unknown Option {0} in OptionDescription {1}" msgstr "" @@ -781,51 +793,51 @@ msgstr "" msgid "information's item not found {0}" msgstr "" -#: tiramisu/value.py:378 +#: tiramisu/value.py:388 msgid "you should only set value with config" msgstr "" -#: tiramisu/value.py:489 +#: tiramisu/value.py:500 msgid "owner only avalaible for an option" msgstr "" -#: tiramisu/value.py:533 +#: tiramisu/value.py:544 msgid "no value for {0} cannot change owner to {1}" msgstr "" -#: tiramisu/value.py:667 +#: tiramisu/value.py:678 msgid "can force cache only if cache is actived in config" msgstr "" -#: tiramisu/value.py:704 +#: tiramisu/value.py:715 msgid "{0} is already a Multi " msgstr "" -#: tiramisu/value.py:784 +#: tiramisu/value.py:795 msgid "cannot append a value on a multi option {0} which is a slave" msgstr "" -#: tiramisu/value.py:817 +#: tiramisu/value.py:828 msgid "cannot sort multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:821 +#: tiramisu/value.py:832 msgid "cmp is not permitted in python v3 or greater" msgstr "" -#: tiramisu/value.py:830 +#: tiramisu/value.py:841 msgid "cannot reverse multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:837 +#: tiramisu/value.py:848 msgid "cannot insert multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:854 +#: tiramisu/value.py:865 msgid "cannot extend multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:889 +#: tiramisu/value.py:905 msgid "cannot pop a value on a multi option {0} which is a slave" msgstr ""