diff --git a/test/test_option_calculation.py b/test/test_option_calculation.py index 8ca8687..117de9d 100644 --- a/test/test_option_calculation.py +++ b/test/test_option_calculation.py @@ -28,6 +28,12 @@ def return_value(value=None): return value +def return_value2(*args, **kwargs): + value = list(args) + value.extend(kwargs.values()) + return value + + def make_description(): gcoption = ChoiceOption('name', 'GC name', ('ref', 'framework'), 'ref') gcdummy = BoolOption('dummy', 'dummy', default=False) @@ -675,3 +681,13 @@ def test_callback_multi_multi(): raises(ConfigError, "cfg.val4") assert cfg.val5 == ['val1', 'val4', 'val2', 'val4', 'val3', 'val4'] assert cfg.val7 == ['val1', 'val21', 'val2', 'val22', 'val3', 'val23'] + + +def test_multi_with_no_value(): + #First option return [] (so without value) + val1 = StrOption('val1', "", ['val'], multi=True) + val2 = StrOption('val2', "", multi=True) + val3 = StrOption('val3', '', multi=True, callback=return_value, callback_params={'': ((val2, False),), 'value': ((val1, False),)}) + od = OptionDescription('od', '', [val1, val2, val3]) + c = Config(od) + raises(ConfigError, "c.val3") diff --git a/tiramisu/autolib.py b/tiramisu/autolib.py index de8a8c5..efb7c0e 100644 --- a/tiramisu/autolib.py +++ b/tiramisu/autolib.py @@ -41,6 +41,13 @@ def carry_out_calculation(name, config, callback, callback_params, :param max_len: max length for a multi :type max_len: int + The callback_params is a dict. Key is used to build args (if key is '') + and kwargs (otherwise). Values are tuple of: + - values + - tuple with option and boolean's force_permissive (True when don't raise + if PropertiesOptionError) + Values could have multiple values only when key is ''. + * if no callback_params: => calculate() @@ -92,7 +99,6 @@ def carry_out_calculation(name, config, callback, callback_params, - a multi option with an other multi option but with same length opt1 == [1, 2, 3] opt2 == [11, 12, 13] - callback_params={'': ((opt1, False), (opt2, False))} => calculate(1, 11) => calculate(2, 12) => calculate(3, 13) @@ -100,9 +106,13 @@ def carry_out_calculation(name, config, callback, callback_params, - a multi option with an other multi option but with different length opt1 == [1, 2, 3] opt2 == [11, 12] - callback_params={'': ((opt1, False), (opt2, False))} => ConfigError() + - a multi option without value with a simple option + opt1 == [] + opt2 == 11 + => [] + * if callback_params={'value': ((opt1, False), (opt2, False))} => ConfigError() @@ -114,39 +124,47 @@ def carry_out_calculation(name, config, callback, callback_params, If calculate return list, this list is extend to return value. """ tcparams = {} + # if callback_params has a callback, launch several time calculate() one_is_multi = False - len_multi = 0 + # multi's option should have same value for all option + len_multi = None for key, callbacks in callback_params.items(): for callbk in callbacks: if isinstance(callbk, tuple): + # callbk is something link (opt, True|False) option, force_permissive = callbk + path = config.cfgimpl_get_description().impl_get_path_by_opt( + option) # get value try: - path = config.cfgimpl_get_description().impl_get_path_by_opt(option) value = config._getattr(path, force_permissive=True) except PropertiesOptionError as err: if force_permissive: continue raise ConfigError(_('unable to carry out a calculation, ' 'option {0} has properties: {1} for: ' - '{2}').format(option._name, err.proptype, + '{2}').format(option._name, + err.proptype, name)) is_multi = option.impl_is_multi() if is_multi: - if value is not None: - len_value = len(value) - if len_multi != 0 and len_multi != len_value: - raise ConfigError(_('unable to carry out a ' - 'calculation, option value with' - ' multi types must have same ' - 'length for: {0}').format(name)) - len_multi = len_value + len_value = len(value) + if len_multi is not None and len_multi != len_value: + raise ConfigError(_('unable to carry out a ' + 'calculation, option value with' + ' multi types must have same ' + 'length for: {0}').format(name)) + len_multi = len_value one_is_multi = True tcparams.setdefault(key, []).append((value, is_multi)) else: + # callbk is a value and not a multi tcparams.setdefault(key, []).append((callbk, False)) + # if one value is a multi, launch several time calculate + # if index is set, return a value + # if no index, return a list if one_is_multi: ret = [] if index: @@ -161,19 +179,20 @@ def carry_out_calculation(name, config, callback, callback_params, else: range_ = range(len_multi) for incr in range_: - tcp = {} - params = [] + args = [] + kwargs = {} for key, couples in tcparams.items(): for couple in couples: value, ismulti = couple - if ismulti and value is not None: - if key == '': - params.append(value[incr]) - else: - tcp[key] = value[incr] + if ismulti: + val = value[incr] else: - params.append(value) - calc = calculate(name, callback, params, tcp) + val = value + if key == '': + args.append(val) + else: + kwargs[key] = val + calc = calculate(callback, args, kwargs) if index: ret = calc else: @@ -183,24 +202,26 @@ def carry_out_calculation(name, config, callback, callback_params, ret.append(calc) return ret else: - tcp = {} - params = [] + # no value is multi + # return a single value + args = [] + kwargs = {} for key, couples in tcparams.items(): for couple in couples: + # couple[1] (ismulti) is always False if key == '': - value = couple[0] - params.append(value) + args.append(couple[0]) else: - tcp[key] = couple[0] - return calculate(name, callback, params, tcp) + kwargs[key] = couple[0] + return calculate(callback, args, kwargs) -def calculate(name, callback, params, tcparams): +def calculate(callback, args, kwargs): """wrapper that launches the 'callback' - :param callback: callback name - :param params: in the callback's arity, the unnamed parameters - :param tcparams: in the callback's arity, the named parameters + :param callback: callback function + :param args: in the callback's arity, the unnamed parameters + :param kwargs: in the callback's arity, the named parameters """ - return callback(*params, **tcparams) + return callback(*args, **kwargs) diff --git a/tiramisu/config.py b/tiramisu/config.py index f1b2851..3687349 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -"options handler global entry point" # Copyright (C) 2012-2013 Team tiramisu (see AUTHORS for all contributors) # # This program is free software; you can redistribute it and/or modify @@ -20,6 +19,7 @@ # the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/ # the whole pypy projet is under MIT licence # ____________________________________________________________ +"options handler global entry point" import weakref from tiramisu.error import PropertiesOptionError, ConfigError from tiramisu.option import OptionDescription, Option, SymLinkOption @@ -31,7 +31,11 @@ from tiramisu.i18n import _ class SubConfig(object): - "sub configuration management entry" + """Sub configuration management entry. + Tree if OptionDescription's responsability. SubConfig are generated + on-demand. A Config is also a SubConfig. + Root Config is call context below + """ __slots__ = ('_impl_context', '_impl_descr', '_impl_path') def __init__(self, descr, context, subpath=None): @@ -56,6 +60,7 @@ class SubConfig(object): def cfgimpl_reset_cache(self, only_expired=False, only=('values', 'settings')): + "remove cache (in context)" self._cfgimpl_get_context().cfgimpl_reset_cache(only_expired, only) def cfgimpl_get_home_by_path(self, path, force_permissive=False, diff --git a/tiramisu/option.py b/tiramisu/option.py index 10aba5c..fb76444 100644 --- a/tiramisu/option.py +++ b/tiramisu/option.py @@ -1325,6 +1325,6 @@ def validate_callback(callback, callback_params, type_): ).format(type_, type(option))) if force_permissive not in [True, False]: raise ValueError(_('{0}_params should have a boolean' - 'not a {0} for second argument' + ' not a {0} for second argument' ).format(type_, type( force_permissive))) diff --git a/translations/fr/tiramisu.po b/translations/fr/tiramisu.po index 8bceb43..9e8e2f4 100644 --- a/translations/fr/tiramisu.po +++ b/translations/fr/tiramisu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-08-31 09:52+CEST\n" +"POT-Creation-Date: 2013-09-23 20:59+CEST\n" "PO-Revision-Date: \n" "Last-Translator: Emmanuel Garette \n" "Language-Team: LANGUAGE \n" @@ -11,18 +11,14 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" -#: tiramisu/autolib.py:58 -msgid "no config specified but needed" -msgstr "aucune config spécifié alors que c'est nécessaire" - -#: tiramisu/autolib.py:65 +#: tiramisu/autolib.py:131 msgid "" "unable to carry out a calculation, option {0} has properties: {1} for: {2}" msgstr "" "impossible d'effectuer le calcul, l'option {0} a les propriétés : {1} pour : " "{2}" -#: tiramisu/autolib.py:74 +#: tiramisu/autolib.py:140 msgid "" "unable to carry out a calculation, option value with multi types must have " "same length for: {0}" @@ -30,79 +26,75 @@ msgstr "" "impossible d'effectuer le calcul, valeur d'un option avec le type multi doit " "avoir la même longueur pour : {0}" -#: tiramisu/config.py:47 +#: tiramisu/config.py:48 msgid "descr must be an optiondescription, not {0}" msgstr "descr doit être une optiondescription pas un {0}" -#: tiramisu/config.py:121 +#: tiramisu/config.py:122 msgid "unknown group_type: {0}" msgstr "group_type inconnu: {0}" -#: tiramisu/config.py:157 +#: tiramisu/config.py:158 msgid "" "no option description found for this config (may be metaconfig without meta)" msgstr "" "pas d'option description pour cette config (peut être une metaconfig sans " "meta)" -#: tiramisu/config.py:311 +#: tiramisu/config.py:313 msgid "unknown type_ type {0}for _find" msgstr "type_ type {0} pour _find inconnu" -#: tiramisu/config.py:350 +#: tiramisu/config.py:352 msgid "no option found in config with these criteria" msgstr "aucune option trouvée dans la config avec ces critères" -#: tiramisu/config.py:400 +#: tiramisu/config.py:402 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:421 +#: tiramisu/config.py:423 msgid "unexpected path {0}, should start with {1}" msgstr "chemin imprévu {0}, devrait commencer par {1}" -#: tiramisu/config.py:481 +#: tiramisu/config.py:483 msgid "opt in getowner must be an option not {0}" msgstr "opt dans getowner doit être une option pas {0}" -#: tiramisu/option.py:71 -msgid "{0} has no attribute impl_set_information" -msgstr "{0} n'a pas d'attribut impl_set_information" - -#: tiramisu/option.py:86 -msgid "information's item not found: {0}" -msgstr "aucune config spécifié alors que c'est nécessaire" - -#: tiramisu/option.py:89 -msgid "{0} has no attribute impl_get_information" -msgstr "{0} n'a pas d'attribut impl_get_information" - -#: tiramisu/option.py:117 -msgid "'{0}' ({1}) object attribute '{2}' is read-only" -msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seul" - -#: tiramisu/option.py:159 +#: tiramisu/option.py:69 msgid "invalid name: {0} for option" msgstr "nom invalide : {0} pour l'option" -#: tiramisu/option.py:169 -msgid "validator must be a function" -msgstr "validator doit être une fonction" +#: tiramisu/option.py:79 +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.py:176 +#: tiramisu/option.py:121 +msgid "'{0}' ({1}) object attribute '{2}' is read-only" +msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seul" + +#: tiramisu/option.py:148 tiramisu/value.py:361 +msgid "information's item not found: {0}" +msgstr "aucune config spécifié alors que c'est nécessaire" + +#: tiramisu/option.py:265 +msgid "cannot serialize Option, only in OptionDescription" +msgstr "ne peut serialiser une Option, seulement via une OptionDescription" + +#: tiramisu/option.py:364 msgid "a default_multi is set whereas multi is False in option: {0}" msgstr "" "une default_multi est renseigné alors que multi est False dans l'option : {0}" -#: tiramisu/option.py:182 +#: tiramisu/option.py:370 msgid "invalid default_multi value {0} for option {1}: {2}" msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}" -#: tiramisu/option.py:187 +#: tiramisu/option.py:375 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é" -#: tiramisu/option.py:190 +#: tiramisu/option.py:378 msgid "" "params defined for a callback function but no callback defined yet for " "option {0}" @@ -110,183 +102,179 @@ msgstr "" "params définit pour une fonction callback mais par de callback défini encore " "pour l'option {0}" -#: tiramisu/option.py:212 tiramisu/option.py:753 -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.py:463 +msgid "validator should return a boolean, not {0}" +msgstr "validator devrait retourner un boolean, pas un {0}" -#: tiramisu/option.py:285 +#: tiramisu/option.py:473 msgid "invalid value {0} for option {1} for object {2}" msgstr "valeur invalide {0} pour l'option {1} pour l'objet {2}" -#: tiramisu/option.py:293 tiramisu/value.py:468 +#: tiramisu/option.py:481 tiramisu/value.py:542 msgid "invalid value {0} for option {1}: {2}" msgstr "valeur invalide {0} pour l'option {1} : {2}" -#: tiramisu/option.py:305 +#: tiramisu/option.py:493 msgid "invalid value {0} for option {1} which must be a list" msgstr "valeur invalide {0} pour l'option {1} qui doit être une liste" -#: tiramisu/option.py:374 +#: tiramisu/option.py:562 msgid "invalid value {0} for option {1} must be different as {2} option" msgstr "" "valeur invalide {0} pour l'option {1} doit être différent que l'option {2}" -#: tiramisu/option.py:396 +#: tiramisu/option.py:618 msgid "values must be a tuple for {0}" msgstr "values doit être un tuple pour {0}" -#: tiramisu/option.py:399 +#: tiramisu/option.py:621 msgid "open_values must be a boolean for {0}" msgstr "open_values doit être un booléen pour {0}" -#: tiramisu/option.py:420 +#: tiramisu/option.py:642 msgid "value {0} is not permitted, only {1} is allowed" msgstr "valeur {0} n'est pas permit, seules {1} sont autorisées" -#: tiramisu/option.py:432 +#: tiramisu/option.py:654 msgid "value must be a boolean" msgstr "valeur doit être un booléen" -#: tiramisu/option.py:442 +#: tiramisu/option.py:664 msgid "value must be an integer" msgstr "valeur doit être un numbre" -#: tiramisu/option.py:452 +#: tiramisu/option.py:674 msgid "value must be a float" msgstr "valeur doit être un nombre flottant" -#: tiramisu/option.py:462 +#: tiramisu/option.py:684 msgid "value must be a string, not {0}" msgstr "valeur doit être une chaîne, pas {0}" -#: tiramisu/option.py:480 +#: tiramisu/option.py:702 msgid "value must be an unicode" msgstr "valeur doit être une valeur unicode" -#: tiramisu/option.py:490 +#: tiramisu/option.py:714 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "symlinkoption mal formé doit être une option pour symlink {0}" -#: tiramisu/option.py:526 -msgid "IP shall not be in reserved class" +#: tiramisu/option.py:766 +msgid "IP mustn't not be in reserved class" msgstr "IP ne doit pas être d'une classe reservée" -#: tiramisu/option.py:528 +#: tiramisu/option.py:768 msgid "IP must be in private class" msgstr "IP doit être dans la classe privée" -#: tiramisu/option.py:566 +#: tiramisu/option.py:806 msgid "inconsistency in allowed range" msgstr "inconsistence dans la plage autorisée" -#: tiramisu/option.py:571 +#: tiramisu/option.py:811 msgid "max value is empty" msgstr "valeur maximum est vide" -#: tiramisu/option.py:608 +#: tiramisu/option.py:848 msgid "network shall not be in reserved class" msgstr "réseau ne doit pas être dans la classe reservée" -#: tiramisu/option.py:640 +#: tiramisu/option.py:880 msgid "invalid network {0} ({1}) with netmask {2} ({3}), this network is an IP" msgstr "réseau invalide {0} ({1}) avec masque {2} ({3}), ce réseau est une IP" -#: tiramisu/option.py:645 +#: tiramisu/option.py:885 msgid "invalid IP {0} ({1}) with netmask {2} ({3}), this IP is a network" msgstr "IP invalide {0} ({1}) avec masque {2} ({3}), cette IP est un réseau" -#: tiramisu/option.py:650 +#: tiramisu/option.py:890 msgid "invalid IP {0} ({1}) with netmask {2} ({3})" msgstr "IP invalide {0} ({1}) avec masque {2} ({3})" -#: tiramisu/option.py:652 +#: tiramisu/option.py:892 msgid "invalid network {0} ({1}) with netmask {2} ({3})" msgstr "réseau invalide {0} ({1}) avec masque {2} ({3})" -#: tiramisu/option.py:672 +#: tiramisu/option.py:912 msgid "unknown type_ {0} for hostname" msgstr "type_ inconnu {0} pour le nom d'hôte" -#: tiramisu/option.py:675 +#: tiramisu/option.py:915 msgid "allow_ip must be a boolean" msgstr "allow_ip doit être un booléen" -#: tiramisu/option.py:704 +#: tiramisu/option.py:944 msgid "invalid value for {0}, must have dot" msgstr "valeur invalide pour {0}, doit avoir un point" -#: tiramisu/option.py:707 +#: tiramisu/option.py:947 msgid "invalid domainname's length for {0} (max {1})" msgstr "longueur du nom de domaine invalide pour {0} (maximum {1})" -#: tiramisu/option.py:710 +#: tiramisu/option.py:950 msgid "invalid domainname's length for {0} (min 2)" msgstr "longueur du nom de domaine invalide pour {0} (minimum 2)" -#: tiramisu/option.py:714 +#: tiramisu/option.py:954 msgid "invalid domainname" msgstr "nom de domaine invalide" -#: tiramisu/option.py:731 -msgid "invalid name: {0} for optiondescription" -msgstr "nom invalide : {0} pour l'optiondescription" - -#: tiramisu/option.py:743 +#: tiramisu/option.py:981 msgid "duplicate option name: {0}" msgstr "nom de l'option dupliqué : {0}" -#: tiramisu/option.py:769 +#: tiramisu/option.py:998 msgid "unknown Option {0} in OptionDescription {1}" msgstr "Option {} inconnue pour l'OptionDescription{}" -#: tiramisu/option.py:820 +#: tiramisu/option.py:1049 msgid "duplicate option: {0}" msgstr "option dupliquée : {0}" -#: tiramisu/option.py:850 +#: tiramisu/option.py:1083 msgid "no option for path {0}" msgstr "pas d'option pour le chemin {0}" -#: tiramisu/option.py:856 +#: tiramisu/option.py:1089 msgid "no option {0} found" msgstr "pas d'option {0} trouvée" -#: tiramisu/option.py:866 +#: tiramisu/option.py:1099 msgid "cannot change group_type if already set (old {0}, new {1})" msgstr "ne peut changer group_type si déjà spécifié (ancien {0}, nouveau {1})" -#: tiramisu/option.py:879 +#: tiramisu/option.py:1112 msgid "master group {0} shall not have a subgroup" msgstr "groupe maître {0} ne doit pas avoir de sous-groupe" -#: tiramisu/option.py:882 +#: tiramisu/option.py:1115 msgid "master group {0} shall not have a symlinkoption" msgstr "groupe maître {0} ne doit pas avoir de symlinkoption" -#: tiramisu/option.py:885 +#: tiramisu/option.py:1118 msgid "not allowed option {0} in group {1}: this option is not a multi" msgstr "" "option non autorisée {0} dans le groupe {1} : cette option n'est pas une " "multi" -#: tiramisu/option.py:896 +#: tiramisu/option.py:1129 msgid "master group with wrong master name for {0}" msgstr "le groupe maître avec un nom de maître éroné pour {0}" -#: tiramisu/option.py:905 +#: tiramisu/option.py:1138 msgid "no child has same nom has master group for: {0}" msgstr "pas d'enfant avec le nom du groupe maître pour {0} " -#: tiramisu/option.py:908 +#: tiramisu/option.py:1141 msgid "group_type: {0} not allowed" msgstr "group_type : {0} non autorisé" -#: tiramisu/option.py:946 +#: tiramisu/option.py:1231 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.py:962 +#: tiramisu/option.py:1248 msgid "" "malformed requirements for option: {0} require must have option, expected " "and action keys" @@ -294,87 +282,108 @@ msgstr "" "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs " "option, exptected et action" -#: tiramisu/option.py:967 +#: tiramisu/option.py:1253 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "requirements malformé pour l'option : {0} inverse doit être un booléen" -#: tiramisu/option.py:971 +#: tiramisu/option.py:1257 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "requirements malformé pour l'option : {0} transitive doit être booléen" -#: tiramisu/option.py:975 +#: tiramisu/option.py:1261 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" "requirements malformé pour l'option : {0} same_action doit être un booléen" -#: tiramisu/option.py:979 +#: tiramisu/option.py:1265 msgid "malformed requirements must be an option in option {0}" msgstr "requirements malformé doit être une option dans l'option {0}" -#: tiramisu/option.py:982 +#: tiramisu/option.py:1268 msgid "malformed requirements option {0} should not be a multi" msgstr "requirements malformé l'option {0} ne doit pas être une multi" -#: tiramisu/option.py:988 +#: tiramisu/option.py:1274 msgid "" "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" "requirements malformé deuxième argument doit être valide pour l'option {0} : " "{1}" -#: tiramisu/option.py:993 +#: tiramisu/option.py:1279 msgid "inconsistency in action types for option: {0} action: {1}" msgstr "incohérence dans les types action pour l'option : {0} action {1}" -#: tiramisu/setting.py:47 -msgid "storage_type is already set, cannot rebind it" -msgstr "storage_type est déjà défini, impossible de le redéfinir" +#: tiramisu/option.py:1304 +msgid "{0} should be a function" +msgstr "{0} doit être une fonction" -#: tiramisu/setting.py:67 +#: tiramisu/option.py:1307 +msgid "{0}_params should be a dict" +msgstr "{0}_params devrait être un dict" + +#: tiramisu/option.py:1310 +msgid "{0}_params with key {1} should not have length different to 1" +msgstr "" +"{0}_params avec la clef {1} devrait ne pas avoir une longueur différent de 1" + +#: tiramisu/option.py:1314 +msgid "{0}_params should be tuple for key \"{1}\"" +msgstr "{0}_params devrait être un tuple pour la clef \"{1}\"" + +#: tiramisu/option.py:1320 +msgid "validator not support tuple" +msgstr "validator n'accepte pas de tuple" + +#: tiramisu/option.py:1323 +msgid "{0}_params should have an option not a {0} for first argument" +msgstr "{0}_params devrait avoir une option pas un {0} pour première argument" + +#: tiramisu/option.py:1327 +msgid "{0}_params should have a boolean not a {0} for second argument" +msgstr "{0}_params devrait avoir un boolean pas un {0} pour second argument" + +#: tiramisu/setting.py:116 msgid "can't rebind {0}" msgstr "ne peut redéfinir ({0})" -#: tiramisu/setting.py:72 +#: tiramisu/setting.py:121 msgid "can't unbind {0}" msgstr "ne peut supprimer ({0})" -#: tiramisu/setting.py:185 +#: tiramisu/setting.py:259 msgid "cannot append {0} property for option {1}: this property is calculated" msgstr "" "ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est " "calculée" -#: tiramisu/setting.py:215 -msgid "option {0} not already exists in storage {1}" -msgstr "option {0} n'existe pas dans l'espace de stockage {1}" - -#: tiramisu/setting.py:282 +#: tiramisu/setting.py:322 msgid "opt and all_properties must not be set together in reset" msgstr "opt et all_properties ne doit pas être renseigné ensemble dans reset" -#: tiramisu/setting.py:297 +#: tiramisu/setting.py:337 msgid "if opt is not None, path should not be None in _getproperties" msgstr "" "si opt n'est pas None, path devrait ne pas être à None dans _getproperties" -#: tiramisu/setting.py:391 +#: tiramisu/setting.py:440 msgid "cannot change the value for option {0} this option is frozen" msgstr "" "ne peut modifié la valeur de l'option {0} cette option n'est pas modifiable" -#: tiramisu/setting.py:397 +#: tiramisu/setting.py:446 msgid "trying to access to an option named: {0} with properties {1}" msgstr "tentative d'accès à une option nommée : {0} avec les propriétés {1}" -#: tiramisu/setting.py:415 +#: tiramisu/setting.py:464 msgid "permissive must be a tuple" msgstr "permissive doit être un tuple" -#: tiramisu/setting.py:422 tiramisu/value.py:277 +#: tiramisu/setting.py:471 tiramisu/value.py:300 msgid "invalid generic owner {0}" msgstr "invalide owner générique {0}" -#: tiramisu/setting.py:503 +#: tiramisu/setting.py:558 msgid "" "malformed requirements imbrication detected for option: '{0}' with " "requirement on: '{1}'" @@ -382,65 +391,85 @@ msgstr "" "imbrication de requirements malformé detectée pour l'option : '{0}' avec " "requirement sur : '{1}'" -#: tiramisu/setting.py:515 +#: tiramisu/setting.py:570 msgid "option '{0}' has requirement's property error: {1} {2}" msgstr "l'option '{0}' a une erreur de propriété pour le requirement : {1} {2}" -#: tiramisu/storage/dictionary/storage.py:37 +#: tiramisu/storage/__init__.py:52 +msgid "storage_type is already set, cannot rebind it" +msgstr "storage_type est déjà défini, impossible de le redéfinir" + +#: tiramisu/storage/__init__.py:86 +msgid "option {0} not already exists in storage {1}" +msgstr "option {0} n'existe pas dans l'espace de stockage {1}" + +#: tiramisu/storage/dictionary/storage.py:39 msgid "dictionary storage cannot delete session" msgstr "" "impossible de supprimer une session dans un espace de stockage dictionary" -#: tiramisu/storage/dictionary/storage.py:46 +#: tiramisu/storage/dictionary/storage.py:50 msgid "session already used" msgstr "session déjà utilisée" -#: tiramisu/storage/dictionary/storage.py:48 +#: tiramisu/storage/dictionary/storage.py:52 msgid "a dictionary cannot be persistent" msgstr "un espace de stockage dictionary ne peut être persistant" -#: tiramisu/value.py:284 +#: tiramisu/value.py:307 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:356 +#: tiramisu/value.py:414 msgid "invalid len for the slave: {0} which has {1} as master" msgstr "longueur invalide pour une esclave : {0} qui a {1} comme maître" -#: tiramisu/value.py:373 +#: tiramisu/value.py:438 msgid "invalid len for the master: {0} which has {1} as slave with greater len" msgstr "" "longueur invalide pour un maître : {0} qui a {1} une esclave avec une plus " "grande longueur" -#: tiramisu/value.py:394 +#: tiramisu/value.py:468 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:429 +#: tiramisu/value.py:503 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:433 +#: tiramisu/value.py:507 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:442 +#: tiramisu/value.py:516 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:450 +#: tiramisu/value.py:524 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:458 +#: tiramisu/value.py:532 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:482 +#: tiramisu/value.py:559 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 "no config specified but needed" +#~ msgstr "aucune config spécifié alors que c'est nécessaire" + +#~ msgid "{0} has no attribute impl_set_information" +#~ msgstr "{0} n'a pas d'attribut impl_set_information" + +#~ msgid "{0} has no attribute impl_get_information" +#~ msgstr "{0} n'a pas d'attribut impl_get_information" + +#~ msgid "invalid name: {0} for optiondescription" +#~ msgstr "nom invalide : {0} pour l'optiondescription" + #~ msgid "metaconfig's children must be a list" #~ msgstr "enfants d'une metaconfig doit être une liste" diff --git a/translations/tiramisu.pot b/translations/tiramisu.pot index ef40426..8b37d6a 100644 --- a/translations/tiramisu.pot +++ b/translations/tiramisu.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-09-02 11:30+CEST\n" +"POT-Creation-Date: 2013-09-23 20:59+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,395 +15,411 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: tiramisu/autolib.py:58 -msgid "no config specified but needed" -msgstr "" - -#: tiramisu/autolib.py:65 +#: tiramisu/autolib.py:131 msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}" msgstr "" -#: tiramisu/autolib.py:74 +#: tiramisu/autolib.py:140 msgid "unable to carry out a calculation, option value with multi types must have same length for: {0}" msgstr "" -#: tiramisu/config.py:47 +#: tiramisu/config.py:48 msgid "descr must be an optiondescription, not {0}" msgstr "" -#: tiramisu/config.py:121 +#: tiramisu/config.py:122 msgid "unknown group_type: {0}" msgstr "" -#: tiramisu/config.py:157 +#: tiramisu/config.py:158 msgid "no option description found for this config (may be metaconfig without meta)" msgstr "" -#: tiramisu/config.py:311 +#: tiramisu/config.py:313 msgid "unknown type_ type {0}for _find" msgstr "" -#: tiramisu/config.py:350 +#: tiramisu/config.py:352 msgid "no option found in config with these criteria" msgstr "" -#: tiramisu/config.py:400 +#: tiramisu/config.py:402 msgid "make_dict can't filtering with value without option" msgstr "" -#: tiramisu/config.py:421 +#: tiramisu/config.py:423 msgid "unexpected path {0}, should start with {1}" msgstr "" -#: tiramisu/config.py:481 +#: tiramisu/config.py:483 msgid "opt in getowner must be an option not {0}" msgstr "" -#: tiramisu/option.py:71 -msgid "{0} has no attribute impl_set_information" -msgstr "" - -#: tiramisu/option.py:86 -msgid "information's item not found: {0}" -msgstr "" - -#: tiramisu/option.py:89 -msgid "{0} has no attribute impl_get_information" -msgstr "" - -#: tiramisu/option.py:117 -msgid "'{0}' ({1}) object attribute '{2}' is read-only" -msgstr "" - -#: tiramisu/option.py:208 +#: tiramisu/option.py:69 msgid "invalid name: {0} for option" msgstr "" -#: tiramisu/option.py:218 -msgid "validator must be a function" -msgstr "" - -#: tiramisu/option.py:225 -msgid "a default_multi is set whereas multi is False in option: {0}" -msgstr "" - -#: tiramisu/option.py:231 -msgid "invalid default_multi value {0} for option {1}: {2}" -msgstr "" - -#: tiramisu/option.py:236 -msgid "default value not allowed if option: {0} is calculated" -msgstr "" - -#: tiramisu/option.py:239 -msgid "params defined for a callback function but no callback defined yet for option {0}" -msgstr "" - -#: tiramisu/option.py:261 tiramisu/option.py:809 +#: tiramisu/option.py:79 msgid "invalid properties type {0} for {1}, must be a tuple" msgstr "" -#: tiramisu/option.py:334 +#: tiramisu/option.py:121 +msgid "'{0}' ({1}) object attribute '{2}' is read-only" +msgstr "" + +#: tiramisu/option.py:148 tiramisu/value.py:361 +msgid "information's item not found: {0}" +msgstr "" + +#: tiramisu/option.py:265 +msgid "cannot serialize Option, only in OptionDescription" +msgstr "" + +#: tiramisu/option.py:364 +msgid "a default_multi is set whereas multi is False in option: {0}" +msgstr "" + +#: tiramisu/option.py:370 +msgid "invalid default_multi value {0} for option {1}: {2}" +msgstr "" + +#: tiramisu/option.py:375 +msgid "default value not allowed if option: {0} is calculated" +msgstr "" + +#: tiramisu/option.py:378 +msgid "params defined for a callback function but no callback defined yet for option {0}" +msgstr "" + +#: tiramisu/option.py:463 +msgid "validator should return a boolean, not {0}" +msgstr "" + +#: tiramisu/option.py:473 msgid "invalid value {0} for option {1} for object {2}" msgstr "" -#: tiramisu/option.py:342 tiramisu/value.py:468 +#: tiramisu/option.py:481 tiramisu/value.py:542 msgid "invalid value {0} for option {1}: {2}" msgstr "" -#: tiramisu/option.py:354 +#: tiramisu/option.py:493 msgid "invalid value {0} for option {1} which must be a list" msgstr "" -#: tiramisu/option.py:423 +#: tiramisu/option.py:562 msgid "invalid value {0} for option {1} must be different as {2} option" msgstr "" -#: tiramisu/option.py:445 +#: tiramisu/option.py:618 msgid "values must be a tuple for {0}" msgstr "" -#: tiramisu/option.py:448 +#: tiramisu/option.py:621 msgid "open_values must be a boolean for {0}" msgstr "" -#: tiramisu/option.py:469 +#: tiramisu/option.py:642 msgid "value {0} is not permitted, only {1} is allowed" msgstr "" -#: tiramisu/option.py:481 +#: tiramisu/option.py:654 msgid "value must be a boolean" msgstr "" -#: tiramisu/option.py:491 +#: tiramisu/option.py:664 msgid "value must be an integer" msgstr "" -#: tiramisu/option.py:501 +#: tiramisu/option.py:674 msgid "value must be a float" msgstr "" -#: tiramisu/option.py:511 +#: tiramisu/option.py:684 msgid "value must be a string, not {0}" msgstr "" -#: tiramisu/option.py:529 +#: tiramisu/option.py:702 msgid "value must be an unicode" msgstr "" -#: tiramisu/option.py:539 +#: tiramisu/option.py:714 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "" -#: tiramisu/option.py:581 -msgid "IP shall not be in reserved class" +#: tiramisu/option.py:766 +msgid "IP mustn't not be in reserved class" msgstr "" -#: tiramisu/option.py:583 +#: tiramisu/option.py:768 msgid "IP must be in private class" msgstr "" -#: tiramisu/option.py:621 +#: tiramisu/option.py:806 msgid "inconsistency in allowed range" msgstr "" -#: tiramisu/option.py:626 +#: tiramisu/option.py:811 msgid "max value is empty" msgstr "" -#: tiramisu/option.py:663 +#: tiramisu/option.py:848 msgid "network shall not be in reserved class" msgstr "" -#: tiramisu/option.py:695 +#: tiramisu/option.py:880 msgid "invalid network {0} ({1}) with netmask {2} ({3}), this network is an IP" msgstr "" -#: tiramisu/option.py:700 +#: tiramisu/option.py:885 msgid "invalid IP {0} ({1}) with netmask {2} ({3}), this IP is a network" msgstr "" -#: tiramisu/option.py:705 +#: tiramisu/option.py:890 msgid "invalid IP {0} ({1}) with netmask {2} ({3})" msgstr "" -#: tiramisu/option.py:707 +#: tiramisu/option.py:892 msgid "invalid network {0} ({1}) with netmask {2} ({3})" msgstr "" -#: tiramisu/option.py:727 +#: tiramisu/option.py:912 msgid "unknown type_ {0} for hostname" msgstr "" -#: tiramisu/option.py:730 +#: tiramisu/option.py:915 msgid "allow_ip must be a boolean" msgstr "" -#: tiramisu/option.py:759 +#: tiramisu/option.py:944 msgid "invalid value for {0}, must have dot" msgstr "" -#: tiramisu/option.py:762 +#: tiramisu/option.py:947 msgid "invalid domainname's length for {0} (max {1})" msgstr "" -#: tiramisu/option.py:765 +#: tiramisu/option.py:950 msgid "invalid domainname's length for {0} (min 2)" msgstr "" -#: tiramisu/option.py:769 +#: tiramisu/option.py:954 msgid "invalid domainname" msgstr "" -#: tiramisu/option.py:787 -msgid "invalid name: {0} for optiondescription" -msgstr "" - -#: tiramisu/option.py:799 +#: tiramisu/option.py:981 msgid "duplicate option name: {0}" msgstr "" -#: tiramisu/option.py:825 +#: tiramisu/option.py:998 msgid "unknown Option {0} in OptionDescription {1}" msgstr "" -#: tiramisu/option.py:874 +#: tiramisu/option.py:1049 msgid "duplicate option: {0}" msgstr "" -#: tiramisu/option.py:904 +#: tiramisu/option.py:1083 msgid "no option for path {0}" msgstr "" -#: tiramisu/option.py:910 +#: tiramisu/option.py:1089 msgid "no option {0} found" msgstr "" -#: tiramisu/option.py:920 +#: tiramisu/option.py:1099 msgid "cannot change group_type if already set (old {0}, new {1})" msgstr "" -#: tiramisu/option.py:933 +#: tiramisu/option.py:1112 msgid "master group {0} shall not have a subgroup" msgstr "" -#: tiramisu/option.py:936 +#: tiramisu/option.py:1115 msgid "master group {0} shall not have a symlinkoption" msgstr "" -#: tiramisu/option.py:939 +#: tiramisu/option.py:1118 msgid "not allowed option {0} in group {1}: this option is not a multi" msgstr "" -#: tiramisu/option.py:950 +#: tiramisu/option.py:1129 msgid "master group with wrong master name for {0}" msgstr "" -#: tiramisu/option.py:959 +#: tiramisu/option.py:1138 msgid "no child has same nom has master group for: {0}" msgstr "" -#: tiramisu/option.py:962 +#: tiramisu/option.py:1141 msgid "group_type: {0} not allowed" msgstr "" -#: tiramisu/option.py:1021 +#: tiramisu/option.py:1231 msgid "malformed requirements type for option: {0}, must be a dict" msgstr "" -#: tiramisu/option.py:1037 +#: tiramisu/option.py:1248 msgid "malformed requirements for option: {0} require must have option, expected and action keys" msgstr "" -#: tiramisu/option.py:1042 +#: tiramisu/option.py:1253 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "" -#: tiramisu/option.py:1046 +#: tiramisu/option.py:1257 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "" -#: tiramisu/option.py:1050 +#: tiramisu/option.py:1261 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" -#: tiramisu/option.py:1054 +#: tiramisu/option.py:1265 msgid "malformed requirements must be an option in option {0}" msgstr "" -#: tiramisu/option.py:1057 +#: tiramisu/option.py:1268 msgid "malformed requirements option {0} should not be a multi" msgstr "" -#: tiramisu/option.py:1063 +#: tiramisu/option.py:1274 msgid "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" -#: tiramisu/option.py:1068 +#: tiramisu/option.py:1279 msgid "inconsistency in action types for option: {0} action: {1}" msgstr "" -#: tiramisu/setting.py:47 -msgid "storage_type is already set, cannot rebind it" +#: tiramisu/option.py:1304 +msgid "{0} should be a function" msgstr "" -#: tiramisu/setting.py:67 +#: tiramisu/option.py:1307 +msgid "{0}_params should be a dict" +msgstr "" + +#: tiramisu/option.py:1310 +msgid "{0}_params with key {1} should not have length different to 1" +msgstr "" + +#: tiramisu/option.py:1314 +msgid "{0}_params should be tuple for key \"{1}\"" +msgstr "" + +#: tiramisu/option.py:1320 +msgid "validator not support tuple" +msgstr "" + +#: tiramisu/option.py:1323 +msgid "{0}_params should have an option not a {0} for first argument" +msgstr "" + +#: tiramisu/option.py:1327 +msgid "{0}_params should have a boolean not a {0} for second argument" +msgstr "" + +#: tiramisu/setting.py:116 msgid "can't rebind {0}" msgstr "" -#: tiramisu/setting.py:72 +#: tiramisu/setting.py:121 msgid "can't unbind {0}" msgstr "" -#: tiramisu/setting.py:185 +#: tiramisu/setting.py:259 msgid "cannot append {0} property for option {1}: this property is calculated" msgstr "" -#: tiramisu/setting.py:215 -msgid "option {0} not already exists in storage {1}" -msgstr "" - -#: tiramisu/setting.py:282 +#: tiramisu/setting.py:322 msgid "opt and all_properties must not be set together in reset" msgstr "" -#: tiramisu/setting.py:297 +#: tiramisu/setting.py:337 msgid "if opt is not None, path should not be None in _getproperties" msgstr "" -#: tiramisu/setting.py:391 +#: tiramisu/setting.py:440 msgid "cannot change the value for option {0} this option is frozen" msgstr "" -#: tiramisu/setting.py:397 +#: tiramisu/setting.py:446 msgid "trying to access to an option named: {0} with properties {1}" msgstr "" -#: tiramisu/setting.py:415 +#: tiramisu/setting.py:464 msgid "permissive must be a tuple" msgstr "" -#: tiramisu/setting.py:422 tiramisu/value.py:277 +#: tiramisu/setting.py:471 tiramisu/value.py:300 msgid "invalid generic owner {0}" msgstr "" -#: tiramisu/setting.py:503 +#: tiramisu/setting.py:558 msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'" msgstr "" -#: tiramisu/setting.py:515 +#: tiramisu/setting.py:570 msgid "option '{0}' has requirement's property error: {1} {2}" msgstr "" -#: tiramisu/storage/dictionary/storage.py:37 +#: tiramisu/storage/__init__.py:52 +msgid "storage_type is already set, cannot rebind it" +msgstr "" + +#: tiramisu/storage/__init__.py:86 +msgid "option {0} not already exists in storage {1}" +msgstr "" + +#: tiramisu/storage/dictionary/storage.py:39 msgid "dictionary storage cannot delete session" msgstr "" -#: tiramisu/storage/dictionary/storage.py:46 +#: tiramisu/storage/dictionary/storage.py:50 msgid "session already used" msgstr "" -#: tiramisu/storage/dictionary/storage.py:48 +#: tiramisu/storage/dictionary/storage.py:52 msgid "a dictionary cannot be persistent" msgstr "" -#: tiramisu/value.py:284 +#: tiramisu/value.py:307 msgid "no value for {0} cannot change owner to {1}" msgstr "" -#: tiramisu/value.py:356 +#: tiramisu/value.py:414 msgid "invalid len for the slave: {0} which has {1} as master" msgstr "" -#: tiramisu/value.py:373 +#: tiramisu/value.py:438 msgid "invalid len for the master: {0} which has {1} as slave with greater len" msgstr "" -#: tiramisu/value.py:394 +#: tiramisu/value.py:468 msgid "cannot append a value on a multi option {0} which is a slave" msgstr "" -#: tiramisu/value.py:429 +#: tiramisu/value.py:503 msgid "cannot sort multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:433 +#: tiramisu/value.py:507 msgid "cmp is not permitted in python v3 or greater" msgstr "" -#: tiramisu/value.py:442 +#: tiramisu/value.py:516 msgid "cannot reverse multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:450 +#: tiramisu/value.py:524 msgid "cannot insert multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:458 +#: tiramisu/value.py:532 msgid "cannot extend multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:482 +#: tiramisu/value.py:559 msgid "cannot pop a value on a multi option {0} which is a slave" msgstr ""