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'
#FIXME test impl_get_xxx pour OD ou ne pas cacher
def test_config_impl_get_path_by_opt():
descr = make_description()
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)")
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():
descr = make_description()
config = Config(descr)

View File

@ -37,32 +37,6 @@ def make_description():
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():
"iteration on config object"
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_without_dot='string')")
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')
#FIXME il y a une validation sur default_multi ?
def test_validator():
opt1 = StrOption('opt1', '', validator=return_true, 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():
opt0 = StrOption('opt0', '', default='val')
opt0
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):
fake_config = Config(self._impl_descr, persistent=False,
force_storages=get_storages_validation(),
force_values=get_storages_validation(),
force_settings=self.cfgimpl_get_settings())
fake_config.cfgimpl_get_values()._p_._values = self.cfgimpl_get_values()._p_.get_modified_values()
return fake_config
@ -619,7 +619,7 @@ class Config(_CommonConfig):
__slots__ = ('__weakref__', '_impl_test', '_impl_name')
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
:param descr: describes the configuration schema
@ -632,24 +632,20 @@ class Config(_CommonConfig):
:param persistent: if persistent, don't delete storage when leaving
:type persistent: `boolean`
"""
#if force_storages is None:
settings, values = get_storages(self, session_id, persistent,
only_value=not force_settings is None)
#else:
# settings, values = force_storages
if force_settings is not None and force_values is not None:
self._impl_settings = force_settings
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))
if force_settings is None:
self._impl_settings = Settings(self, settings)
else:
self._impl_settings = force_settings
self._impl_values = Values(self, values)
super(Config, self).__init__(descr, weakref.ref(self))
if force_settings is None:
self._impl_build_all_caches()
self._impl_meta = None
#undocumented option used only in test script

View File

@ -106,6 +106,7 @@ def _impl_getstate_setting():
def get_storage(type_, session_id, persistent, test): # pragma: optional cover
"""all used when __setstate__ a Config
"""
#FIXME ca sert ???
if type_ == 'option':
return storage_option_type.get().Storage(session_id, persistent, test)
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)
def get_storages(context, session_id, persistent, only_value=False):
def get_storages(context, session_id, persistent):
def gen_id(config):
return str(id(config)) + str(time()) + str(randint(0, 500))
@ -122,9 +123,6 @@ def get_storages(context, session_id, persistent, only_value=False):
session_id = gen_id(context)
imp = storage_type.get()
storage = imp.Storage(session_id, persistent)
if only_value:
settings = None
else:
settings = imp.Settings(storage)
values = imp.Values(storage)
try:
@ -143,8 +141,8 @@ def get_storages_option(type_):
def get_storages_validation():
imp = storage_validation.get()
storage = imp.Storage('pouet', persistent=False, test=True)
return imp.Settings(storage), imp.Values(storage)
storage = imp.Storage('__validator_storage', persistent=False, test=True)
return imp.Values(storage)
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))
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:
return self._cache_paths[1][self._cache_paths[0].index(opt)]
except ValueError: # pragma: optional cover

View File

@ -213,9 +213,8 @@ class _Consistency(SqlAlchemyBase):
def __init__(self, func, all_cons_opts, params):
self.func = func
for option in all_cons_opts:
for option in all_cons_opts[1:]:
option._consistencies.append(self)
print type(option._consistencies)
self.params = params
@ -278,6 +277,7 @@ class _Base(SqlAlchemyBase):
_calc_props = relationship("_CalcProperties", collection_class=set)
_calc_properties = association_proxy("_calc_props", "name")
_warnings_only = Column(Boolean)
_allow_empty_list = Column(Boolean)
_readonly = Column(Boolean, default=False)
_consistencies = relationship('_Consistency', secondary=consistency_table,
backref=backref('options',
@ -295,13 +295,15 @@ class _Base(SqlAlchemyBase):
#def __init__(self):
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)
self._name = name
if multi is not undefined:
self._multi = multi
if warnings_only is not undefined:
self._warnings_only = warnings_only
if allow_empty_list is not undefined:
self._allow_empty_list = allow_empty_list
if doc is not undefined:
self._informations = {'doc': doc}
if opt is not undefined:
@ -405,6 +407,12 @@ class _Base(SqlAlchemyBase):
def impl_is_submulti(self):
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):
return self._warnings_only
@ -479,6 +487,9 @@ class StorageOptionDescription(object):
ret = util.session.query(Cache).filter_by(descr=self.id,
option=opt.id).first()
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))
return ret.path

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tiramisu\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"
"Last-Translator: Emmanuel Garette <egarette@cadoles.com>\n"
"Language-Team: Tiramisu's team <egarette@cadoles.com>\n"
@ -10,7 +10,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\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"
"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 : "
"{2}"
#: tiramisu/config.py:62
#: tiramisu/config.py:61
msgid "descr must be an optiondescription, not {0}"
msgstr "descr doit être une optiondescription pas un {0}"
#: tiramisu/config.py:142
#: tiramisu/config.py:141
msgid "unknown group_type: {0}"
msgstr "group_type inconnu: {0}"
#: tiramisu/config.py:181 tiramisu/setting.py:323 tiramisu/value.py:54
#: tiramisu/value.py:624
#: tiramisu/config.py:180 tiramisu/setting.py:326 tiramisu/value.py:54
#: tiramisu/value.py:645
msgid "the context does not exist anymore"
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)"
msgstr ""
"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"
msgstr "ne peut pas attribuer une valeur à une OptionDescription"
#: tiramisu/config.py:343
#: tiramisu/config.py:342
msgid "unknown type_ type {0}for _find"
msgstr "type_ type {0} pour _find inconnu"
#: tiramisu/config.py:383
#: tiramisu/config.py:382
msgid "no option found in config with these criteria"
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"
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}"
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"
msgstr "nom invalide : {0} pour la config"
#: tiramisu/config.py:669
#: tiramisu/config.py:680
msgid "groupconfig's children must be a list"
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"
msgstr ""
"les enfants d'un groupconfig doivent être des Config, MetaConfig ou "
"GroupConfig"
#: tiramisu/config.py:676
#: tiramisu/config.py:687
msgid "name must be set to config before creating 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}"
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}"
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"
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"
msgstr ""
"toutes les configs d'une metaconfig doivent avoir la même optiondescription"
#: 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"
@ -114,7 +114,7 @@ msgstr ""
"force_default, force_default_if_same ou force_dont_change_value ne peuvent "
"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"
msgstr ""
"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"
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}"
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"
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"
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"
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"
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}"
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"
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"
msgstr ""
"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"
msgstr ""
"'{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"
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"
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 ""
"almost one option in consistency is in a dynoptiondescription but not all"
msgstr ""
"au moins une option dans le test de consistance est dans une "
"dynoptiondescription mais pas toutes"
#: tiramisu/option/baseoption.py:699
#: tiramisu/option/baseoption.py:695
msgid "option in consistency must be in same dynoptiondescription"
msgstr ""
"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"
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"
msgstr ""
"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"
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"
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"
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"
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"
msgstr ""
"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}"
msgstr ""
"requirements mal formés pour l'option : {0} clefs inconnues {1}, doit "
"seulement avoir {2}"
#: tiramisu/option/baseoption.py:839
#: tiramisu/option/baseoption.py:834
msgid ""
"malformed requirements for option: {0} require must have option, expected "
"and action keys"
@ -300,49 +300,49 @@ msgstr ""
"requirements malformé pour l'option : {0} l'exigence doit avoir les clefs "
"option, expected et action"
#: tiramisu/option/baseoption.py:843
#: tiramisu/option/baseoption.py:838
msgid ""
"malformed requirements for option: {0} action cannot be force_store_value"
msgstr ""
"requirements mal formés pour l'option : {0} action ne peut pas être "
"force_store_value"
#: tiramisu/option/baseoption.py:848
#: tiramisu/option/baseoption.py:843
msgid "malformed requirements for option: {0} inverse must be boolean"
msgstr ""
"requirements mal formés pour l'option : {0} inverse doit être un booléen"
#: tiramisu/option/baseoption.py:852
#: tiramisu/option/baseoption.py:847
msgid "malformed requirements for option: {0} transitive must be boolean"
msgstr ""
"requirements mal formés pour l'option : {0} transitive doit être booléen"
#: tiramisu/option/baseoption.py:856
#: tiramisu/option/baseoption.py:851
msgid "malformed requirements for option: {0} same_action must be boolean"
msgstr ""
"requirements mal formés pour l'option : {0} same_action doit être un booléen"
#: tiramisu/option/baseoption.py:860
#: tiramisu/option/baseoption.py:855
msgid "malformed requirements must be an option in option {0}"
msgstr "requirements mal formés doit être une option dans l'option {0}"
#: tiramisu/option/baseoption.py:863
#: tiramisu/option/baseoption.py:858
msgid "malformed requirements option {0} must not be a multi for {1}"
msgstr ""
"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 ""
"malformed requirements second argument must be valid for option {0}: {1}"
msgstr ""
"requirements mal formés deuxième argument doit être valide pour l'option "
"{0} : {1}"
#: tiramisu/option/baseoption.py:875
#: tiramisu/option/baseoption.py:870
msgid "inconsistency in action types for option: {0} action: {1}"
msgstr "incohérence dans les types action pour l'option : {0} action {1}"
#: tiramisu/option/baseoption.py:903
#: tiramisu/option/baseoption.py:898
msgid "malformed symlinkoption must be an option for 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 "
"esclaves"
#: tiramisu/option/masterslave.py:259
#: tiramisu/option/masterslave.py:260
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"
@ -587,92 +587,92 @@ msgstr "nom de l'option dupliqué : {0}"
msgid "option must not start as 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"
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}"
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})"
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"
msgstr "group_type : {0} non autorisé"
#: tiramisu/option/optiondescription.py:262
#: tiramisu/option/optiondescription.py:260
msgid "DynOptionDescription callback return not uniq value"
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"
msgstr "suffix invalide : {0} pour l'option"
#: tiramisu/option/optiondescription.py:318
#: tiramisu/option/optiondescription.py:320
msgid "cannot set optiondescription in an dynoptiondescription"
msgstr ""
"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"
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"
msgstr "callback est obligatoire pour un dynoptiondescription"
#: tiramisu/setting.py:124
#: tiramisu/setting.py:127
msgid "can't rebind {0}"
msgstr "ne peut redéfinir ({0})"
#: tiramisu/setting.py:129
#: tiramisu/setting.py:132
msgid "can't unbind {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"
msgstr ""
"ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est "
"calculée"
#: tiramisu/setting.py:346
#: tiramisu/setting.py:349
msgid "you should only append/remove properties"
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"
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"
msgstr ""
"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}"
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"
msgstr ""
"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}"
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"
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}"
msgstr "invalide owner générique {0}"
#: tiramisu/setting.py:604
#: tiramisu/setting.py:614
msgid ""
"malformed requirements imbrication detected for option: '{0}' with "
"requirement on: '{1}'"
@ -680,7 +680,7 @@ msgstr ""
"imbrication de requirements mal formés detectée pour l'option : '{0}' avec "
"requirement sur : '{1}'"
#: tiramisu/setting.py:615
#: tiramisu/setting.py:625
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}"
@ -696,7 +696,7 @@ msgstr "ne peut pas importer le stockage {0}"
msgid "option {0} not already exists in storage {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:"
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}"
#: 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}"
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
msgid "no option for path {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
msgid "no option {0} found"
msgstr "pas d'option {0} trouvée"
#: tiramisu/storage/dictionary/option.py:414
#: tiramisu/storage/dictionary/option.py:422
msgid "cannot find 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
msgid "suffix and context needed if it's a dyn option"
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'"
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
msgid "unknown Option {0} in 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"
msgstr "une optiondescription n'a pas de valeur"
#: tiramisu/value.py:337
#: tiramisu/value.py:350
msgid "you should only set value with 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"
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}"
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"
msgstr ""
"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 "
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"
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"
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"
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"
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"
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"
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"
msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave"

View File

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