need new settings when create fake_config

This commit is contained in:
Emmanuel Garette 2015-09-17 19:14:56 +02:00
parent 9da7e89176
commit 5ea92d3460
9 changed files with 259 additions and 247 deletions

View File

@ -159,7 +159,6 @@ def test_information_config():
assert config.impl_get_information('noinfo', 'default') == 'default' assert config.impl_get_information('noinfo', 'default') == 'default'
#FIXME test impl_get_xxx pour OD ou ne pas cacher
def test_config_impl_get_path_by_opt(): def test_config_impl_get_path_by_opt():
descr = make_description() descr = make_description()
config = Config(descr) config = Config(descr)
@ -172,6 +171,14 @@ def test_config_impl_get_path_by_opt():
raises(AttributeError, "config.cfgimpl_get_description().impl_get_path_by_opt(unknown)") raises(AttributeError, "config.cfgimpl_get_description().impl_get_path_by_opt(unknown)")
def test_config_impl_get_path_by_opt_od():
descr = make_description()
config = Config(descr)
dummy = config.unwrap_from_path('gc.dummy')
dummy
raises(ConfigError, "config.cfgimpl_get_description().gc.impl_get_path_by_opt(dummy)")
def test_config_impl_get_opt_by_path(): def test_config_impl_get_opt_by_path():
descr = make_description() descr = make_description()
config = Config(descr) config = Config(descr)

View File

@ -37,32 +37,6 @@ def make_description():
return descr return descr
#FIXME
#def test_compare_configs():
# "config object comparison"
# descr = make_description()
# conf1 = Config(descr)
# conf2 = Config(descr)
# conf2.wantref = True
# assert conf1 != conf2
# assert hash(conf1) != hash(conf2)
# #assert conf1.getkey() != conf2.getkey()
# conf1.wantref = True
# assert conf1 == conf2
# assert hash(conf1) == hash(conf2)
# #assert conf1.getkey() == conf2.getkey()
# conf2.gc.dummy = True
# assert conf1 != conf2
# assert hash(conf1) != hash(conf2)
# #assert conf1.getkey() != conf2.getkey()
# conf1.gc.dummy = True
# assert conf1 == conf2
# assert hash(conf1) == hash(conf2)
# assert not conf1 == 'conf2'
# assert conf1 != 'conf2'
# ____________________________________________________________
def test_iter_config(): def test_iter_config():
"iteration on config object" "iteration on config object"
s = StrOption("string", "", default="string") s = StrOption("string", "", default="string")
@ -304,3 +278,19 @@ def test_invalid_option():
raises(ValueError, "DomainnameOption('a', '', allow_ip='string')") raises(ValueError, "DomainnameOption('a', '', allow_ip='string')")
raises(ValueError, "DomainnameOption('a', '', allow_without_dot='string')") raises(ValueError, "DomainnameOption('a', '', allow_without_dot='string')")
raises(ValueError, "DomainnameOption('a', '', 1)") raises(ValueError, "DomainnameOption('a', '', 1)")
#
ChoiceOption('a', '', (1,), multi=True, default_multi=1)
raises(ValueError, "ChoiceOption('a', '', (1,), default_multi=1)")
raises(ValueError, "ChoiceOption('a', '', (1,), multi=True, default=[1,], default_multi=2)")
raises(ValueError, "FloatOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "UnicodeOption('a', '', multi=True, default_multi=1)")
raises(ValueError, "IPOption('a', '', multi=True, default_multi=1)")
raises(ValueError, "IPOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "PortOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "PortOption('a', '', multi=True, default_multi='11:12:13', allow_range=True)")
raises(ValueError, "PortOption('a', '', multi=True, default_multi=11111111111111111111)")
raises(ValueError, "NetworkOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "NetmaskOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "BroadcastOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "DomainnameOption('a', '', multi=True, default_multi='string')")
raises(ValueError, "DomainnameOption('a', '', multi=True, default_multi=1)")

View File

@ -30,8 +30,6 @@ def return_if_val(value):
raise ValueError('error') raise ValueError('error')
#FIXME il y a une validation sur default_multi ?
def test_validator(): def test_validator():
opt1 = StrOption('opt1', '', validator=return_true, default='val') opt1 = StrOption('opt1', '', validator=return_true, default='val')
raises(ValueError, "StrOption('opt2', '', validator=return_false, default='val')") raises(ValueError, "StrOption('opt2', '', validator=return_false, default='val')")
@ -62,6 +60,7 @@ def test_validator_params_key():
def test_validator_params_option(): def test_validator_params_option():
opt0 = StrOption('opt0', '', default='val') opt0 = StrOption('opt0', '', default='val')
opt0
raises(ValueError, "opt1 = StrOption('opt1', '', validator=return_true, validator_params={'': ((opt0, False),)}, default='val')") raises(ValueError, "opt1 = StrOption('opt1', '', validator=return_true, validator_params={'': ((opt0, False),)}, default='val')")

View File

@ -600,7 +600,7 @@ class _CommonConfig(SubConfig):
def _gen_fake_values(self): def _gen_fake_values(self):
fake_config = Config(self._impl_descr, persistent=False, fake_config = Config(self._impl_descr, persistent=False,
force_storages=get_storages_validation(), force_values=get_storages_validation(),
force_settings=self.cfgimpl_get_settings()) force_settings=self.cfgimpl_get_settings())
fake_config.cfgimpl_get_values()._p_._values = self.cfgimpl_get_values()._p_.get_modified_values() fake_config.cfgimpl_get_values()._p_._values = self.cfgimpl_get_values()._p_.get_modified_values()
return fake_config return fake_config
@ -619,7 +619,7 @@ class Config(_CommonConfig):
__slots__ = ('__weakref__', '_impl_test', '_impl_name') __slots__ = ('__weakref__', '_impl_test', '_impl_name')
def __init__(self, descr, session_id=None, persistent=False, def __init__(self, descr, session_id=None, persistent=False,
name=undefined, force_storages=None, force_settings=None): name=undefined, force_values=None, force_settings=None):
""" Configuration option management master class """ Configuration option management master class
:param descr: describes the configuration schema :param descr: describes the configuration schema
@ -632,25 +632,21 @@ class Config(_CommonConfig):
:param persistent: if persistent, don't delete storage when leaving :param persistent: if persistent, don't delete storage when leaving
:type persistent: `boolean` :type persistent: `boolean`
""" """
#if force_storages is None: if force_settings is not None and force_values is not None:
settings, values = get_storages(self, session_id, persistent,
only_value=not force_settings is None)
#else:
# settings, values = force_storages
if name is undefined:
name = 'config'
if session_id is not None:
name += session_id
if name is not None and not valid_name(name): # pragma: optional cover
raise ValueError(_("invalid name: {0} for config").format(name))
if force_settings is None:
self._impl_settings = Settings(self, settings)
else:
self._impl_settings = force_settings self._impl_settings = force_settings
self._impl_values = Values(self, values) self._impl_values = Values(self, force_values)
else:
settings, values = get_storages(self, session_id, persistent)
if name is undefined:
name = 'config'
if session_id is not None:
name += session_id
if name is not None and not valid_name(name): # pragma: optional cover
raise ValueError(_("invalid name: {0} for config").format(name))
self._impl_settings = Settings(self, settings)
self._impl_values = Values(self, values)
super(Config, self).__init__(descr, weakref.ref(self)) super(Config, self).__init__(descr, weakref.ref(self))
if force_settings is None: self._impl_build_all_caches()
self._impl_build_all_caches()
self._impl_meta = None self._impl_meta = None
#undocumented option used only in test script #undocumented option used only in test script
self._impl_test = False self._impl_test = False

View File

@ -106,6 +106,7 @@ def _impl_getstate_setting():
def get_storage(type_, session_id, persistent, test): # pragma: optional cover def get_storage(type_, session_id, persistent, test): # pragma: optional cover
"""all used when __setstate__ a Config """all used when __setstate__ a Config
""" """
#FIXME ca sert ???
if type_ == 'option': if type_ == 'option':
return storage_option_type.get().Storage(session_id, persistent, test) return storage_option_type.get().Storage(session_id, persistent, test)
elif type_ == 'config': elif type_ == 'config':
@ -114,7 +115,7 @@ def get_storage(type_, session_id, persistent, test): # pragma: optional cover
return storage_validation.get().Storage(session_id, persistent, test) return storage_validation.get().Storage(session_id, persistent, test)
def get_storages(context, session_id, persistent, only_value=False): def get_storages(context, session_id, persistent):
def gen_id(config): def gen_id(config):
return str(id(config)) + str(time()) + str(randint(0, 500)) return str(id(config)) + str(time()) + str(randint(0, 500))
@ -122,10 +123,7 @@ def get_storages(context, session_id, persistent, only_value=False):
session_id = gen_id(context) session_id = gen_id(context)
imp = storage_type.get() imp = storage_type.get()
storage = imp.Storage(session_id, persistent) storage = imp.Storage(session_id, persistent)
if only_value: settings = imp.Settings(storage)
settings = None
else:
settings = imp.Settings(storage)
values = imp.Values(storage) values = imp.Values(storage)
try: try:
return settings, values return settings, values
@ -143,8 +141,8 @@ def get_storages_option(type_):
def get_storages_validation(): def get_storages_validation():
imp = storage_validation.get() imp = storage_validation.get()
storage = imp.Storage('pouet', persistent=False, test=True) storage = imp.Storage('__validator_storage', persistent=False, test=True)
return imp.Settings(storage), imp.Values(storage) return imp.Values(storage)
def list_sessions(type_): # pragma: optional cover def list_sessions(type_): # pragma: optional cover

View File

@ -365,6 +365,8 @@ class StorageOptionDescription(StorageBase):
raise AttributeError(_('no option for path {0}').format(path)) raise AttributeError(_('no option for path {0}').format(path))
def impl_get_path_by_opt(self, opt): def impl_get_path_by_opt(self, opt):
if self._cache_paths is None:
raise ConfigError(_('use impl_get_path_by_opt only with root OptionDescription'))
try: try:
return self._cache_paths[1][self._cache_paths[0].index(opt)] return self._cache_paths[1][self._cache_paths[0].index(opt)]
except ValueError: # pragma: optional cover except ValueError: # pragma: optional cover

View File

@ -213,9 +213,8 @@ class _Consistency(SqlAlchemyBase):
def __init__(self, func, all_cons_opts, params): def __init__(self, func, all_cons_opts, params):
self.func = func self.func = func
for option in all_cons_opts: for option in all_cons_opts[1:]:
option._consistencies.append(self) option._consistencies.append(self)
print type(option._consistencies)
self.params = params self.params = params
@ -278,6 +277,7 @@ class _Base(SqlAlchemyBase):
_calc_props = relationship("_CalcProperties", collection_class=set) _calc_props = relationship("_CalcProperties", collection_class=set)
_calc_properties = association_proxy("_calc_props", "name") _calc_properties = association_proxy("_calc_props", "name")
_warnings_only = Column(Boolean) _warnings_only = Column(Boolean)
_allow_empty_list = Column(Boolean)
_readonly = Column(Boolean, default=False) _readonly = Column(Boolean, default=False)
_consistencies = relationship('_Consistency', secondary=consistency_table, _consistencies = relationship('_Consistency', secondary=consistency_table,
backref=backref('options', backref=backref('options',
@ -295,13 +295,15 @@ class _Base(SqlAlchemyBase):
#def __init__(self): #def __init__(self):
def __init__(self, name, multi, warnings_only, doc, extra, calc_properties, def __init__(self, name, multi, warnings_only, doc, extra, calc_properties,
requires, properties, opt=undefined): requires, properties, allow_empty_list, opt=undefined):
util.session.add(self) util.session.add(self)
self._name = name self._name = name
if multi is not undefined: if multi is not undefined:
self._multi = multi self._multi = multi
if warnings_only is not undefined: if warnings_only is not undefined:
self._warnings_only = warnings_only self._warnings_only = warnings_only
if allow_empty_list is not undefined:
self._allow_empty_list = allow_empty_list
if doc is not undefined: if doc is not undefined:
self._informations = {'doc': doc} self._informations = {'doc': doc}
if opt is not undefined: if opt is not undefined:
@ -405,6 +407,12 @@ class _Base(SqlAlchemyBase):
def impl_is_submulti(self): def impl_is_submulti(self):
return self._multi == 2 return self._multi == 2
def impl_allow_empty_list(self):
try:
return self._allow_empty_list
except AttributeError:
return undefined
def _is_warnings_only(self): def _is_warnings_only(self):
return self._warnings_only return self._warnings_only
@ -479,6 +487,9 @@ class StorageOptionDescription(object):
ret = util.session.query(Cache).filter_by(descr=self.id, ret = util.session.query(Cache).filter_by(descr=self.id,
option=opt.id).first() option=opt.id).first()
if ret is None: if ret is None:
ret = util.session.query(Cache).filter_by(descr=self.id).first()
if ret is None:
raise ConfigError(_('use impl_get_path_by_opt only with root OptionDescription'))
raise AttributeError(_('no option {0} found').format(opt)) raise AttributeError(_('no option {0} found').format(opt))
return ret.path return ret.path

View File

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Tiramisu\n" "Project-Id-Version: Tiramisu\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-04-19 09:44+CEST\n" "POT-Creation-Date: 2015-07-27 10:06+0100\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: Tiramisu's team <egarette@cadoles.com>\n" "Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@ -10,7 +10,7 @@ msgstr ""
"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.7.5\n" "X-Generator: Poedit 1.8.1\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
@ -21,41 +21,41 @@ 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/config.py:62 #: tiramisu/config.py:61
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}"
#: tiramisu/config.py:142 #: tiramisu/config.py:141
msgid "unknown group_type: {0}" msgid "unknown group_type: {0}"
msgstr "group_type inconnu: {0}" msgstr "group_type inconnu: {0}"
#: tiramisu/config.py:181 tiramisu/setting.py:323 tiramisu/value.py:54 #: tiramisu/config.py:180 tiramisu/setting.py:326 tiramisu/value.py:54
#: tiramisu/value.py:624 #: tiramisu/value.py:645
msgid "the context does not exist anymore" msgid "the context does not exist anymore"
msgstr "le context n'existe plus" msgstr "le context n'existe plus"
#: tiramisu/config.py:186 #: tiramisu/config.py:185
msgid "no option description found for this config (may be GroupConfig)" msgid "no option description found for this config (may be GroupConfig)"
msgstr "" msgstr ""
"pas d'option description trouvé pour cette config (peut être un GroupConfig)" "pas d'option description trouvé pour cette config (peut être un GroupConfig)"
#: tiramisu/config.py:214 #: tiramisu/config.py:213
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:343 #: tiramisu/config.py:342
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:383 #: tiramisu/config.py:382
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:433 #: tiramisu/config.py:432
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:452 #: tiramisu/config.py:451
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}"
@ -75,38 +75,38 @@ msgstr "ce storage n'est sérialisable, devrait être une storage non persistant
msgid "invalid name: {0} for config" msgid "invalid name: {0} for config"
msgstr "nom invalide : {0} pour la config" msgstr "nom invalide : {0} pour la config"
#: tiramisu/config.py:669 #: tiramisu/config.py:680
msgid "groupconfig's children must be a list" msgid "groupconfig's children must be a list"
msgstr "enfants d'une groupconfig doit être une liste" msgstr "enfants d'une groupconfig doit être une liste"
#: tiramisu/config.py:673 #: tiramisu/config.py:684
msgid "groupconfig's children must be Config, MetaConfig or GroupConfig" msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
msgstr "" msgstr ""
"les enfants d'un groupconfig doivent être des Config, MetaConfig ou " "les enfants d'un groupconfig doivent être des Config, MetaConfig ou "
"GroupConfig" "GroupConfig"
#: tiramisu/config.py:676 #: tiramisu/config.py:687
msgid "name must be set to config before creating groupconfig" msgid "name must be set to config before creating groupconfig"
msgstr "un nom doit être donné à la config avant de créer un groupconfig" msgstr "un nom doit être donné à la config avant de créer un groupconfig"
#: tiramisu/config.py:684 #: tiramisu/config.py:695
msgid "config name must be uniq in groupconfig for {0}" msgid "config name must be uniq in groupconfig for {0}"
msgstr "le nom de la config doit être unique dans un groupconfig pour {0}" msgstr "le nom de la config doit être unique dans un groupconfig pour {0}"
#: tiramisu/config.py:799 #: tiramisu/config.py:810
msgid "metaconfig's children should be config, not {0}" msgid "metaconfig's children should be config, not {0}"
msgstr "enfants d'une metaconfig doit être une config, pas {0}" msgstr "enfants d'une metaconfig doit être une config, pas {0}"
#: tiramisu/config.py:803 #: tiramisu/config.py:814
msgid "child has already a metaconfig's" msgid "child has already a metaconfig's"
msgstr "enfant a déjà une metaconfig" msgstr "enfant a déjà une metaconfig"
#: tiramisu/config.py:807 #: tiramisu/config.py:818
msgid "all config in metaconfig must have the same optiondescription" msgid "all config in metaconfig must have the same optiondescription"
msgstr "" msgstr ""
"toutes les configs d'une metaconfig doivent avoir la même optiondescription" "toutes les configs d'une metaconfig doivent avoir la même optiondescription"
#: tiramisu/config.py:819 #: tiramisu/config.py:830
msgid "" msgid ""
"force_default, force_default_if_same or force_dont_change_value cannot be " "force_default, force_default_if_same or force_dont_change_value cannot be "
"set with only_config" "set with only_config"
@ -114,7 +114,7 @@ msgstr ""
"force_default, force_default_if_same ou force_dont_change_value ne peuvent " "force_default, force_default_if_same ou force_dont_change_value ne peuvent "
"pas être spécifié avec only_config" "pas être spécifié avec only_config"
#: tiramisu/config.py:825 #: tiramisu/config.py:836
msgid "force_default and force_dont_change_value cannot be set together" msgid "force_default and force_dont_change_value cannot be set together"
msgstr "" msgstr ""
"force_default et force_dont_change_value ne peuvent pas être mis ensemble" "force_default et force_dont_change_value ne peuvent pas être mis ensemble"
@ -198,101 +198,101 @@ msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule"
msgid "invalid unicode or string" msgid "invalid unicode or string"
msgstr "invalide unicode ou string" msgstr "invalide unicode ou string"
#: tiramisu/option/baseoption.py:549 tiramisu/option/baseoption.py:594 #: tiramisu/option/baseoption.py:549 tiramisu/option/baseoption.py:590
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/baseoption.py:562 #: tiramisu/option/baseoption.py:558
msgid "do_validation for {0}: error in value" msgid "do_validation for {0}: error in value"
msgstr "do_validation for {0} : erreur dans un la valeur" msgstr "do_validation for {0} : erreur dans un la valeur"
#: tiramisu/option/baseoption.py:568 #: tiramisu/option/baseoption.py:564
msgid "do_validation for {0}: warning in value" msgid "do_validation for {0}: warning in value"
msgstr "do_validation for {0} : warning dans un la valeur" msgstr "do_validation for {0} : warning dans un la valeur"
#: tiramisu/option/baseoption.py:578 #: tiramisu/option/baseoption.py:574
msgid "do_validation for {0}: error in consistency" msgid "do_validation for {0}: error in consistency"
msgstr "do_validation for {0} : erreur dans un test de consistance" msgstr "do_validation for {0} : erreur dans un test de consistance"
#: tiramisu/option/baseoption.py:582 #: tiramisu/option/baseoption.py:578
msgid "do_validation for {0}: warning in consistency" msgid "do_validation for {0}: warning in consistency"
msgstr "do_validation for {0} : warning dans un test de consistance" msgstr "do_validation for {0} : warning dans un test de consistance"
#: tiramisu/option/baseoption.py:586 #: tiramisu/option/baseoption.py:582
msgid "warning on the value of the option {0}: {1}" msgid "warning on the value of the option {0}: {1}"
msgstr "avertissement sur la valeur de l'option {0} : {1}" msgstr "avertissement sur la valeur de l'option {0} : {1}"
#: tiramisu/option/baseoption.py:606 tiramisu/option/baseoption.py:615 #: tiramisu/option/baseoption.py:602 tiramisu/option/baseoption.py:611
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/baseoption.py:621 #: tiramisu/option/baseoption.py:617
msgid "invalid value {0} for option {1} which must be a list of list" msgid "invalid value {0} for option {1} which must be a list of list"
msgstr "" msgstr ""
"valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste" "valeur invalide pour l'option {0} : {1} laquelle doit être une liste de liste"
#: tiramisu/option/baseoption.py:674 #: tiramisu/option/baseoption.py:670
msgid "'{0}' ({1}) cannot add consistency, option is read-only" msgid "'{0}' ({1}) cannot add consistency, option is read-only"
msgstr "" msgstr ""
"'{0}' ({1}) ne peut ajouter de consistency, l'option est en lecture seul" "'{0}' ({1}) ne peut ajouter de consistency, l'option est en lecture seul"
#: tiramisu/option/baseoption.py:686 #: tiramisu/option/baseoption.py:682
msgid "unknow parameter {0} in consistency" msgid "unknow parameter {0} in consistency"
msgstr "paramètre inconnu {0} dans un test de consistance" msgstr "paramètre inconnu {0} dans un test de consistance"
#: tiramisu/option/baseoption.py:693 #: tiramisu/option/baseoption.py:689
msgid "consistency must be set with an option" msgid "consistency must be set with an option"
msgstr "consistency doit être configuré avec une option" msgstr "consistency doit être configuré avec une option"
#: tiramisu/option/baseoption.py:696 tiramisu/option/baseoption.py:703 #: tiramisu/option/baseoption.py:692 tiramisu/option/baseoption.py:699
msgid "" msgid ""
"almost one option in consistency is in a dynoptiondescription but not all" "almost one option in consistency is in a dynoptiondescription but not all"
msgstr "" msgstr ""
"au moins une option dans le test de consistance est dans une " "au moins une option dans le test de consistance est dans une "
"dynoptiondescription mais pas toutes" "dynoptiondescription mais pas toutes"
#: tiramisu/option/baseoption.py:699 #: tiramisu/option/baseoption.py:695
msgid "option in consistency must be in same dynoptiondescription" msgid "option in consistency must be in same dynoptiondescription"
msgstr "" msgstr ""
"option dans une consistency doit être dans le même dynoptiondescription" "option dans une consistency doit être dans le même dynoptiondescription"
#: tiramisu/option/baseoption.py:706 #: tiramisu/option/baseoption.py:702
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/baseoption.py:708 #: tiramisu/option/baseoption.py:704
msgid "every options in consistency must be multi or none" msgid "every options in consistency must be multi or none"
msgstr "" msgstr ""
"toutes les options d'une consistency doivent être multi ou ne pas l'être" "toutes les options d'une consistency doivent être multi ou ne pas l'être"
#: tiramisu/option/baseoption.py:712 #: tiramisu/option/baseoption.py:708
msgid "consistency {0} not available for this option" msgid "consistency {0} not available for this option"
msgstr "consistency {0} non valable pour cette option" msgstr "consistency {0} non valable pour cette option"
#: tiramisu/option/baseoption.py:741 #: tiramisu/option/baseoption.py:737
msgid "same value for {0} and {1}, should be different" msgid "same value for {0} and {1}, should be different"
msgstr "même valeur pour {0} et {1}, devrait être différent" msgstr "même valeur pour {0} et {1}, devrait être différent"
#: tiramisu/option/baseoption.py:743 #: tiramisu/option/baseoption.py:739
msgid "same value for {0} and {1}, must be different" msgid "same value for {0} and {1}, must be different"
msgstr "même valeur pour {0} et {1}, doit être différent" msgstr "même valeur pour {0} et {1}, doit être différent"
#: tiramisu/option/baseoption.py:800 #: tiramisu/option/baseoption.py:795
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/baseoption.py:822 #: tiramisu/option/baseoption.py:817
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/baseoption.py:828 #: tiramisu/option/baseoption.py:823
msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}" msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} clefs inconnues {1}, doit " "requirements mal formés pour l'option : {0} clefs inconnues {1}, doit "
"seulement avoir {2}" "seulement avoir {2}"
#: tiramisu/option/baseoption.py:839 #: tiramisu/option/baseoption.py:834
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"
@ -300,49 +300,49 @@ 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/baseoption.py:843 #: tiramisu/option/baseoption.py:838
msgid "" msgid ""
"malformed requirements for option: {0} action cannot be force_store_value" "malformed requirements for option: {0} action cannot be force_store_value"
msgstr "" msgstr ""
"requirements mal formés pour l'option : {0} action ne peut pas être " "requirements mal formés pour l'option : {0} action ne peut pas être "
"force_store_value" "force_store_value"
#: tiramisu/option/baseoption.py:848 #: tiramisu/option/baseoption.py:843
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/baseoption.py:852 #: tiramisu/option/baseoption.py:847
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/baseoption.py:856 #: tiramisu/option/baseoption.py:851
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/baseoption.py:860 #: tiramisu/option/baseoption.py:855
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/baseoption.py:863 #: tiramisu/option/baseoption.py:858
msgid "malformed requirements option {0} must not be a multi for {1}" msgid "malformed requirements option {0} must not be a multi for {1}"
msgstr "" msgstr ""
"requirements mal formés pour l'option {0} ne doit pas être une multi pour {1}" "requirements mal formés pour l'option {0} ne doit pas être une multi pour {1}"
#: tiramisu/option/baseoption.py:870 #: tiramisu/option/baseoption.py:865
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/baseoption.py:875 #: tiramisu/option/baseoption.py:870
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/baseoption.py:903 #: tiramisu/option/baseoption.py:898
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}"
@ -370,7 +370,7 @@ msgstr ""
"callback d'une variable maitre ne devrait pas référencer des variables " "callback d'une variable maitre ne devrait pas référencer des variables "
"esclaves" "esclaves"
#: tiramisu/option/masterslave.py:259 #: tiramisu/option/masterslave.py:260
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"
@ -587,92 +587,92 @@ msgstr "nom de l'option dupliqué : {0}"
msgid "option must not start as dynoptiondescription" msgid "option must not start as dynoptiondescription"
msgstr "option ne doit pas commencé pareil qu'un dynoptiondescription" msgstr "option ne doit pas commencé pareil qu'un dynoptiondescription"
#: tiramisu/option/optiondescription.py:119 #: tiramisu/option/optiondescription.py:117
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/optiondescription.py:145 #: tiramisu/option/optiondescription.py:143
msgid "duplicate option: {0}" msgid "duplicate option: {0}"
msgstr "option dupliquée : {0}" msgstr "option dupliquée : {0}"
#: tiramisu/option/optiondescription.py:156 #: tiramisu/option/optiondescription.py:154
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/optiondescription.py:164 #: tiramisu/option/optiondescription.py:162
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/optiondescription.py:262 #: tiramisu/option/optiondescription.py:260
msgid "DynOptionDescription callback return not uniq value" msgid "DynOptionDescription callback return not uniq value"
msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique" msgstr "callback d'une DynOptionDescription ne retourne pas une valeur unique"
#: tiramisu/option/optiondescription.py:265 #: tiramisu/option/optiondescription.py:263
msgid "invalid suffix: {0} for option" msgid "invalid suffix: {0} for option"
msgstr "suffix invalide : {0} pour l'option" msgstr "suffix invalide : {0} pour l'option"
#: tiramisu/option/optiondescription.py:318 #: tiramisu/option/optiondescription.py:320
msgid "cannot set optiondescription in an dynoptiondescription" msgid "cannot set optiondescription in an dynoptiondescription"
msgstr "" msgstr ""
"impossible de mettre une optiondescription dans un dynoptiondescription" "impossible de mettre une optiondescription dans un dynoptiondescription"
#: tiramisu/option/optiondescription.py:323 #: tiramisu/option/optiondescription.py:325
msgid "cannot set symlinkoption in an dynoptiondescription" msgid "cannot set symlinkoption in an dynoptiondescription"
msgstr "impossible de placer un symlinkoption dans un dynoptiondescription" msgstr "impossible de placer un symlinkoption dans un dynoptiondescription"
#: tiramisu/option/optiondescription.py:331 #: tiramisu/option/optiondescription.py:333
msgid "callback is mandatory for dynoptiondescription" msgid "callback is mandatory for dynoptiondescription"
msgstr "callback est obligatoire pour un dynoptiondescription" msgstr "callback est obligatoire pour un dynoptiondescription"
#: tiramisu/setting.py:124 #: tiramisu/setting.py:127
msgid "can't rebind {0}" msgid "can't rebind {0}"
msgstr "ne peut redéfinir ({0})" msgstr "ne peut redéfinir ({0})"
#: tiramisu/setting.py:129 #: tiramisu/setting.py:132
msgid "can't unbind {0}" msgid "can't unbind {0}"
msgstr "ne peut supprimer ({0})" msgstr "ne peut supprimer ({0})"
#: tiramisu/setting.py:257 #: tiramisu/setting.py:260
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:346 #: tiramisu/setting.py:349
msgid "you should only append/remove properties" msgid "you should only append/remove properties"
msgstr "pour pouvait seulement ajouter/supprimer des propriétés" msgstr "pour pouvait seulement ajouter/supprimer des propriétés"
#: tiramisu/setting.py:350 #: tiramisu/setting.py:353
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:371 #: tiramisu/setting.py:373
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:415 #: tiramisu/setting.py:417
msgid "cannot add those properties: {0}" msgid "cannot add those properties: {0}"
msgstr "ne peut pas ajouter ces propriétés : {0}" msgstr "ne peut pas ajouter ces propriétés : {0}"
#: tiramisu/setting.py:480 #: tiramisu/setting.py:490
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:490 #: tiramisu/setting.py:500
msgid "trying to access to an {0} named: {1} with properties {2}" msgid "trying to access to an {0} named: {1} with properties {2}"
msgstr "tentative d'accès à une {0} nommée : {1} avec les propriétés {2}" msgstr "tentative d'accès à une {0} nommée : {1} avec les propriétés {2}"
#: tiramisu/setting.py:509 #: tiramisu/setting.py:519
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:516 tiramisu/value.py:445 #: tiramisu/setting.py:526 tiramisu/value.py:464
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:604 #: tiramisu/setting.py:614
msgid "" msgid ""
"malformed requirements imbrication detected for option: '{0}' with " "malformed requirements imbrication detected for option: '{0}' with "
"requirement on: '{1}'" "requirement on: '{1}'"
@ -680,7 +680,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:615 #: tiramisu/setting.py:625
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}"
@ -696,7 +696,7 @@ msgstr "ne peut pas importer le stockage {0}"
msgid "option {0} not already exists in storage {1}" msgid "option {0} not already exists in storage {1}"
msgstr "option {0} n'existe pas dans l'espace de stockage {1}" msgstr "option {0} n'existe pas dans l'espace de stockage {1}"
#: tiramisu/storage/__init__.py:128 #: tiramisu/storage/__init__.py:133
msgid "unable to get storages:" msgid "unable to get storages:"
msgstr "impossible de récupérer les storages :" msgstr "impossible de récupérer les storages :"
@ -705,34 +705,39 @@ 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/storage/dictionary/option.py:138 #: tiramisu/storage/dictionary/option.py:138
#: tiramisu/storage/sqlalchemy/option.py:431 tiramisu/value.py:509 #: tiramisu/storage/sqlalchemy/option.py:431 tiramisu/value.py:528
msgid "information's item not found: {0}" msgid "information's item not found: {0}"
msgstr "aucune config spécifiée alors que c'est nécessaire" msgstr "aucune config spécifiée alors que c'est nécessaire"
#: tiramisu/storage/dictionary/option.py:359 #: tiramisu/storage/dictionary/option.py:365
#: tiramisu/storage/sqlalchemy/option.py:475 #: tiramisu/storage/sqlalchemy/option.py:475
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/storage/dictionary/option.py:365 #: tiramisu/storage/dictionary/option.py:369
msgid "use impl_get_path_by_opt only with root OptionDescription"
msgstr ""
"utiliser impl_get_path_by_opt seulement avec une OptionDescription racine"
#: tiramisu/storage/dictionary/option.py:373
#: tiramisu/storage/sqlalchemy/option.py:482 #: tiramisu/storage/sqlalchemy/option.py:482
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/storage/dictionary/option.py:414 #: tiramisu/storage/dictionary/option.py:422
msgid "cannot find dynpath" msgid "cannot find dynpath"
msgstr "ne peut trouver le dynpath" msgstr "ne peut trouver le dynpath"
#: tiramisu/storage/dictionary/option.py:504 #: tiramisu/storage/dictionary/option.py:512
#: tiramisu/storage/sqlalchemy/option.py:627 #: tiramisu/storage/sqlalchemy/option.py:627
msgid "suffix and context needed if it's a dyn option" msgid "suffix and context needed if it's a dyn option"
msgstr "suffix et context obligatoire si c'est une option dynamique" msgstr "suffix et context obligatoire si c'est une option dynamique"
#: tiramisu/storage/dictionary/option.py:517 #: tiramisu/storage/dictionary/option.py:525
msgid "{0} instance has no attribute '_readonly'" msgid "{0} instance has no attribute '_readonly'"
msgstr "{0} instance n'a pas l'attribut '_readonly'" msgstr "{0} instance n'a pas l'attribut '_readonly'"
#: tiramisu/storage/dictionary/option.py:531 #: tiramisu/storage/dictionary/option.py:539
#: tiramisu/storage/sqlalchemy/option.py:657 #: tiramisu/storage/sqlalchemy/option.py:657
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}"
@ -755,52 +760,52 @@ msgstr "un espace de stockage dictionary ne peut être persistant"
msgid "optiondescription has no value" msgid "optiondescription has no value"
msgstr "une optiondescription n'a pas de valeur" msgstr "une optiondescription n'a pas de valeur"
#: tiramisu/value.py:337 #: tiramisu/value.py:350
msgid "you should only set value with config" msgid "you should only set value with config"
msgstr "vous devez seul affecter une valeur avec un config" msgstr "vous devez seul affecter une valeur avec un config"
#: tiramisu/value.py:414 #: tiramisu/value.py:432
msgid "owner only avalaible for an option" msgid "owner only avalaible for an option"
msgstr "owner seulement possible pour une option" msgstr "owner seulement possible pour une option"
#: tiramisu/value.py:452 #: tiramisu/value.py:471
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:550 #: tiramisu/value.py:572
msgid "can force cache only if cache is actived in config" msgid "can force cache only if cache is actived in config"
msgstr "" msgstr ""
"peut force la mise en cache seulement si le cache est activé dans la config" "peut force la mise en cache seulement si le cache est activé dans la config"
#: tiramisu/value.py:589 #: tiramisu/value.py:611
msgid "{0} is already a Multi " msgid "{0} is already a Multi "
msgstr "{0} est déjà une Multi" msgstr "{0} est déjà une Multi"
#: tiramisu/value.py:659 #: tiramisu/value.py:682
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:683 #: tiramisu/value.py:709
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:687 #: tiramisu/value.py:713
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:696 #: tiramisu/value.py:722
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:704 #: tiramisu/value.py:730
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:717 #: tiramisu/value.py:746
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:749 #: tiramisu/value.py:781
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"

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: 2015-04-19 09:44+CEST\n" "POT-Creation-Date: 2015-07-27 10:05+CEST\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"
@ -19,40 +19,40 @@ msgstr ""
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/config.py:62 #: tiramisu/config.py:61
msgid "descr must be an optiondescription, not {0}" msgid "descr must be an optiondescription, not {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:142 #: tiramisu/config.py:141
msgid "unknown group_type: {0}" msgid "unknown group_type: {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:181 tiramisu/setting.py:323 tiramisu/value.py:54 #: tiramisu/config.py:180 tiramisu/setting.py:326 tiramisu/value.py:54
#: tiramisu/value.py:624 #: tiramisu/value.py:645
msgid "the context does not exist anymore" msgid "the context does not exist anymore"
msgstr "" msgstr ""
#: tiramisu/config.py:186 #: tiramisu/config.py:185
msgid "no option description found for this config (may be GroupConfig)" msgid "no option description found for this config (may be GroupConfig)"
msgstr "" msgstr ""
#: tiramisu/config.py:214 #: tiramisu/config.py:213
msgid "can't assign to an OptionDescription" msgid "can't assign to an OptionDescription"
msgstr "" msgstr ""
#: tiramisu/config.py:343 #: tiramisu/config.py:342
msgid "unknown type_ type {0}for _find" msgid "unknown type_ type {0}for _find"
msgstr "" msgstr ""
#: tiramisu/config.py:383 #: tiramisu/config.py:382
msgid "no option found in config with these criteria" msgid "no option found in config with these criteria"
msgstr "" msgstr ""
#: tiramisu/config.py:433 #: tiramisu/config.py:432
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:452 #: tiramisu/config.py:451
msgid "unexpected path {0}, should start with {1}" msgid "unexpected path {0}, should start with {1}"
msgstr "" msgstr ""
@ -72,39 +72,39 @@ msgstr ""
msgid "invalid name: {0} for config" msgid "invalid name: {0} for config"
msgstr "" msgstr ""
#: tiramisu/config.py:669 #: tiramisu/config.py:680
msgid "groupconfig's children must be a list" msgid "groupconfig's children must be a list"
msgstr "" msgstr ""
#: tiramisu/config.py:673 #: tiramisu/config.py:684
msgid "groupconfig's children must be Config, MetaConfig or GroupConfig" msgid "groupconfig's children must be Config, MetaConfig or GroupConfig"
msgstr "" msgstr ""
#: tiramisu/config.py:676 #: tiramisu/config.py:687
msgid "name must be set to config before creating groupconfig" msgid "name must be set to config before creating groupconfig"
msgstr "" msgstr ""
#: tiramisu/config.py:684 #: tiramisu/config.py:695
msgid "config name must be uniq in groupconfig for {0}" msgid "config name must be uniq in groupconfig for {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:799 #: tiramisu/config.py:810
msgid "metaconfig's children should be config, not {0}" msgid "metaconfig's children should be config, not {0}"
msgstr "" msgstr ""
#: tiramisu/config.py:803 #: tiramisu/config.py:814
msgid "child has already a metaconfig's" msgid "child has already a metaconfig's"
msgstr "" msgstr ""
#: tiramisu/config.py:807 #: tiramisu/config.py:818
msgid "all config in metaconfig must have the same optiondescription" msgid "all config in metaconfig must have the same optiondescription"
msgstr "" msgstr ""
#: tiramisu/config.py:819 #: tiramisu/config.py:830
msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config" msgid "force_default, force_default_if_same or force_dont_change_value cannot be set with only_config"
msgstr "" msgstr ""
#: tiramisu/config.py:825 #: tiramisu/config.py:836
msgid "force_default and force_dont_change_value cannot be set together" msgid "force_default and force_dont_change_value cannot be set together"
msgstr "" msgstr ""
@ -176,127 +176,127 @@ msgstr ""
msgid "invalid unicode or string" msgid "invalid unicode or string"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:549 tiramisu/option/baseoption.py:594 #: tiramisu/option/baseoption.py:549 tiramisu/option/baseoption.py:590
msgid "invalid value for option {0}: {1}" msgid "invalid value for option {0}: {1}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:562 #: tiramisu/option/baseoption.py:558
msgid "do_validation for {0}: error in value" msgid "do_validation for {0}: error in value"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:568 #: tiramisu/option/baseoption.py:564
msgid "do_validation for {0}: warning in value" msgid "do_validation for {0}: warning in value"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:578 #: tiramisu/option/baseoption.py:574
msgid "do_validation for {0}: error in consistency" msgid "do_validation for {0}: error in consistency"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:582 #: tiramisu/option/baseoption.py:578
msgid "do_validation for {0}: warning in consistency" msgid "do_validation for {0}: warning in consistency"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:586 #: tiramisu/option/baseoption.py:582
msgid "warning on the value of the option {0}: {1}" msgid "warning on the value of the option {0}: {1}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:606 tiramisu/option/baseoption.py:615 #: tiramisu/option/baseoption.py:602 tiramisu/option/baseoption.py:611
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 "" msgstr ""
#: tiramisu/option/baseoption.py:621 #: tiramisu/option/baseoption.py:617
msgid "invalid value {0} for option {1} which must be a list of list" msgid "invalid value {0} for option {1} which must be a list of list"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:674 #: tiramisu/option/baseoption.py:670
msgid "'{0}' ({1}) cannot add consistency, option is read-only" msgid "'{0}' ({1}) cannot add consistency, option is read-only"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:686 #: tiramisu/option/baseoption.py:682
msgid "unknow parameter {0} in consistency" msgid "unknow parameter {0} in consistency"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:693 #: tiramisu/option/baseoption.py:689
msgid "consistency must be set with an option" msgid "consistency must be set with an option"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:696 tiramisu/option/baseoption.py:703 #: tiramisu/option/baseoption.py:692 tiramisu/option/baseoption.py:699
msgid "almost one option in consistency is in a dynoptiondescription but not all" msgid "almost one option in consistency is in a dynoptiondescription but not all"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:699 #: tiramisu/option/baseoption.py:695
msgid "option in consistency must be in same dynoptiondescription" msgid "option in consistency must be in same dynoptiondescription"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:706 #: tiramisu/option/baseoption.py:702
msgid "cannot add consistency with itself" msgid "cannot add consistency with itself"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:708 #: tiramisu/option/baseoption.py:704
msgid "every options in consistency must be multi or none" msgid "every options in consistency must be multi or none"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:712 #: tiramisu/option/baseoption.py:708
msgid "consistency {0} not available for this option" msgid "consistency {0} not available for this option"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:741 #: tiramisu/option/baseoption.py:737
msgid "same value for {0} and {1}, should be different" msgid "same value for {0} and {1}, should be different"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:743 #: tiramisu/option/baseoption.py:739
msgid "same value for {0} and {1}, must be different" msgid "same value for {0} and {1}, must be different"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:800 #: tiramisu/option/baseoption.py:795
msgid "default value not allowed if option: {0} is calculated" msgid "default value not allowed if option: {0} is calculated"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:822 #: tiramisu/option/baseoption.py:817
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/baseoption.py:828 #: tiramisu/option/baseoption.py:823
msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}" msgid "malformed requirements for option: {0} unknown keys {1}, must only {2}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:839 #: tiramisu/option/baseoption.py:834
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/baseoption.py:843 #: tiramisu/option/baseoption.py:838
msgid "malformed requirements for option: {0} action cannot be force_store_value" msgid "malformed requirements for option: {0} action cannot be force_store_value"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:848 #: tiramisu/option/baseoption.py:843
msgid "malformed requirements for option: {0} inverse must be boolean" msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:852 #: tiramisu/option/baseoption.py:847
msgid "malformed requirements for option: {0} transitive must be boolean" msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:856 #: tiramisu/option/baseoption.py:851
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/baseoption.py:860 #: tiramisu/option/baseoption.py:855
msgid "malformed requirements must be an option in option {0}" msgid "malformed requirements must be an option in option {0}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:863 #: tiramisu/option/baseoption.py:858
msgid "malformed requirements option {0} must not be a multi for {1}" msgid "malformed requirements option {0} must not be a multi for {1}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:870 #: tiramisu/option/baseoption.py:865
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/baseoption.py:875 #: tiramisu/option/baseoption.py:870
msgid "inconsistency in action types for option: {0} action: {1}" msgid "inconsistency in action types for option: {0} action: {1}"
msgstr "" msgstr ""
#: tiramisu/option/baseoption.py:903 #: tiramisu/option/baseoption.py:898
msgid "malformed symlinkoption must be an option for symlink {0}" msgid "malformed symlinkoption must be an option for symlink {0}"
msgstr "" msgstr ""
@ -320,7 +320,7 @@ msgstr ""
msgid "callback of master's option shall not refered a slave's ones" msgid "callback of master's option shall not refered a slave's ones"
msgstr "" msgstr ""
#: tiramisu/option/masterslave.py:259 #: tiramisu/option/masterslave.py:260
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 ""
@ -533,91 +533,91 @@ msgstr ""
msgid "option must not start as dynoptiondescription" msgid "option must not start as dynoptiondescription"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:119 #: tiramisu/option/optiondescription.py:117
msgid "consistency with option {0} which is not in Config" msgid "consistency with option {0} which is not in Config"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:145 #: tiramisu/option/optiondescription.py:143
msgid "duplicate option: {0}" msgid "duplicate option: {0}"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:156 #: tiramisu/option/optiondescription.py:154
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/optiondescription.py:164 #: tiramisu/option/optiondescription.py:162
msgid "group_type: {0} not allowed" msgid "group_type: {0} not allowed"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:262 #: tiramisu/option/optiondescription.py:260
msgid "DynOptionDescription callback return not uniq value" msgid "DynOptionDescription callback return not uniq value"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:265 #: tiramisu/option/optiondescription.py:263
msgid "invalid suffix: {0} for option" msgid "invalid suffix: {0} for option"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:318 #: tiramisu/option/optiondescription.py:320
msgid "cannot set optiondescription in an dynoptiondescription" msgid "cannot set optiondescription in an dynoptiondescription"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:323 #: tiramisu/option/optiondescription.py:325
msgid "cannot set symlinkoption in an dynoptiondescription" msgid "cannot set symlinkoption in an dynoptiondescription"
msgstr "" msgstr ""
#: tiramisu/option/optiondescription.py:331 #: tiramisu/option/optiondescription.py:333
msgid "callback is mandatory for dynoptiondescription" msgid "callback is mandatory for dynoptiondescription"
msgstr "" msgstr ""
#: tiramisu/setting.py:124 #: tiramisu/setting.py:127
msgid "can't rebind {0}" msgid "can't rebind {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:129 #: tiramisu/setting.py:132
msgid "can't unbind {0}" msgid "can't unbind {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:257 #: tiramisu/setting.py:260
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:346 #: tiramisu/setting.py:349
msgid "you should only append/remove properties" msgid "you should only append/remove properties"
msgstr "" msgstr ""
#: tiramisu/setting.py:350 #: tiramisu/setting.py:353
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:371 #: tiramisu/setting.py:373
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:415 #: tiramisu/setting.py:417
msgid "cannot add those properties: {0}" msgid "cannot add those properties: {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:480 #: tiramisu/setting.py:490
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:490 #: tiramisu/setting.py:500
msgid "trying to access to an {0} named: {1} with properties {2}" msgid "trying to access to an {0} named: {1} with properties {2}"
msgstr "" msgstr ""
#: tiramisu/setting.py:509 #: tiramisu/setting.py:519
msgid "permissive must be a tuple" msgid "permissive must be a tuple"
msgstr "" msgstr ""
#: tiramisu/setting.py:516 tiramisu/value.py:445 #: tiramisu/setting.py:526 tiramisu/value.py:464
msgid "invalid generic owner {0}" msgid "invalid generic owner {0}"
msgstr "" msgstr ""
#: tiramisu/setting.py:604 #: tiramisu/setting.py:614
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:615 #: tiramisu/setting.py:625
msgid "option '{0}' has requirement's property error: {1} {2}" msgid "option '{0}' has requirement's property error: {1} {2}"
msgstr "" msgstr ""
@ -633,7 +633,7 @@ msgstr ""
msgid "option {0} not already exists in storage {1}" msgid "option {0} not already exists in storage {1}"
msgstr "" msgstr ""
#: tiramisu/storage/__init__.py:128 #: tiramisu/storage/__init__.py:133
msgid "unable to get storages:" msgid "unable to get storages:"
msgstr "" msgstr ""
@ -642,34 +642,38 @@ msgid "invalid default_multi value {0} for option {1}: {2}"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:138 #: tiramisu/storage/dictionary/option.py:138
#: tiramisu/storage/sqlalchemy/option.py:431 tiramisu/value.py:509 #: tiramisu/storage/sqlalchemy/option.py:431 tiramisu/value.py:528
msgid "information's item not found: {0}" msgid "information's item not found: {0}"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:359 #: tiramisu/storage/dictionary/option.py:365
#: tiramisu/storage/sqlalchemy/option.py:475 #: tiramisu/storage/sqlalchemy/option.py:475
msgid "no option for path {0}" msgid "no option for path {0}"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:365 #: tiramisu/storage/dictionary/option.py:369
msgid "use impl_get_path_by_opt only with root OptionDescription"
msgstr ""
#: tiramisu/storage/dictionary/option.py:373
#: tiramisu/storage/sqlalchemy/option.py:482 #: tiramisu/storage/sqlalchemy/option.py:482
msgid "no option {0} found" msgid "no option {0} found"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:414 #: tiramisu/storage/dictionary/option.py:422
msgid "cannot find dynpath" msgid "cannot find dynpath"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:504 #: tiramisu/storage/dictionary/option.py:512
#: tiramisu/storage/sqlalchemy/option.py:627 #: tiramisu/storage/sqlalchemy/option.py:627
msgid "suffix and context needed if it's a dyn option" msgid "suffix and context needed if it's a dyn option"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:517 #: tiramisu/storage/dictionary/option.py:525
msgid "{0} instance has no attribute '_readonly'" msgid "{0} instance has no attribute '_readonly'"
msgstr "" msgstr ""
#: tiramisu/storage/dictionary/option.py:531 #: tiramisu/storage/dictionary/option.py:539
#: tiramisu/storage/sqlalchemy/option.py:657 #: tiramisu/storage/sqlalchemy/option.py:657
msgid "unknown Option {0} in OptionDescription {1}" msgid "unknown Option {0} in OptionDescription {1}"
msgstr "" msgstr ""
@ -691,51 +695,51 @@ msgstr ""
msgid "optiondescription has no value" msgid "optiondescription has no value"
msgstr "" msgstr ""
#: tiramisu/value.py:337 #: tiramisu/value.py:350
msgid "you should only set value with config" msgid "you should only set value with config"
msgstr "" msgstr ""
#: tiramisu/value.py:414 #: tiramisu/value.py:432
msgid "owner only avalaible for an option" msgid "owner only avalaible for an option"
msgstr "" msgstr ""
#: tiramisu/value.py:452 #: tiramisu/value.py:471
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:550 #: tiramisu/value.py:572
msgid "can force cache only if cache is actived in config" msgid "can force cache only if cache is actived in config"
msgstr "" msgstr ""
#: tiramisu/value.py:589 #: tiramisu/value.py:611
msgid "{0} is already a Multi " msgid "{0} is already a Multi "
msgstr "" msgstr ""
#: tiramisu/value.py:659 #: tiramisu/value.py:682
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:683 #: tiramisu/value.py:709
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:687 #: tiramisu/value.py:713
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:696 #: tiramisu/value.py:722
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:704 #: tiramisu/value.py:730
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:717 #: tiramisu/value.py:746
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:749 #: tiramisu/value.py:781
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 ""