Merge branch 'master' of ssh://git.labs.libre-entreprise.org/gitroot/tiramisu

This commit is contained in:
gwen 2013-09-24 10:34:12 +02:00
commit 5ba97c5928
6 changed files with 387 additions and 300 deletions

View File

@ -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")

View File

@ -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)

View File

@ -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,

View File

@ -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)))

View File

@ -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 <egarette@cadoles.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\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"

View File

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""