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.config import Config
from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \ from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \
BoolOption, UnicodeOption, OptionDescription BoolOption, UnicodeOption, OptionDescription
from tiramisu.error import ConflictError from tiramisu.error import ConflictError, ConfigError
def make_description(): def make_description():
@ -277,4 +277,24 @@ def test_no_validation():
setting.append('validator') setting.append('validator')
raises(ValueError, 'c.test1') raises(ValueError, 'c.test1')
del(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__ __repr__ = __str__
def _cfgimpl_get_context(self): 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): def cfgimpl_get_description(self):
if self._impl_descr is None: if self._impl_descr is None:

View file

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

View file

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

View file

@ -1,31 +1,26 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: \n"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\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" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\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 "" msgid ""
"unable to carry out a calculation, option {0} has properties: {1} for: {2}" "unable to carry out a calculation, option {0} has properties: {1} for: {2}"
msgstr "" msgstr ""
"impossible d'effectuer le calcul, l'option {0} a les propriétés : {1} pour : " "impossible d'effectuer le calcul, l'option {0} a les propriétés : {1} pour : "
"{2}" "{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 #: tiramisu/config.py:52
msgid "descr must be an optiondescription, not {0}" msgid "descr must be an optiondescription, not {0}"
msgstr "descr doit être une optiondescription pas un {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}" msgid "unknown group_type: {0}"
msgstr "group_type inconnu: {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 "" msgid ""
"no option description found for this config (may be metaconfig without meta)" "no option description found for this config (may be metaconfig without meta)"
msgstr "" msgstr ""
"pas d'option description trouvé pour cette config (peut être une metaconfig " "pas d'option description trouvé pour cette config (peut être une metaconfig "
"sans meta)" "sans meta)"
#: tiramisu/config.py:189 #: tiramisu/config.py:197
msgid "can't assign to an OptionDescription" msgid "can't assign to an OptionDescription"
msgstr "ne peut pas attribuer une valeur à une 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" msgid "unknown type_ type {0}for _find"
msgstr "type_ type {0} pour _find inconnu" msgstr "type_ type {0} pour _find inconnu"
#: tiramisu/config.py:359 #: tiramisu/config.py:369
msgid "no option found in config with these criteria" msgid "no option found in config with these criteria"
msgstr "aucune option trouvée dans la config avec ces critères" 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" msgid "make_dict can't filtering with value without option"
msgstr "make_dict ne peut filtrer sur une valeur mais sans 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}" msgid "unexpected path {0}, should start with {1}"
msgstr "chemin imprévu {0}, devrait commencer par {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}" msgid "opt in getowner must be an option not {0}"
msgstr "opt dans getowner doit être une option pas {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" msgid "invalid name: {0} for option"
msgstr "nom invalide : {0} pour l'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" msgid "invalid properties type {0} for {1}, must be a tuple"
msgstr "type des properties invalide {0} pour {1}, doit être un tuple" msgstr "type des properties invalide {0} pour {1}, doit être un tuple"
#: tiramisu/option.py:116 #: tiramisu/option.py:114
msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgid "'{0}' ({1}) object attribute '{2}' is read-only"
msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule" msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
#: tiramisu/option.py:143 tiramisu/value.py:362 #: tiramisu/option.py:141 tiramisu/value.py:376
msgid "information's item not found: {0}" msgid "information's item not found: {0}"
msgstr "aucune config spécifié alors que c'est nécessaire" 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" msgid "cannot serialize Option, only in OptionDescription"
msgstr "ne peut serialiser une Option, seulement via une OptionDescription" msgstr "ne peut serialiser une Option, seulement via une OptionDescription"
#: tiramisu/option.py:308 #: tiramisu/option.py:306
msgid "a default_multi is set whereas multi is False in option: {0}" msgid "a default_multi is set whereas multi is False in option: {0}"
msgstr "" msgstr ""
"une default_multi est renseignée alors que multi est False dans l'option : " "une default_multi est renseignée alors que multi est False dans l'option : "
"{0}" "{0}"
#: tiramisu/option.py:314 #: tiramisu/option.py:312
msgid "invalid default_multi value {0} for option {1}: {2}" msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr "la valeur default_multi est invalide {0} pour l'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" msgid "default value not allowed if option: {0} is calculated"
msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée" msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée"
#: tiramisu/option.py:322 #: tiramisu/option.py:320
msgid "" msgid ""
"params defined for a callback function but no callback defined yet for " "params defined for a callback function but no callback defined yet for "
"option {0}" "option {0}"
@ -107,72 +107,72 @@ msgstr ""
"params définis pour une fonction callback mais par de callback encore " "params définis pour une fonction callback mais par de callback encore "
"définis pour l'option {0}" "définis pour l'option {0}"
#: tiramisu/option.py:361 #: tiramisu/option.py:359
msgid "option not in all_cons_opts" msgid "option not in all_cons_opts"
msgstr "option non présentante dans 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}" msgid "invalid value for option {0}: {1}"
msgstr "valeur invalide pour l'option {0} : {1}" msgstr "valeur invalide pour l'option {0} : {1}"
#: tiramisu/option.py:454 #: tiramisu/option.py:452
msgid ""invalid value {0} for option {1} which must be a list" msgid "invalid value {0} for option {1} which must be a list"
msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste" msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste"
#: tiramisu/option.py:514 #: tiramisu/option.py:508
msgid "consistency should be set with an option" msgid "consistency should be set with an option"
msgstr "consistency doit être configuré avec une option" msgstr "consistency doit être configuré avec une option"
#: tiramisu/option.py:516 #: tiramisu/option.py:510
msgid "cannot add consistency with itself" msgid "cannot add consistency with itself"
msgstr "ne peut ajouter une consistency avec lui même" msgstr "ne peut ajouter une consistency avec lui même"
#: tiramisu/option.py:518 #: tiramisu/option.py:512
msgid "every options in consistency should be multi or none" msgid "every options in consistency should be multi or none"
msgstr "" msgstr ""
"toutes les options d'une consistency devrait être multi ou ne pas l'être" "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}" msgid "same value for {0} and {1}"
msgstr "même valeur pour {0} et {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}" msgid "values must be a tuple for {0}"
msgstr "values doit être un tuple pour {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}" msgid "open_values must be a boolean for {0}"
msgstr "open_values doit être un booléen pour {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" msgid "value {0} is not permitted, only {1} is allowed"
msgstr "valeur {0} n'est pas permis, seules {1} sont autorisées" msgstr "valeur {0} n'est pas permis, seules {1} sont autorisées"
#: tiramisu/option.py:684 #: tiramisu/option.py:678
msgid "invalid boolean" msgid "invalid boolean"
msgstr "booléen invalide" msgstr "booléen invalide"
#: tiramisu/option.py:694 #: tiramisu/option.py:688
msgid "invalid integer" msgid "invalid integer"
msgstr "nombre invalide" msgstr "nombre invalide"
#: tiramisu/option.py:704 #: tiramisu/option.py:698
msgid "invalid float" msgid "invalid float"
msgstr "invalide nombre flottan" msgstr "invalide nombre flottan"
#: tiramisu/option.py:714 #: tiramisu/option.py:708
msgid "invalid string" msgid "invalid string"
msgstr "invalide caractère" msgstr "invalide caractère"
#: tiramisu/option.py:731 #: tiramisu/option.py:725
msgid "invalid unicode" msgid "invalid unicode"
msgstr "invalide unicode" msgstr "invalide unicode"
#: tiramisu/option.py:743 #: tiramisu/option.py:737
msgid "malformed symlinkoption must be an option for symlink {0}" msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "symlinkoption mal formé, doit être une option pour symlink {0}" msgstr "symlinkoption mal formé, doit être une option pour symlink {0}"
#: tiramisu/option.py:792 #: tiramisu/option.py:787 tiramisu/option.py:792
msgid "invalid IP" msgid "invalid IP"
msgstr "adresse IP invalide" msgstr "adresse IP invalide"
@ -209,12 +209,12 @@ msgid "invalid len for opts"
msgstr "longueur invalide pour opts" msgstr "longueur invalide pour opts"
#: tiramisu/option.py:927 #: 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 "réseau invalide {0} ({1}) avec masque {2} ({3}), ce réseau est une IP" msgstr "réseau invalide {0} ({1}) avec masque {2}, ce réseau est une IP"
#: tiramisu/option.py:932 #: 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 "IP invalide {0} ({1}) avec masque {2} ({3}), cette IP est un réseau" msgstr "IP invalide {0} ({1}) avec masque {2}, cette IP est un réseau"
#: tiramisu/option.py:937 #: tiramisu/option.py:937
msgid "invalid IP {0} ({1}) with netmask {2}" 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" msgid "allow_without_dot must be a boolean"
msgstr "allow_without_dot doit être un booléen" msgstr "allow_without_dot doit être un booléen"
#: tiramisu/option.py:1024 #: tiramisu/option.py:1028
msgid "invalid domainname, must have dot" msgid "invalid domainname, must have dot"
msgstr "nom de domaine invalide, doit avoir un point" msgstr "nom de domaine invalide, doit avoir un point"
#: tiramisu/option.py:1026 #: tiramisu/option.py:1030
msgid "invalid domainname's length (max 255)" msgid "invalid domainname's length (max 255)"
msgstr "longueur du nom de domaine invalide (maximum {1})" msgstr "longueur du nom de domaine invalide (maximum {1})"
#: tiramisu/option.py:1028 #: tiramisu/option.py:1032
msgid "invalid domainname's length (min 2)" msgid "invalid domainname's length (min 2)"
msgstr "longueur du nom de domaine invalide (minimum 2)" msgstr "longueur du nom de domaine invalide (minimum 2)"
#: tiramisu/option.py:1030 #: tiramisu/option.py:1034
msgid "invalid domainname" msgid "invalid domainname"
msgstr "nom de domaine invalide" msgstr "nom de domaine invalide"
#: tiramisu/option.py:1049 #: tiramisu/option.py:1047
msgid "invalid email address, should contains one @" msgid "invalid email address, should contains one @"
msgstr "adresse email invalide, devrait contenir un @" msgstr "adresse email invalide, devrait contenir un @"
#: tiramisu/option.py:1052 #: tiramisu/option.py:1050
msgid "invalid username in email address" msgid "invalid username in email address"
msgstr "nom d'utilisateur invalide dans une adresse email" 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://" msgid "invalid url, should start with http:// or https://"
msgstr "URL invalide, devrait démarré avec http:// ou 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" msgid "invalid url, port must be an between 0 and 65536"
msgstr "URL invalide, port doit être entre 0 et 65536" msgstr "URL invalide, port doit être entre 0 et 65536"
#: tiramisu/option.py:1096 #: tiramisu/option.py:1088
#, fuzzy
msgid "invalid url, should ends with filename" msgid "invalid url, should ends with filename"
msgstr "URL invalide, devrait finir avec un nom de fichier" msgstr "URL invalide, devrait finir avec un nom de fichier"
#: tiramisu/option.py:1107 #: tiramisu/option.py:1099
msgid "invalid filename" msgid "invalid filename"
msgstr "nom de fichier invalide" msgstr "nom de fichier invalide"
#: tiramisu/option.py:1134 #: tiramisu/option.py:1126
msgid "duplicate option name: {0}" msgid "duplicate option name: {0}"
msgstr "nom de l'option dupliqué : {0}" msgstr "nom de l'option dupliqué : {0}"
#: tiramisu/option.py:1152 #: tiramisu/option.py:1144
msgid "unknown Option {0} in OptionDescription {1}" msgid "unknown Option {0} in OptionDescription {1}"
msgstr "Option {0} inconnue pour l'OptionDescription {1}" msgstr "Option {0} inconnue pour l'OptionDescription {1}"
#: tiramisu/option.py:1203 #: tiramisu/option.py:1195
msgid "duplicate option: {0}" msgid "duplicate option: {0}"
msgstr "option dupliquée : {0}" msgstr "option dupliquée : {0}"
#: tiramisu/option.py:1233 #: tiramisu/option.py:1225
msgid "consistency with option {0} which is not in Config" msgid "consistency with option {0} which is not in Config"
msgstr "consistency avec l'option {0} qui n'est pas dans une 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}" msgid "no option for path {0}"
msgstr "pas d'option pour le chemin {0}" msgstr "pas d'option pour le chemin {0}"
#: tiramisu/option.py:1247 #: tiramisu/option.py:1239
msgid "no option {0} found" msgid "no option {0} found"
msgstr "pas d'option {0} trouvée" 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})" 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})" 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" msgid "master group {0} shall not have a subgroup"
msgstr "groupe maître {0} ne doit pas avoir de sous-groupe" 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" msgid "master group {0} shall not have a symlinkoption"
msgstr "groupe maître {0} ne doit pas avoir de 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" msgid "not allowed option {0} in group {1}: this option is not a multi"
msgstr "" msgstr ""
"option non autorisée {0} dans le groupe {1} : cette option n'est pas une " "option non autorisée {0} dans le groupe {1} : cette option n'est pas une "
"multi" "multi"
#: tiramisu/option.py:1287 #: tiramisu/option.py:1277
msgid "master group with wrong master name for {0}" msgid "master group with wrong master name for {0}"
msgstr "le groupe maître avec un nom de maître érroné pour {0}" msgstr "le groupe maître avec un nom de maître érroné pour {0}"
#: tiramisu/option.py:1296 #: tiramisu/option.py:1285
msgid "no child has same nom has master group for: {0}" msgid "callback of master's option shall not refered a slave's ones"
msgstr "pas d'enfant avec le nom du groupe maître pour {0} " 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" msgid "group_type: {0} not allowed"
msgstr "group_type : {0} non autorisé" 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" msgid "malformed requirements type for option: {0}, must be a dict"
msgstr "" msgstr ""
"type requirements malformé pour l'option : {0}, doit être un dictionnaire" "type requirements malformé pour l'option : {0}, doit être un dictionnaire"
#: tiramisu/option.py:1408 #: tiramisu/option.py:1402
msgid "" msgid ""
"malformed requirements for option: {0} require must have option, expected " "malformed requirements for option: {0} require must have option, expected "
"and action keys" "and action keys"
@ -358,66 +359,66 @@ msgstr ""
"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs " "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
"option, expected et action" "option, expected et action"
#: tiramisu/option.py:1413 #: tiramisu/option.py:1407
msgid "malformed requirements for option: {0} inverse must be boolean" msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} inverse doit être un booléen" "requirements mal formés pour l'option : {0} inverse doit être un booléen"
#: tiramisu/option.py:1417 #: tiramisu/option.py:1411
msgid "malformed requirements for option: {0} transitive must be boolean" msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} transitive doit être booléen" "requirements mal formés pour l'option : {0} transitive doit être booléen"
#: tiramisu/option.py:1421 #: tiramisu/option.py:1415
msgid "malformed requirements for option: {0} same_action must be boolean" msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} same_action doit être un booléen" "requirements mal formés pour l'option : {0} same_action doit être un booléen"
#: tiramisu/option.py:1425 #: tiramisu/option.py:1419
msgid "malformed requirements must be an option in option {0}" msgid "malformed requirements must be an option in option {0}"
msgstr "requirements mal formés doit être une option dans l'option {0}" msgstr "requirements mal formés doit être une option dans l'option {0}"
#: tiramisu/option.py:1428 #: tiramisu/option.py:1422
msgid "malformed requirements option {0} should not be a multi" msgid "malformed requirements option {0} should not be a multi"
msgstr "requirements mal formés l'option {0} ne doit pas être une multi" msgstr "requirements mal formés l'option {0} ne doit pas être une multi"
#: tiramisu/option.py:1434 #: tiramisu/option.py:1428
msgid "" msgid ""
"malformed requirements second argument must be valid for option {0}: {1}" "malformed requirements second argument must be valid for option {0}: {1}"
msgstr "" msgstr ""
"requirements mal formés deuxième argument doit être valide pour l'option " "requirements mal formés deuxième argument doit être valide pour l'option "
"{0} : {1}" "{0} : {1}"
#: tiramisu/option.py:1439 #: tiramisu/option.py:1433
msgid "inconsistency in action types for option: {0} action: {1}" msgid "inconsistency in action types for option: {0} action: {1}"
msgstr "incohérence dans les types action pour l'option : {0} action {1}" msgstr "incohérence dans les types action pour l'option : {0} action {1}"
#: tiramisu/option.py:1464 #: tiramisu/option.py:1458
msgid "{0} should be a function" msgid "{0} should be a function"
msgstr "{0} doit être une fonction" msgstr "{0} doit être une fonction"
#: tiramisu/option.py:1467 #: tiramisu/option.py:1461
msgid "{0}_params should be a dict" msgid "{0}_params should be a dict"
msgstr "{0}_params devrait être un 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" msgid "{0}_params with key {1} should not have length different to 1"
msgstr "" msgstr ""
"{0}_params avec la clef {1} devrait ne pas avoir une longueur différent de 1" "{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}\"" msgid "{0}_params should be tuple for key \"{1}\""
msgstr "{0}_params devrait être un tuple pour la clef \"{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" msgid "validator not support tuple"
msgstr "validator n'accepte pas de 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" 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" 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" 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" 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}" msgid "can't unbind {0}"
msgstr "ne peut supprimer ({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" msgid "cannot append {0} property for option {1}: this property is calculated"
msgstr "" msgstr ""
"ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est " "ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est "
"calculée" "calculée"
#: tiramisu/setting.py:322 #: tiramisu/setting.py:363
msgid "opt and all_properties must not be set together in reset" 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" 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" msgid "if opt is not None, path should not be None in _getproperties"
msgstr "" msgstr ""
"si opt n'est pas None, path devrait ne pas être à None dans _getproperties" "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" msgid "cannot change the value for option {0} this option is frozen"
msgstr "" msgstr ""
"ne peut modifier la valeur de l'option {0} cette option n'est pas modifiable" "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}" 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}" 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" msgid "permissive must be a tuple"
msgstr "permissive doit être un 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}" msgid "invalid generic owner {0}"
msgstr "invalide owner générique {0}" msgstr "invalide owner générique {0}"
#: tiramisu/setting.py:558 #: tiramisu/setting.py:602
msgid "" msgid ""
"malformed requirements imbrication detected for option: '{0}' with " "malformed requirements imbrication detected for option: '{0}' with "
"requirement on: '{1}'" "requirement on: '{1}'"
@ -469,7 +470,7 @@ msgstr ""
"imbrication de requirements mal formés detectée pour l'option : '{0}' avec " "imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
"requirement sur : '{1}'" "requirement sur : '{1}'"
#: tiramisu/setting.py:570 #: tiramisu/setting.py:613
msgid "option '{0}' has requirement's property error: {1} {2}" 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}" 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" msgid "a dictionary cannot be persistent"
msgstr "un espace de stockage dictionary ne peut être persistant" 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}" msgid "no value for {0} cannot change owner to {1}"
msgstr "pas de valeur pour {0} ne peut changer d'utilisateur pour {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" 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" 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" msgid "invalid len for the master: {0} which has {1} as slave with greater len"
msgstr "" msgstr ""
"longueur invalide pour un maître : {0} qui a {1} une esclave avec une plus " "longueur invalide pour un maître : {0} qui a {1} une esclave avec une plus "
"grande longueur" "grande longueur"
#: tiramisu/value.py:470 #: tiramisu/value.py:496
msgid "cannot append a value on a multi option {0} which is a slave" 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" 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" 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" 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" msgid "cmp is not permitted in python v3 or greater"
msgstr "cmp n'est pas permis en python v3 ou supérieure" 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" 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" 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" 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" 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" 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" 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}" msgid "invalid value {0} for option {1}: {2}"
msgstr "valeur invalide {0} pour l'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" msgid "cannot pop a value on a multi option {0} which is a slave"
msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave" msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"
#~ msgid ""
#~ "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" #~ msgid "value must be a boolean"
#~ msgstr "valeur doit être un booléen" #~ 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" #~ msgid "value must be an unicode"
#~ msgstr "valeur doit être une valeur 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" #~ msgid "invalid value {0} for option {1} must be different as {2} option"
#~ msgstr "" #~ msgstr ""
#~ "valeur invalide {0} pour l'option {1} doit être différente de l'option {2}" #~ "valeur invalide {0} pour l'option {1} doit être différente de l'option {2}"

View file

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