Merge branch 'master' into orm

Conflicts:
	tiramisu/setting.py
This commit is contained in:
Emmanuel Garette 2014-01-25 16:39:32 +01:00
commit 880b6366eb
6 changed files with 337 additions and 261 deletions

View File

@ -9,7 +9,7 @@ from py.test import raises
from tiramisu.config import Config
from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \
BoolOption, UnicodeOption, OptionDescription
from tiramisu.error import ConflictError
from tiramisu.error import ConflictError, ConfigError
def make_description():
@ -277,4 +277,24 @@ def test_no_validation():
setting.append('validator')
raises(ValueError, 'c.test1')
del(c.test1)
assert c.test1 == None
assert c.test1 is None
def test_delete_config_with_subconfig():
test = IntOption('test', '')
multi = IntOption('multi', '', multi=True)
od = OptionDescription('od', '', [test, multi])
odroot = OptionDescription('odroot', '', [od])
c = Config(odroot)
sub = c.od
val = c.cfgimpl_get_values()
setting = c.cfgimpl_get_settings()
val[test]
val[multi]
setting[test]
sub.make_dict()
del(c)
raises(ConfigError, 'val[test]')
raises(ConfigError, 'val[multi]')
raises(ConfigError, 'setting[test]')
raises(ConfigError, 'sub.make_dict()')

View File

@ -159,7 +159,15 @@ class SubConfig(object):
__repr__ = __str__
def _cfgimpl_get_context(self):
return self._impl_context()
"""context could be None, we need to test it
context is None only if all reference to `Config` object is deleted
(for example we delete a `Config` and we manipulate a reference to
old `SubConfig`, `Values`, `Multi` or `Settings`)
"""
context = self._impl_context()
if context is None:
raise ConfigError(_('the context does not exist anymore'))
return context
def cfgimpl_get_description(self):
if self._impl_descr is None:

View File

@ -24,7 +24,7 @@ from time import time
from copy import copy
import weakref
from tiramisu.error import (RequirementError, PropertiesOptionError,
ConstError)
ConstError, ConfigError)
from tiramisu.i18n import _
@ -328,6 +328,17 @@ class Settings(object):
self.context = weakref.ref(context)
self._p_ = storage
def _getcontext(self):
"""context could be None, we need to test it
context is None only if all reference to `Config` object is deleted
(for example we delete a `Config` and we manipulate a reference to
old `SubConfig`, `Values`, `Multi` or `Settings`)
"""
context = self.context()
if context is None:
raise ConfigError(_('the context does not exist anymore'))
return context
#____________________________________________________________
# properties methods
def __contains__(self, propname):
@ -357,7 +368,7 @@ class Settings(object):
if opt is not None and _path is None:
_path = self._get_path_by_opt(opt)
self._p_.reset_properties(_path)
self.context().cfgimpl_reset_cache()
self._getcontext().cfgimpl_reset_cache()
def _getproperties(self, opt=None, path=None, is_apply_req=True):
if opt is None:
@ -407,14 +418,12 @@ class Settings(object):
else:
#if opt._calc_properties is not None:
# properties -= opt._calc_properties
#FIXME a revoir ---------
#if set(opt._properties) == properties:
# self._p_.reset_properties(path)
#else:
# self._p_.setproperties(path, properties)
self._p_.setproperties(path, properties)
#FIXME fin revoir -----
self.context().cfgimpl_reset_cache()
self._getcontext().cfgimpl_reset_cache()
#____________________________________________________________
def validate_properties(self, opt_or_descr, is_descr, is_write, path,
@ -462,7 +471,7 @@ class Settings(object):
properties -= frozenset(('mandatory', 'frozen'))
else:
if 'mandatory' in properties and \
not self.context().cfgimpl_get_values()._isempty(
not self._getcontext().cfgimpl_get_values()._isempty(
opt_or_descr, value):
properties.remove('mandatory')
if is_write and 'everything_frozen' in self_properties:
@ -585,6 +594,8 @@ class Settings(object):
# filters the callbacks
calc_properties = set()
<<<<<<< HEAD
context = self._getcontext()
for require in opt.impl_getrequires():
expected = tuple(require.get_expected())
inverse = require.inverse
@ -596,7 +607,7 @@ class Settings(object):
" '{0}' with requirement on: "
"'{1}'").format(path, reqpath))
try:
value = self.context()._getattr(reqpath,
value = context._getattr(reqpath,
force_permissive=True)
except PropertiesOptionError as err:
if not require.transitive:
@ -625,7 +636,7 @@ class Settings(object):
:param opt: `Option`'s object
:returns: path
"""
return self.context().cfgimpl_get_description().impl_get_path_by_opt(opt)
return self._getcontext().cfgimpl_get_description().impl_get_path_by_opt(opt)
def get_modified_properties(self):
return self._p_.get_modified_properties()

View File

@ -46,13 +46,24 @@ class Values(object):
# the storage type is dictionary or sqlite3
self._p_ = storage
def _getcontext(self):
"""context could be None, we need to test it
context is None only if all reference to `Config` object is deleted
(for example we delete a `Config` and we manipulate a reference to
old `SubConfig`, `Values`, `Multi` or `Settings`)
"""
context = self.context()
if context is None:
raise ConfigError(_('the context does not exist anymore'))
return context
def _getdefault(self, opt):
"""
actually retrieves the default value
:param opt: the `option.Option()` object
"""
meta = self.context().cfgimpl_get_meta()
meta = self._getcontext().cfgimpl_get_meta()
if meta is not None:
value = meta.cfgimpl_get_values()[opt]
else:
@ -105,11 +116,11 @@ class Values(object):
if path is None:
path = self._get_opt_path(opt)
if self._p_.hasvalue(path):
setting = self.context().cfgimpl_get_settings()
context = self._getcontext()
setting = context.cfgimpl_get_settings()
opt.impl_validate(opt.impl_getdefault(),
self.context(),
'validator' in setting)
self.context().cfgimpl_reset_cache()
context, 'validator' in setting)
context.cfgimpl_reset_cache()
if (opt.impl_is_multi() and
opt.impl_get_multitype() == multitypes.master):
for slave in opt.impl_get_master_slaves():
@ -137,7 +148,7 @@ class Values(object):
callback, callback_params = opt.impl_get_callback()
if callback_params is None:
callback_params = {}
return carry_out_calculation(opt, config=self.context(),
return carry_out_calculation(opt, config=self._getcontext(),
callback=callback,
callback_params=callback_params,
index=index, max_len=max_len)
@ -151,7 +162,7 @@ class Values(object):
if path is None:
path = self._get_opt_path(opt)
ntime = None
setting = self.context().cfgimpl_get_settings()
setting = self._getcontext().cfgimpl_get_settings()
if 'cache' in setting and self._p_.hascache(path):
if 'expire' in setting:
ntime = int(time())
@ -176,7 +187,8 @@ class Values(object):
def _getitem(self, opt, path, validate, force_permissive, force_properties,
validate_properties):
# options with callbacks
setting = self.context().cfgimpl_get_settings()
context = self._getcontext()
setting = context.cfgimpl_get_settings()
is_frozen = 'frozen' in setting[opt]
# For calculating properties, we need value (ie for mandatory value).
# If value is calculating with a PropertiesOptionError's option
@ -196,7 +208,7 @@ class Values(object):
if (opt.impl_is_multi() and
opt.impl_get_multitype() == multitypes.slave):
masterp = self._get_opt_path(opt.impl_get_master_slaves())
mastervalue = getattr(self.context(), masterp)
mastervalue = getattr(context, masterp)
lenmaster = len(mastervalue)
if lenmaster == 0:
value = []
@ -230,7 +242,7 @@ class Values(object):
else:
value = self._getvalue(opt, path, validate)
if config_error is None and validate:
opt.impl_validate(value, self.context(), 'validator' in setting)
opt.impl_validate(value, context, 'validator' in setting)
if config_error is None and self._is_default_owner(path) and \
'force_store_value' in setting[opt]:
self.setitem(opt, value, path, is_write=False)
@ -251,8 +263,9 @@ class Values(object):
# is_write is, for example, used with "force_store_value"
# user didn't change value, so not write
# valid opt
opt.impl_validate(value, self.context(),
'validator' in self.context().cfgimpl_get_settings())
context = self._getcontext()
opt.impl_validate(value, context,
'validator' in context.cfgimpl_get_settings())
if opt.impl_is_multi() and not isinstance(value, Multi):
value = Multi(value, self.context, opt, path, setitem=True)
self._setvalue(opt, path, value, force_permissive=force_permissive,
@ -261,14 +274,15 @@ class Values(object):
def _setvalue(self, opt, path, value, force_permissive=False,
force_properties=None,
is_write=True, validate_properties=True):
self.context().cfgimpl_reset_cache()
context = self._getcontext()
context.cfgimpl_reset_cache()
if validate_properties:
setting = self.context().cfgimpl_get_settings()
setting = context.cfgimpl_get_settings()
setting.validate_properties(opt, False, is_write,
value=value, path=path,
force_permissive=force_permissive,
force_properties=force_properties)
owner = self.context().cfgimpl_get_settings().getowner()
owner = context.cfgimpl_get_settings().getowner()
self._p_.setvalue(path, value, owner)
def getowner(self, opt):
@ -285,7 +299,7 @@ class Values(object):
def _getowner(self, path):
owner = self._p_.getowner(path, owners.default)
meta = self.context().cfgimpl_get_meta()
meta = self._getcontext().cfgimpl_get_meta()
if owner is owners.default and meta is not None:
owner = meta.cfgimpl_get_values()._getowner(path)
return owner
@ -337,7 +351,7 @@ class Values(object):
:param opt: the `option.Option` object
:returns: a string with points like "gc.dummy.my_option"
"""
return self.context().cfgimpl_get_description().impl_get_path_by_opt(opt)
return self._getcontext().cfgimpl_get_description().impl_get_path_by_opt(opt)
# information
def set_information(self, key, value):
@ -402,12 +416,24 @@ class Multi(list):
self._valid_master(value)
super(Multi, self).__init__(value)
def _getcontext(self):
"""context could be None, we need to test it
context is None only if all reference to `Config` object is deleted
(for example we delete a `Config` and we manipulate a reference to
old `SubConfig`, `Values`, `Multi` or `Settings`)
"""
context = self.context()
if context is None:
raise ConfigError(_('the context does not exist anymore'))
return context
def _valid_slave(self, value, setitem):
#if slave, had values until master's one
values = self.context().cfgimpl_get_values()
masterp = self.context().cfgimpl_get_description().impl_get_path_by_opt(
context = self._getcontext()
values = context.cfgimpl_get_values()
masterp = context.cfgimpl_get_description().impl_get_path_by_opt(
self.opt.impl_get_master_slaves())
mastervalue = getattr(self.context(), masterp)
mastervalue = getattr(context, masterp)
masterlen = len(mastervalue)
valuelen = len(value)
is_default_owner = not values._is_default_owner(self.path) or setitem
@ -431,7 +457,7 @@ class Multi(list):
def _valid_master(self, value):
masterlen = len(value)
values = self.context().cfgimpl_get_values()
values = self._getcontext().cfgimpl_get_values()
for slave in self.opt._master_slaves:
path = values._get_opt_path(slave)
if not values._is_default_owner(path):
@ -458,18 +484,19 @@ class Multi(list):
self._validate(value, index)
#assume not checking mandatory property
super(Multi, self).__setitem__(index, value)
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
def append(self, value=undefined, force=False):
"""the list value can be updated (appened)
only if the option is a master
"""
context = self._getcontext()
if not force:
if self.opt.impl_get_multitype() == multitypes.slave:
raise SlaveError(_("cannot append a value on a multi option {0}"
" which is a slave").format(self.opt.impl_getname()))
elif self.opt.impl_get_multitype() == multitypes.master:
values = self.context().cfgimpl_get_values()
values = context.cfgimpl_get_values()
if value is undefined and self.opt.impl_has_callback():
value = values._getcallback_value(self.opt)
#Force None il return a list
@ -480,9 +507,9 @@ class Multi(list):
value = self.opt.impl_getdefault_multi()
self._validate(value, index)
super(Multi, self).append(value)
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path,
self,
validate_properties=not force)
context.cfgimpl_get_values()._setvalue(self.opt, self.path,
self,
validate_properties=not force)
if not force and self.opt.impl_get_multitype() == multitypes.master:
for slave in self.opt.impl_get_master_slaves():
path = values._get_opt_path(slave)
@ -513,7 +540,7 @@ class Multi(list):
super(Multi, self).sort(key=key, reverse=reverse)
else:
super(Multi, self).sort(cmp=cmp, key=key, reverse=reverse)
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
def reverse(self):
if self.opt.impl_get_multitype() in [multitypes.slave,
@ -521,7 +548,7 @@ class Multi(list):
raise SlaveError(_("cannot reverse multi option {0} if master or "
"slave").format(self.opt.impl_getname()))
super(Multi, self).reverse()
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
def insert(self, index, obj):
if self.opt.impl_get_multitype() in [multitypes.slave,
@ -529,7 +556,7 @@ class Multi(list):
raise SlaveError(_("cannot insert multi option {0} if master or "
"slave").format(self.opt.impl_getname()))
super(Multi, self).insert(index, obj)
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
def extend(self, iterable):
if self.opt.impl_get_multitype() in [multitypes.slave,
@ -537,12 +564,12 @@ class Multi(list):
raise SlaveError(_("cannot extend multi option {0} if master or "
"slave").format(self.opt.impl_getname()))
super(Multi, self).extend(iterable)
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self)
def _validate(self, value, force_index):
if value is not None:
try:
self.opt.impl_validate(value, context=self.context(),
self.opt.impl_validate(value, context=self._getcontext(),
force_index=force_index)
except ValueError as err:
raise ValueError(_("invalid value {0} "
@ -560,13 +587,14 @@ class Multi(list):
:type force: boolean
:returns: item at index
"""
context = self._getcontext()
if not force:
if self.opt.impl_get_multitype() == multitypes.slave:
raise SlaveError(_("cannot pop a value on a multi option {0}"
" which is a slave").format(self.opt.impl_getname()))
elif self.opt.impl_get_multitype() == multitypes.master:
for slave in self.opt.impl_get_master_slaves():
values = self.context().cfgimpl_get_values()
values = context.cfgimpl_get_values()
if not values.is_default_owner(slave):
#get multi without valid properties
values.getitem(slave,
@ -574,5 +602,5 @@ class Multi(list):
).pop(index, force=True)
#set value without valid properties
ret = super(Multi, self).pop(index)
self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self, validate_properties=not force)
context.cfgimpl_get_values()._setvalue(self.opt, self.path, self, validate_properties=not force)
return ret

View File

@ -1,31 +1,26 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-30 22:49+CEST\n"
"POT-Creation-Date: 2014-01-25 11:30+CET\n"
"PO-Revision-Date: \n"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: tiramisu/autolib.py:145
#: tiramisu/autolib.py:159
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:154
msgid ""
"unable to carry out a calculation, option value with multi types must have "
"same length for: {0}"
msgstr ""
"impossible d'effectuer le calcul, la valeur d'une option avec le type multi "
"doit avoir la même longueur pour : {0}"
#: tiramisu/config.py:52
msgid "descr must be an optiondescription, not {0}"
msgstr "descr doit être une optiondescription pas un {0}"
@ -34,72 +29,77 @@ msgstr "descr doit être une optiondescription pas un {0}"
msgid "unknown group_type: {0}"
msgstr "group_type inconnu: {0}"
#: tiramisu/config.py:163
#: tiramisu/config.py:166 tiramisu/setting.py:339 tiramisu/value.py:57
#: tiramisu/value.py:427
msgid "the context does not exist anymore"
msgstr "le context n'existe plus"
#: tiramisu/config.py:171
msgid ""
"no option description found for this config (may be metaconfig without meta)"
msgstr ""
"pas d'option description trouvé pour cette config (peut être une metaconfig "
"sans meta)"
#: tiramisu/config.py:189
#: tiramisu/config.py:197
msgid "can't assign to an OptionDescription"
msgstr "ne peut pas attribuer une valeur à une OptionDescription"
#: tiramisu/config.py:320
#: tiramisu/config.py:330
msgid "unknown type_ type {0}for _find"
msgstr "type_ type {0} pour _find inconnu"
#: tiramisu/config.py:359
#: tiramisu/config.py:369
msgid "no option found in config with these criteria"
msgstr "aucune option trouvée dans la config avec ces critères"
#: tiramisu/config.py:409
#: tiramisu/config.py:419
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:430
#: tiramisu/config.py:440
msgid "unexpected path {0}, should start with {1}"
msgstr "chemin imprévu {0}, devrait commencer par {1}"
#: tiramisu/config.py:490
#: tiramisu/config.py:500
msgid "opt in getowner must be an option not {0}"
msgstr "opt dans getowner doit être une option pas {0}"
#: tiramisu/option.py:69
#: tiramisu/option.py:67
msgid "invalid name: {0} for option"
msgstr "nom invalide : {0} pour l'option"
#: tiramisu/option.py:78
#: tiramisu/option.py:76
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:116
#: tiramisu/option.py:114
msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
#: tiramisu/option.py:143 tiramisu/value.py:362
#: tiramisu/option.py:141 tiramisu/value.py:376
msgid "information's item not found: {0}"
msgstr "aucune config spécifié alors que c'est nécessaire"
#: tiramisu/option.py:205
#: tiramisu/option.py:203
msgid "cannot serialize Option, only in OptionDescription"
msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
#: tiramisu/option.py:308
#: tiramisu/option.py:306
msgid "a default_multi is set whereas multi is False in option: {0}"
msgstr ""
"une default_multi est renseignée alors que multi est False dans l'option : "
"{0}"
#: tiramisu/option.py:314
#: tiramisu/option.py:312
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:319
#: tiramisu/option.py:317
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.py:322
#: tiramisu/option.py:320
msgid ""
"params defined for a callback function but no callback defined yet for "
"option {0}"
@ -107,72 +107,72 @@ msgstr ""
"params définis pour une fonction callback mais par de callback encore "
"définis pour l'option {0}"
#: tiramisu/option.py:361
#: tiramisu/option.py:359
msgid "option not in all_cons_opts"
msgstr "option non présentante dans all_cons_opts"
#: tiramisu/option.py:427 tiramisu/option.py:437
#: tiramisu/option.py:425 tiramisu/option.py:435
msgid "invalid value for option {0}: {1}"
msgstr "valeur invalide pour l'option {0} : {1}"
#: tiramisu/option.py:454
msgid ""invalid value {0} for option {1} which must be a list"
#: tiramisu/option.py:452
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.py:514
#: tiramisu/option.py:508
msgid "consistency should be set with an option"
msgstr "consistency doit être configuré avec une option"
#: tiramisu/option.py:516
#: tiramisu/option.py:510
msgid "cannot add consistency with itself"
msgstr "ne peut ajouter une consistency avec lui même"
#: tiramisu/option.py:518
#: tiramisu/option.py:512
msgid "every options in consistency should be multi or none"
msgstr ""
"toutes les options d'une consistency devrait être multi ou ne pas l'être"
#: tiramisu/option.py:538
#: tiramisu/option.py:532
msgid "same value for {0} and {1}"
msgstr "même valeur pour {0} et {1}"
#: tiramisu/option.py:647
#: tiramisu/option.py:641
msgid "values must be a tuple for {0}"
msgstr "values doit être un tuple pour {0}"
#: tiramisu/option.py:650
#: tiramisu/option.py:644
msgid "open_values must be a boolean for {0}"
msgstr "open_values doit être un booléen pour {0}"
#: tiramisu/option.py:672
#: tiramisu/option.py:666
msgid "value {0} is not permitted, only {1} is allowed"
msgstr "valeur {0} n'est pas permis, seules {1} sont autorisées"
#: tiramisu/option.py:684
#: tiramisu/option.py:678
msgid "invalid boolean"
msgstr "booléen invalide"
#: tiramisu/option.py:694
#: tiramisu/option.py:688
msgid "invalid integer"
msgstr "nombre invalide"
#: tiramisu/option.py:704
#: tiramisu/option.py:698
msgid "invalid float"
msgstr "invalide nombre flottan"
#: tiramisu/option.py:714
#: tiramisu/option.py:708
msgid "invalid string"
msgstr "invalide caractère"
#: tiramisu/option.py:731
#: tiramisu/option.py:725
msgid "invalid unicode"
msgstr "invalide unicode"
#: tiramisu/option.py:743
#: tiramisu/option.py:737
msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
#: tiramisu/option.py:792
#: tiramisu/option.py:787 tiramisu/option.py:792
msgid "invalid IP"
msgstr "adresse IP invalide"
@ -209,12 +209,12 @@ msgid "invalid len for opts"
msgstr "longueur invalide pour opts"
#: tiramisu/option.py:927
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"
msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP"
msgstr "réseau invalide {0} ({1}) avec masque {2}, ce réseau est une IP"
#: tiramisu/option.py:932
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"
msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
msgstr "IP invalide {0} ({1}) avec masque {2}, cette IP est un réseau"
#: tiramisu/option.py:937
msgid "invalid IP {0} ({1}) with netmask {2}"
@ -250,107 +250,108 @@ msgstr "allow_ip doit être un booléen"
msgid "allow_without_dot must be a boolean"
msgstr "allow_without_dot doit être un booléen"
#: tiramisu/option.py:1024
#: tiramisu/option.py:1028
msgid "invalid domainname, must have dot"
msgstr "nom de domaine invalide, doit avoir un point"
#: tiramisu/option.py:1026
#: tiramisu/option.py:1030
msgid "invalid domainname's length (max 255)"
msgstr "longueur du nom de domaine invalide (maximum {1})"
#: tiramisu/option.py:1028
#: tiramisu/option.py:1032
msgid "invalid domainname's length (min 2)"
msgstr "longueur du nom de domaine invalide (minimum 2)"
#: tiramisu/option.py:1030
#: tiramisu/option.py:1034
msgid "invalid domainname"
msgstr "nom de domaine invalide"
#: tiramisu/option.py:1049
#: tiramisu/option.py:1047
msgid "invalid email address, should contains one @"
msgstr "adresse email invalide, devrait contenir un @"
#: tiramisu/option.py:1052
#: tiramisu/option.py:1050
msgid "invalid username in email address"
msgstr "nom d'utilisateur invalide dans une adresse email"
#: tiramisu/option.py:1071
#: tiramisu/option.py:1063
msgid "invalid url, should start with http:// or https://"
msgstr "URL invalide, devrait démarré avec http:// ou https://"
#: tiramisu/option.py:1090
#: tiramisu/option.py:1082
msgid "invalid url, port must be an between 0 and 65536"
msgstr "URL invalide, port doit être entre 0 et 65536"
#: tiramisu/option.py:1096
#, fuzzy
#: tiramisu/option.py:1088
msgid "invalid url, should ends with filename"
msgstr "URL invalide, devrait finir avec un nom de fichier"
#: tiramisu/option.py:1107
#: tiramisu/option.py:1099
msgid "invalid filename"
msgstr "nom de fichier invalide"
#: tiramisu/option.py:1134
#: tiramisu/option.py:1126
msgid "duplicate option name: {0}"
msgstr "nom de l'option dupliqué : {0}"
#: tiramisu/option.py:1152
#: tiramisu/option.py:1144
msgid "unknown Option {0} in OptionDescription {1}"
msgstr "Option {0} inconnue pour l'OptionDescription {1}"
#: tiramisu/option.py:1203
#: tiramisu/option.py:1195
msgid "duplicate option: {0}"
msgstr "option dupliquée : {0}"
#: tiramisu/option.py:1233
#: tiramisu/option.py:1225
msgid "consistency with option {0} which is not in Config"
msgstr "consistency avec l'option {0} qui n'est pas dans une Config"
#: tiramisu/option.py:1241
#: tiramisu/option.py:1233
msgid "no option for path {0}"
msgstr "pas d'option pour le chemin {0}"
#: tiramisu/option.py:1247
#: tiramisu/option.py:1239
msgid "no option {0} found"
msgstr "pas d'option {0} trouvée"
#: tiramisu/option.py:1257
#: tiramisu/option.py:1249
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:1270
#: tiramisu/option.py:1261
msgid "master group {0} shall not have a subgroup"
msgstr "groupe maître {0} ne doit pas avoir de sous-groupe"
#: tiramisu/option.py:1273
#: tiramisu/option.py:1264
msgid "master group {0} shall not have a symlinkoption"
msgstr "groupe maître {0} ne doit pas avoir de symlinkoption"
#: tiramisu/option.py:1276
#: tiramisu/option.py:1267
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:1287
#: tiramisu/option.py:1277
msgid "master group with wrong master name for {0}"
msgstr "le groupe maître avec un nom de maître érroné pour {0}"
#: tiramisu/option.py:1296
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:1285
msgid "callback of master's option shall not refered a slave's ones"
msgstr ""
"callback d'une variable maitre ne devrait pas référencer des variables "
"esclaves"
#: tiramisu/option.py:1299
#: tiramisu/option.py:1293
msgid "group_type: {0} not allowed"
msgstr "group_type : {0} non autorisé"
#: tiramisu/option.py:1391
#: tiramisu/option.py:1385
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:1408
#: tiramisu/option.py:1402
msgid ""
"malformed requirements for option: {0} require must have option, expected "
"and action keys"
@ -358,66 +359,66 @@ msgstr ""
"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
"option, expected et action"
#: tiramisu/option.py:1413
#: tiramisu/option.py:1407
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.py:1417
#: tiramisu/option.py:1411
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.py:1421
#: tiramisu/option.py:1415
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.py:1425
#: tiramisu/option.py:1419
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.py:1428
#: tiramisu/option.py:1422
msgid "malformed requirements option {0} should not be a multi"
msgstr "requirements mal formés l'option {0} ne doit pas être une multi"
#: tiramisu/option.py:1434
#: tiramisu/option.py:1428
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.py:1439
#: tiramisu/option.py:1433
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.py:1464
#: tiramisu/option.py:1458
msgid "{0} should be a function"
msgstr "{0} doit être une fonction"
#: tiramisu/option.py:1467
#: tiramisu/option.py:1461
msgid "{0}_params should be a dict"
msgstr "{0}_params devrait être un dict"
#: tiramisu/option.py:1470
#: tiramisu/option.py:1464
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:1474
#: tiramisu/option.py:1468
msgid "{0}_params should be tuple for key \"{1}\""
msgstr "{0}_params devrait être un tuple pour la clef \"{1}\""
#: tiramisu/option.py:1480
#: tiramisu/option.py:1474
msgid "validator not support tuple"
msgstr "validator n'accepte pas de tuple"
#: tiramisu/option.py:1483
#: tiramisu/option.py:1477
msgid "{0}_params should have an option not a {0} for first argument"
msgstr "{0}_params devrait avoir une option pas un {0} pour premier argument"
#: tiramisu/option.py:1487
#: tiramisu/option.py:1481
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"
@ -429,39 +430,39 @@ msgstr "ne peut redéfinir ({0})"
msgid "can't unbind {0}"
msgstr "ne peut supprimer ({0})"
#: tiramisu/setting.py:259
#: tiramisu/setting.py:272
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:322
#: tiramisu/setting.py:363
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:337
#: tiramisu/setting.py:378
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:440
#: tiramisu/setting.py:483
msgid "cannot change the value for option {0} this option is frozen"
msgstr ""
"ne peut modifier la valeur de l'option {0} cette option n'est pas modifiable"
#: tiramisu/setting.py:446
#: tiramisu/setting.py:489
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:464
#: tiramisu/setting.py:507
msgid "permissive must be a tuple"
msgstr "permissive doit être un tuple"
#: tiramisu/setting.py:471 tiramisu/value.py:301
#: tiramisu/setting.py:514 tiramisu/value.py:315
msgid "invalid generic owner {0}"
msgstr "invalide owner générique {0}"
#: tiramisu/setting.py:558
#: tiramisu/setting.py:602
msgid ""
"malformed requirements imbrication detected for option: '{0}' with "
"requirement on: '{1}'"
@ -469,7 +470,7 @@ msgstr ""
"imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
"requirement sur : '{1}'"
#: tiramisu/setting.py:570
#: tiramisu/setting.py:613
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}"
@ -494,52 +495,62 @@ msgstr "session déjà utilisée"
msgid "a dictionary cannot be persistent"
msgstr "un espace de stockage dictionary ne peut être persistant"
#: tiramisu/value.py:308
#: tiramisu/value.py:322
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:416
#: tiramisu/value.py:442
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:440
#: tiramisu/value.py:466
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:470
#: tiramisu/value.py:496
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:507
#: tiramisu/value.py:535
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:511
#: tiramisu/value.py:539
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:520
#: tiramisu/value.py:548
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:528
#: tiramisu/value.py:556
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:536
#: tiramisu/value.py:564
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:547
#: tiramisu/value.py:575
msgid "invalid value {0} for option {1}: {2}"
msgstr "valeur invalide {0} pour l'option {1} : {2}"
#: tiramisu/value.py:564
#: tiramisu/value.py:593
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 ""
#~ "unable to carry out a calculation, option value with multi types must "
#~ "have same length for: {0}"
#~ msgstr ""
#~ "impossible d'effectuer le calcul, la valeur d'une option avec le type "
#~ "multi doit avoir la même longueur pour : {0}"
#~ msgid "no child has same nom has master group for: {0}"
#~ msgstr "pas d'enfant avec le nom du groupe maître pour {0} "
#~ msgid "value must be a boolean"
#~ msgstr "valeur doit être un booléen"
@ -555,9 +566,6 @@ msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"
#~ msgid "value must be an unicode"
#~ msgstr "valeur doit être une valeur unicode"
#~ 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"
#~ msgid "invalid value {0} for option {1} must be different as {2} option"
#~ msgstr ""
#~ "valeur invalide {0} pour l'option {1} doit être différente de l'option {2}"

View File

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2013-09-30 22:49+CEST\n"
"POT-Creation-Date: 2014-01-25 11:30+CET\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,14 +15,10 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
#: tiramisu/autolib.py:145
#: tiramisu/autolib.py:159
msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
msgstr ""
#: tiramisu/autolib.py:154
msgid "unable to carry out a calculation, option value with multi types must have same length for: {0}"
msgstr ""
#: tiramisu/config.py:52
msgid "descr must be an optiondescription, not {0}"
msgstr ""
@ -31,135 +27,140 @@ msgstr ""
msgid "unknown group_type: {0}"
msgstr ""
#: tiramisu/config.py:163
#: tiramisu/config.py:166 tiramisu/setting.py:339 tiramisu/value.py:57
#: tiramisu/value.py:427
msgid "the context does not exist anymore"
msgstr ""
#: tiramisu/config.py:171
msgid "no option description found for this config (may be metaconfig without meta)"
msgstr ""
#: tiramisu/config.py:189
#: tiramisu/config.py:197
msgid "can't assign to an OptionDescription"
msgstr ""
#: tiramisu/config.py:320
#: tiramisu/config.py:330
msgid "unknown type_ type {0}for _find"
msgstr ""
#: tiramisu/config.py:359
#: tiramisu/config.py:369
msgid "no option found in config with these criteria"
msgstr ""
#: tiramisu/config.py:409
#: tiramisu/config.py:419
msgid "make_dict can't filtering with value without option"
msgstr ""
#: tiramisu/config.py:430
#: tiramisu/config.py:440
msgid "unexpected path {0}, should start with {1}"
msgstr ""
#: tiramisu/config.py:490
#: tiramisu/config.py:500
msgid "opt in getowner must be an option not {0}"
msgstr ""
#: tiramisu/option.py:69
#: tiramisu/option.py:67
msgid "invalid name: {0} for option"
msgstr ""
#: tiramisu/option.py:78
#: tiramisu/option.py:76
msgid "invalid properties type {0} for {1}, must be a tuple"
msgstr ""
#: tiramisu/option.py:116
#: tiramisu/option.py:114
msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr ""
#: tiramisu/option.py:143 tiramisu/value.py:362
#: tiramisu/option.py:141 tiramisu/value.py:376
msgid "information's item not found: {0}"
msgstr ""
#: tiramisu/option.py:205
#: tiramisu/option.py:203
msgid "cannot serialize Option, only in OptionDescription"
msgstr ""
#: tiramisu/option.py:308
#: tiramisu/option.py:306
msgid "a default_multi is set whereas multi is False in option: {0}"
msgstr ""
#: tiramisu/option.py:314
#: tiramisu/option.py:312
msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr ""
#: tiramisu/option.py:319
#: tiramisu/option.py:317
msgid "default value not allowed if option: {0} is calculated"
msgstr ""
#: tiramisu/option.py:322
#: tiramisu/option.py:320
msgid "params defined for a callback function but no callback defined yet for option {0}"
msgstr ""
#: tiramisu/option.py:361
#: tiramisu/option.py:359
msgid "option not in all_cons_opts"
msgstr ""
#: tiramisu/option.py:427 tiramisu/option.py:437
#: tiramisu/option.py:425 tiramisu/option.py:435
msgid "invalid value for option {0}: {1}"
msgstr ""
#: tiramisu/option.py:454
msgid "which must be a list"
#: tiramisu/option.py:452
msgid "invalid value {0} for option {1} which must be a list"
msgstr ""
#: tiramisu/option.py:514
#: tiramisu/option.py:508
msgid "consistency should be set with an option"
msgstr ""
#: tiramisu/option.py:516
#: tiramisu/option.py:510
msgid "cannot add consistency with itself"
msgstr ""
#: tiramisu/option.py:518
#: tiramisu/option.py:512
msgid "every options in consistency should be multi or none"
msgstr ""
#: tiramisu/option.py:538
#: tiramisu/option.py:532
msgid "same value for {0} and {1}"
msgstr ""
#: tiramisu/option.py:647
#: tiramisu/option.py:641
msgid "values must be a tuple for {0}"
msgstr ""
#: tiramisu/option.py:650
#: tiramisu/option.py:644
msgid "open_values must be a boolean for {0}"
msgstr ""
#: tiramisu/option.py:672
#: tiramisu/option.py:666
msgid "value {0} is not permitted, only {1} is allowed"
msgstr ""
#: tiramisu/option.py:684
#: tiramisu/option.py:678
msgid "invalid boolean"
msgstr ""
#: tiramisu/option.py:694
#: tiramisu/option.py:688
msgid "invalid integer"
msgstr ""
#: tiramisu/option.py:704
#: tiramisu/option.py:698
msgid "invalid float"
msgstr ""
#: tiramisu/option.py:714
#: tiramisu/option.py:708
msgid "invalid string"
msgstr ""
#: tiramisu/option.py:731
#: tiramisu/option.py:725
msgid "invalid unicode"
msgstr ""
#: tiramisu/option.py:743
#: tiramisu/option.py:737
msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr ""
#: tiramisu/option.py:792
#: tiramisu/option.py:787 tiramisu/option.py:792
msgid "invalid IP"
msgstr ""
@ -196,11 +197,11 @@ msgid "invalid len for opts"
msgstr ""
#: tiramisu/option.py:927
msgid "invalid network {0} ({1}) with netmask {2} ({3}), this network is an IP"
msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP"
msgstr ""
#: tiramisu/option.py:932
msgid "invalid IP {0} ({1}) with netmask {2} ({3}), this IP is a network"
msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network"
msgstr ""
#: tiramisu/option.py:937
@ -235,159 +236,159 @@ msgstr ""
msgid "allow_without_dot must be a boolean"
msgstr ""
#: tiramisu/option.py:1024
#: tiramisu/option.py:1028
msgid "invalid domainname, must have dot"
msgstr ""
#: tiramisu/option.py:1026
#: tiramisu/option.py:1030
msgid "invalid domainname's length (max 255)"
msgstr ""
#: tiramisu/option.py:1028
#: tiramisu/option.py:1032
msgid "invalid domainname's length (min 2)"
msgstr ""
#: tiramisu/option.py:1030
#: tiramisu/option.py:1034
msgid "invalid domainname"
msgstr ""
#: tiramisu/option.py:1049
#: tiramisu/option.py:1047
msgid "invalid email address, should contains one @"
msgstr ""
#: tiramisu/option.py:1052
#: tiramisu/option.py:1050
msgid "invalid username in email address"
msgstr ""
#: tiramisu/option.py:1071
#: tiramisu/option.py:1063
msgid "invalid url, should start with http:// or https://"
msgstr ""
#: tiramisu/option.py:1090
#: tiramisu/option.py:1082
msgid "invalid url, port must be an between 0 and 65536"
msgstr ""
#: tiramisu/option.py:1096
#: tiramisu/option.py:1088
msgid "invalid url, should ends with filename"
msgstr ""
#: tiramisu/option.py:1107
#: tiramisu/option.py:1099
msgid "invalid filename"
msgstr ""
#: tiramisu/option.py:1134
#: tiramisu/option.py:1126
msgid "duplicate option name: {0}"
msgstr ""
#: tiramisu/option.py:1152
#: tiramisu/option.py:1144
msgid "unknown Option {0} in OptionDescription {1}"
msgstr ""
#: tiramisu/option.py:1203
#: tiramisu/option.py:1195
msgid "duplicate option: {0}"
msgstr ""
#: tiramisu/option.py:1233
#: tiramisu/option.py:1225
msgid "consistency with option {0} which is not in Config"
msgstr ""
#: tiramisu/option.py:1241
#: tiramisu/option.py:1233
msgid "no option for path {0}"
msgstr ""
#: tiramisu/option.py:1247
#: tiramisu/option.py:1239
msgid "no option {0} found"
msgstr ""
#: tiramisu/option.py:1257
#: tiramisu/option.py:1249
msgid "cannot change group_type if already set (old {0}, new {1})"
msgstr ""
#: tiramisu/option.py:1270
#: tiramisu/option.py:1261
msgid "master group {0} shall not have a subgroup"
msgstr ""
#: tiramisu/option.py:1273
#: tiramisu/option.py:1264
msgid "master group {0} shall not have a symlinkoption"
msgstr ""
#: tiramisu/option.py:1276
#: tiramisu/option.py:1267
msgid "not allowed option {0} in group {1}: this option is not a multi"
msgstr ""
#: tiramisu/option.py:1287
#: tiramisu/option.py:1277
msgid "master group with wrong master name for {0}"
msgstr ""
#: tiramisu/option.py:1296
msgid "no child has same nom has master group for: {0}"
#: tiramisu/option.py:1285
msgid "callback of master's option shall not refered a slave's ones"
msgstr ""
#: tiramisu/option.py:1299
#: tiramisu/option.py:1293
msgid "group_type: {0} not allowed"
msgstr ""
#: tiramisu/option.py:1391
#: tiramisu/option.py:1385
msgid "malformed requirements type for option: {0}, must be a dict"
msgstr ""
#: tiramisu/option.py:1408
#: tiramisu/option.py:1402
msgid "malformed requirements for option: {0} require must have option, expected and action keys"
msgstr ""
#: tiramisu/option.py:1413
#: tiramisu/option.py:1407
msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr ""
#: tiramisu/option.py:1417
#: tiramisu/option.py:1411
msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr ""
#: tiramisu/option.py:1421
#: tiramisu/option.py:1415
msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr ""
#: tiramisu/option.py:1425
#: tiramisu/option.py:1419
msgid "malformed requirements must be an option in option {0}"
msgstr ""
#: tiramisu/option.py:1428
#: tiramisu/option.py:1422
msgid "malformed requirements option {0} should not be a multi"
msgstr ""
#: tiramisu/option.py:1434
#: tiramisu/option.py:1428
msgid "malformed requirements second argument must be valid for option {0}: {1}"
msgstr ""
#: tiramisu/option.py:1439
#: tiramisu/option.py:1433
msgid "inconsistency in action types for option: {0} action: {1}"
msgstr ""
#: tiramisu/option.py:1464
#: tiramisu/option.py:1458
msgid "{0} should be a function"
msgstr ""
#: tiramisu/option.py:1467
#: tiramisu/option.py:1461
msgid "{0}_params should be a dict"
msgstr ""
#: tiramisu/option.py:1470
#: tiramisu/option.py:1464
msgid "{0}_params with key {1} should not have length different to 1"
msgstr ""
#: tiramisu/option.py:1474
#: tiramisu/option.py:1468
msgid "{0}_params should be tuple for key \"{1}\""
msgstr ""
#: tiramisu/option.py:1480
#: tiramisu/option.py:1474
msgid "validator not support tuple"
msgstr ""
#: tiramisu/option.py:1483
#: tiramisu/option.py:1477
msgid "{0}_params should have an option not a {0} for first argument"
msgstr ""
#: tiramisu/option.py:1487
#: tiramisu/option.py:1481
msgid "{0}_params should have a boolean not a {0} for second argument"
msgstr ""
@ -399,39 +400,39 @@ msgstr ""
msgid "can't unbind {0}"
msgstr ""
#: tiramisu/setting.py:259
#: tiramisu/setting.py:272
msgid "cannot append {0} property for option {1}: this property is calculated"
msgstr ""
#: tiramisu/setting.py:322
#: tiramisu/setting.py:363
msgid "opt and all_properties must not be set together in reset"
msgstr ""
#: tiramisu/setting.py:337
#: tiramisu/setting.py:378
msgid "if opt is not None, path should not be None in _getproperties"
msgstr ""
#: tiramisu/setting.py:440
#: tiramisu/setting.py:483
msgid "cannot change the value for option {0} this option is frozen"
msgstr ""
#: tiramisu/setting.py:446
#: tiramisu/setting.py:489
msgid "trying to access to an option named: {0} with properties {1}"
msgstr ""
#: tiramisu/setting.py:464
#: tiramisu/setting.py:507
msgid "permissive must be a tuple"
msgstr ""
#: tiramisu/setting.py:471 tiramisu/value.py:301
#: tiramisu/setting.py:514 tiramisu/value.py:315
msgid "invalid generic owner {0}"
msgstr ""
#: tiramisu/setting.py:558
#: tiramisu/setting.py:602
msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'"
msgstr ""
#: tiramisu/setting.py:570
#: tiramisu/setting.py:613
msgid "option '{0}' has requirement's property error: {1} {2}"
msgstr ""
@ -455,47 +456,47 @@ msgstr ""
msgid "a dictionary cannot be persistent"
msgstr ""
#: tiramisu/value.py:308
#: tiramisu/value.py:322
msgid "no value for {0} cannot change owner to {1}"
msgstr ""
#: tiramisu/value.py:416
#: tiramisu/value.py:442
msgid "invalid len for the slave: {0} which has {1} as master"
msgstr ""
#: tiramisu/value.py:440
#: tiramisu/value.py:466
msgid "invalid len for the master: {0} which has {1} as slave with greater len"
msgstr ""
#: tiramisu/value.py:470
#: tiramisu/value.py:496
msgid "cannot append a value on a multi option {0} which is a slave"
msgstr ""
#: tiramisu/value.py:507
#: tiramisu/value.py:535
msgid "cannot sort multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:511
#: tiramisu/value.py:539
msgid "cmp is not permitted in python v3 or greater"
msgstr ""
#: tiramisu/value.py:520
#: tiramisu/value.py:548
msgid "cannot reverse multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:528
#: tiramisu/value.py:556
msgid "cannot insert multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:536
#: tiramisu/value.py:564
msgid "cannot extend multi option {0} if master or slave"
msgstr ""
#: tiramisu/value.py:547
#: tiramisu/value.py:575
msgid "invalid value {0} for option {1}: {2}"
msgstr ""
#: tiramisu/value.py:564
#: tiramisu/value.py:593
msgid "cannot pop a value on a multi option {0} which is a slave"
msgstr ""