From 138018dfe95093ca81a1d009e62c0ff00820692a Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sat, 25 Jan 2014 11:20:11 +0100 Subject: [PATCH 1/2] if we delete all reference to a Config and we have reference to old SubConfig, Values, Multi or Settings, make a ConfigError instead of AttributError on NoneType object --- test/test_config.py | 24 +++++++++++- tiramisu/config.py | 10 ++++- tiramisu/setting.py | 25 ++++++++---- tiramisu/value.py | 94 +++++++++++++++++++++++++++++---------------- 4 files changed, 110 insertions(+), 43 deletions(-) diff --git a/test/test_config.py b/test/test_config.py index 5cdbe7d..6db3fcf 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -9,7 +9,7 @@ from py.test import raises from tiramisu.config import Config from tiramisu.option import IntOption, FloatOption, StrOption, ChoiceOption, \ BoolOption, UnicodeOption, OptionDescription -from tiramisu.error import ConflictError +from tiramisu.error import ConflictError, ConfigError def make_description(): @@ -273,4 +273,24 @@ def test_no_validation(): setting.append('validator') raises(ValueError, 'c.test1') del(c.test1) - assert c.test1 == None + assert c.test1 is None + + +def test_delete_config_with_subconfig(): + test = IntOption('test', '') + multi = IntOption('multi', '', multi=True) + od = OptionDescription('od', '', [test, multi]) + odroot = OptionDescription('odroot', '', [od]) + c = Config(odroot) + sub = c.od + val = c.cfgimpl_get_values() + setting = c.cfgimpl_get_settings() + val[test] + val[multi] + setting[test] + sub.make_dict() + del(c) + raises(ConfigError, 'val[test]') + raises(ConfigError, 'val[multi]') + raises(ConfigError, 'setting[test]') + raises(ConfigError, 'sub.make_dict()') diff --git a/tiramisu/config.py b/tiramisu/config.py index 1381d57..4bc0e15 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -156,7 +156,15 @@ class SubConfig(object): __repr__ = __str__ def _cfgimpl_get_context(self): - return self._impl_context() + """context could be None, we need to test it + context is None only if all reference to `Config` object is deleted + (for example we delete a `Config` and we manipulate a reference to + old `SubConfig`, `Values`, `Multi` or `Settings`) + """ + context = self._impl_context() + if context is None: + raise ConfigError(_('the context does not exist anymore')) + return context def cfgimpl_get_description(self): if self._impl_descr is None: diff --git a/tiramisu/setting.py b/tiramisu/setting.py index 02da5ae..101b551 100644 --- a/tiramisu/setting.py +++ b/tiramisu/setting.py @@ -24,7 +24,7 @@ from time import time from copy import copy import weakref from tiramisu.error import (RequirementError, PropertiesOptionError, - ConstError) + ConstError, ConfigError) from tiramisu.i18n import _ @@ -328,6 +328,17 @@ class Settings(object): self.context = weakref.ref(context) self._p_ = storage + def _getcontext(self): + """context could be None, we need to test it + context is None only if all reference to `Config` object is deleted + (for example we delete a `Config` and we manipulate a reference to + old `SubConfig`, `Values`, `Multi` or `Settings`) + """ + context = self.context() + if context is None: + raise ConfigError(_('the context does not exist anymore')) + return context + #____________________________________________________________ # properties methods def __contains__(self, propname): @@ -357,7 +368,7 @@ class Settings(object): if opt is not None and _path is None: _path = self._get_path_by_opt(opt) self._p_.reset_properties(_path) - self.context().cfgimpl_reset_cache() + self._getcontext().cfgimpl_reset_cache() def _getproperties(self, opt=None, path=None, is_apply_req=True): if opt is None: @@ -410,7 +421,7 @@ class Settings(object): self._p_.reset_properties(path) else: self._p_.setproperties(path, properties) - self.context().cfgimpl_reset_cache() + self._getcontext().cfgimpl_reset_cache() #____________________________________________________________ def validate_properties(self, opt_or_descr, is_descr, is_write, path, @@ -458,7 +469,7 @@ class Settings(object): properties -= frozenset(('mandatory', 'frozen')) else: if 'mandatory' in properties and \ - not self.context().cfgimpl_get_values()._isempty( + not self._getcontext().cfgimpl_get_values()._isempty( opt_or_descr, value): properties.remove('mandatory') if is_write and 'everything_frozen' in self_properties: @@ -581,6 +592,7 @@ class Settings(object): # filters the callbacks calc_properties = set() + context = self._getcontext() for requires in opt._requires: for require in requires: option, expected, action, inverse, \ @@ -592,8 +604,7 @@ class Settings(object): " '{0}' with requirement on: " "'{1}'").format(path, reqpath)) try: - value = self.context()._getattr(reqpath, - force_permissive=True) + value = context._getattr(reqpath, force_permissive=True) except PropertiesOptionError as err: if not transitive: continue @@ -622,7 +633,7 @@ class Settings(object): :param opt: `Option`'s object :returns: path """ - return self.context().cfgimpl_get_description().impl_get_path_by_opt(opt) + return self._getcontext().cfgimpl_get_description().impl_get_path_by_opt(opt) def get_modified_properties(self): return self._p_.get_modified_properties() diff --git a/tiramisu/value.py b/tiramisu/value.py index 8c50373..a02196a 100644 --- a/tiramisu/value.py +++ b/tiramisu/value.py @@ -46,13 +46,24 @@ class Values(object): # the storage type is dictionary or sqlite3 self._p_ = storage + def _getcontext(self): + """context could be None, we need to test it + context is None only if all reference to `Config` object is deleted + (for example we delete a `Config` and we manipulate a reference to + old `SubConfig`, `Values`, `Multi` or `Settings`) + """ + context = self.context() + if context is None: + raise ConfigError(_('the context does not exist anymore')) + return context + def _getdefault(self, opt): """ actually retrieves the default value :param opt: the `option.Option()` object """ - meta = self.context().cfgimpl_get_meta() + meta = self._getcontext().cfgimpl_get_meta() if meta is not None: value = meta.cfgimpl_get_values()[opt] else: @@ -105,11 +116,11 @@ class Values(object): if path is None: path = self._get_opt_path(opt) if self._p_.hasvalue(path): - setting = self.context().cfgimpl_get_settings() + context = self._getcontext() + setting = context.cfgimpl_get_settings() opt.impl_validate(opt.impl_getdefault(), - self.context(), - 'validator' in setting) - self.context().cfgimpl_reset_cache() + context, 'validator' in setting) + context.cfgimpl_reset_cache() if (opt.impl_is_multi() and opt.impl_get_multitype() == multitypes.master): for slave in opt.impl_get_master_slaves(): @@ -137,7 +148,7 @@ class Values(object): callback, callback_params = opt._callback if callback_params is None: callback_params = {} - return carry_out_calculation(opt, config=self.context(), + return carry_out_calculation(opt, config=self._getcontext(), callback=callback, callback_params=callback_params, index=index, max_len=max_len) @@ -151,7 +162,7 @@ class Values(object): if path is None: path = self._get_opt_path(opt) ntime = None - setting = self.context().cfgimpl_get_settings() + setting = self._getcontext().cfgimpl_get_settings() if 'cache' in setting and self._p_.hascache(path): if 'expire' in setting: ntime = int(time()) @@ -176,7 +187,8 @@ class Values(object): def _getitem(self, opt, path, validate, force_permissive, force_properties, validate_properties): # options with callbacks - setting = self.context().cfgimpl_get_settings() + context = self._getcontext() + setting = context.cfgimpl_get_settings() is_frozen = 'frozen' in setting[opt] # For calculating properties, we need value (ie for mandatory value). # If value is calculating with a PropertiesOptionError's option @@ -196,7 +208,7 @@ class Values(object): if (opt.impl_is_multi() and opt.impl_get_multitype() == multitypes.slave): masterp = self._get_opt_path(opt.impl_get_master_slaves()) - mastervalue = getattr(self.context(), masterp) + mastervalue = getattr(context, masterp) lenmaster = len(mastervalue) if lenmaster == 0: value = [] @@ -230,7 +242,7 @@ class Values(object): else: value = self._getvalue(opt, path, validate) if config_error is None and validate: - opt.impl_validate(value, self.context(), 'validator' in setting) + opt.impl_validate(value, context, 'validator' in setting) if config_error is None and self._is_default_owner(path) and \ 'force_store_value' in setting[opt]: self.setitem(opt, value, path, is_write=False) @@ -251,8 +263,9 @@ class Values(object): # is_write is, for example, used with "force_store_value" # user didn't change value, so not write # valid opt - opt.impl_validate(value, self.context(), - 'validator' in self.context().cfgimpl_get_settings()) + context = self._getcontext() + opt.impl_validate(value, context, + 'validator' in context.cfgimpl_get_settings()) if opt.impl_is_multi() and not isinstance(value, Multi): value = Multi(value, self.context, opt, path, setitem=True) self._setvalue(opt, path, value, force_permissive=force_permissive, @@ -261,14 +274,15 @@ class Values(object): def _setvalue(self, opt, path, value, force_permissive=False, force_properties=None, is_write=True, validate_properties=True): - self.context().cfgimpl_reset_cache() + context = self._getcontext() + context.cfgimpl_reset_cache() if validate_properties: - setting = self.context().cfgimpl_get_settings() + setting = context.cfgimpl_get_settings() setting.validate_properties(opt, False, is_write, value=value, path=path, force_permissive=force_permissive, force_properties=force_properties) - owner = self.context().cfgimpl_get_settings().getowner() + owner = context.cfgimpl_get_settings().getowner() self._p_.setvalue(path, value, owner) def getowner(self, opt): @@ -285,7 +299,7 @@ class Values(object): def _getowner(self, path): owner = self._p_.getowner(path, owners.default) - meta = self.context().cfgimpl_get_meta() + meta = self._getcontext().cfgimpl_get_meta() if owner is owners.default and meta is not None: owner = meta.cfgimpl_get_values()._getowner(path) return owner @@ -337,7 +351,7 @@ class Values(object): :param opt: the `option.Option` object :returns: a string with points like "gc.dummy.my_option" """ - return self.context().cfgimpl_get_description().impl_get_path_by_opt(opt) + return self._getcontext().cfgimpl_get_description().impl_get_path_by_opt(opt) # information def set_information(self, key, value): @@ -402,12 +416,24 @@ class Multi(list): self._valid_master(value) super(Multi, self).__init__(value) + def _getcontext(self): + """context could be None, we need to test it + context is None only if all reference to `Config` object is deleted + (for example we delete a `Config` and we manipulate a reference to + old `SubConfig`, `Values`, `Multi` or `Settings`) + """ + context = self.context() + if context is None: + raise ConfigError(_('the context does not exist anymore')) + return context + def _valid_slave(self, value, setitem): #if slave, had values until master's one - values = self.context().cfgimpl_get_values() - masterp = self.context().cfgimpl_get_description().impl_get_path_by_opt( + context = self._getcontext() + values = context.cfgimpl_get_values() + masterp = context.cfgimpl_get_description().impl_get_path_by_opt( self.opt.impl_get_master_slaves()) - mastervalue = getattr(self.context(), masterp) + mastervalue = getattr(context, masterp) masterlen = len(mastervalue) valuelen = len(value) is_default_owner = not values._is_default_owner(self.path) or setitem @@ -431,7 +457,7 @@ class Multi(list): def _valid_master(self, value): masterlen = len(value) - values = self.context().cfgimpl_get_values() + values = self._getcontext().cfgimpl_get_values() for slave in self.opt._master_slaves: path = values._get_opt_path(slave) if not values._is_default_owner(path): @@ -458,18 +484,19 @@ class Multi(list): self._validate(value, index) #assume not checking mandatory property super(Multi, self).__setitem__(index, value) - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self) + self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self) def append(self, value=undefined, force=False): """the list value can be updated (appened) only if the option is a master """ + context = self._getcontext() if not force: if self.opt.impl_get_multitype() == multitypes.slave: raise SlaveError(_("cannot append a value on a multi option {0}" " which is a slave").format(self.opt._name)) elif self.opt.impl_get_multitype() == multitypes.master: - values = self.context().cfgimpl_get_values() + values = context.cfgimpl_get_values() if value is undefined and self.opt.impl_has_callback(): value = values._getcallback_value(self.opt) #Force None il return a list @@ -480,9 +507,9 @@ class Multi(list): value = self.opt.impl_getdefault_multi() self._validate(value, index) super(Multi, self).append(value) - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, - self, - validate_properties=not force) + context.cfgimpl_get_values()._setvalue(self.opt, self.path, + self, + validate_properties=not force) if not force and self.opt.impl_get_multitype() == multitypes.master: for slave in self.opt.impl_get_master_slaves(): path = values._get_opt_path(slave) @@ -513,7 +540,7 @@ class Multi(list): super(Multi, self).sort(key=key, reverse=reverse) else: super(Multi, self).sort(cmp=cmp, key=key, reverse=reverse) - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self) + self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self) def reverse(self): if self.opt.impl_get_multitype() in [multitypes.slave, @@ -521,7 +548,7 @@ class Multi(list): raise SlaveError(_("cannot reverse multi option {0} if master or " "slave").format(self.opt._name)) super(Multi, self).reverse() - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self) + self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self) def insert(self, index, obj): if self.opt.impl_get_multitype() in [multitypes.slave, @@ -529,7 +556,7 @@ class Multi(list): raise SlaveError(_("cannot insert multi option {0} if master or " "slave").format(self.opt._name)) super(Multi, self).insert(index, obj) - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self) + self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self) def extend(self, iterable): if self.opt.impl_get_multitype() in [multitypes.slave, @@ -537,12 +564,12 @@ class Multi(list): raise SlaveError(_("cannot extend multi option {0} if master or " "slave").format(self.opt._name)) super(Multi, self).extend(iterable) - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self) + self._getcontext().cfgimpl_get_values()._setvalue(self.opt, self.path, self) def _validate(self, value, force_index): if value is not None: try: - self.opt.impl_validate(value, context=self.context(), + self.opt.impl_validate(value, context=self._getcontext(), force_index=force_index) except ValueError as err: raise ValueError(_("invalid value {0} " @@ -560,13 +587,14 @@ class Multi(list): :type force: boolean :returns: item at index """ + context = self._getcontext() if not force: if self.opt.impl_get_multitype() == multitypes.slave: raise SlaveError(_("cannot pop a value on a multi option {0}" " which is a slave").format(self.opt._name)) elif self.opt.impl_get_multitype() == multitypes.master: for slave in self.opt.impl_get_master_slaves(): - values = self.context().cfgimpl_get_values() + values = context.cfgimpl_get_values() if not values.is_default_owner(slave): #get multi without valid properties values.getitem(slave, @@ -574,5 +602,5 @@ class Multi(list): ).pop(index, force=True) #set value without valid properties ret = super(Multi, self).pop(index) - self.context().cfgimpl_get_values()._setvalue(self.opt, self.path, self, validate_properties=not force) + context.cfgimpl_get_values()._setvalue(self.opt, self.path, self, validate_properties=not force) return ret From 77adc934e023dfcbc6f36ce3fb312656407407c2 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sat, 25 Jan 2014 11:40:04 +0100 Subject: [PATCH 2/2] update translation --- translations/fr/tiramisu.po | 238 +++++++++++++++++++----------------- translations/tiramisu.pot | 205 +++++++++++++++---------------- 2 files changed, 226 insertions(+), 217 deletions(-) diff --git a/translations/fr/tiramisu.po b/translations/fr/tiramisu.po index bff777c..d9bbc3e 100644 --- a/translations/fr/tiramisu.po +++ b/translations/fr/tiramisu.po @@ -1,31 +1,26 @@ msgid "" msgstr "" -"Project-Id-Version: \n" +"Project-Id-Version: Tiramisu\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-09-30 22:49+CEST\n" +"POT-Creation-Date: 2014-01-25 11:30+CET\n" "PO-Revision-Date: \n" "Last-Translator: Emmanuel Garette \n" -"Language-Team: LANGUAGE \n" +"Language-Team: Tiramisu's team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" -#: tiramisu/autolib.py:145 +#: tiramisu/autolib.py:159 msgid "" "unable to carry out a calculation, option {0} has properties: {1} for: {2}" msgstr "" "impossible d'effectuer le calcul, l'option {0} a les propriétés : {1} pour : " "{2}" -#: tiramisu/autolib.py:154 -msgid "" -"unable to carry out a calculation, option value with multi types must have " -"same length for: {0}" -msgstr "" -"impossible d'effectuer le calcul, la valeur d'une option avec le type multi " -"doit avoir la même longueur pour : {0}" - #: tiramisu/config.py:52 msgid "descr must be an optiondescription, not {0}" msgstr "descr doit être une optiondescription pas un {0}" @@ -34,72 +29,77 @@ msgstr "descr doit être une optiondescription pas un {0}" msgid "unknown group_type: {0}" msgstr "group_type inconnu: {0}" -#: tiramisu/config.py:163 +#: tiramisu/config.py:166 tiramisu/setting.py:339 tiramisu/value.py:57 +#: tiramisu/value.py:427 +msgid "the context does not exist anymore" +msgstr "le context n'existe plus" + +#: tiramisu/config.py:171 msgid "" "no option description found for this config (may be metaconfig without meta)" msgstr "" "pas d'option description trouvé pour cette config (peut être une metaconfig " "sans meta)" -#: tiramisu/config.py:189 +#: tiramisu/config.py:197 msgid "can't assign to an OptionDescription" msgstr "ne peut pas attribuer une valeur à une OptionDescription" -#: tiramisu/config.py:320 +#: tiramisu/config.py:330 msgid "unknown type_ type {0}for _find" msgstr "type_ type {0} pour _find inconnu" -#: tiramisu/config.py:359 +#: tiramisu/config.py:369 msgid "no option found in config with these criteria" msgstr "aucune option trouvée dans la config avec ces critères" -#: tiramisu/config.py:409 +#: tiramisu/config.py:419 msgid "make_dict can't filtering with value without option" msgstr "make_dict ne peut filtrer sur une valeur mais sans option" -#: tiramisu/config.py:430 +#: tiramisu/config.py:440 msgid "unexpected path {0}, should start with {1}" msgstr "chemin imprévu {0}, devrait commencer par {1}" -#: tiramisu/config.py:490 +#: tiramisu/config.py:500 msgid "opt in getowner must be an option not {0}" msgstr "opt dans getowner doit être une option pas {0}" -#: tiramisu/option.py:69 +#: tiramisu/option.py:67 msgid "invalid name: {0} for option" msgstr "nom invalide : {0} pour l'option" -#: tiramisu/option.py:78 +#: tiramisu/option.py:76 msgid "invalid properties type {0} for {1}, must be a tuple" msgstr "type des properties invalide {0} pour {1}, doit être un tuple" -#: tiramisu/option.py:116 +#: tiramisu/option.py:114 msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgstr "l'attribut {2} de l'objet '{0}' ({1}) est en lecture seule" -#: tiramisu/option.py:143 tiramisu/value.py:362 +#: tiramisu/option.py:141 tiramisu/value.py:376 msgid "information's item not found: {0}" msgstr "aucune config spécifié alors que c'est nécessaire" -#: tiramisu/option.py:205 +#: tiramisu/option.py:203 msgid "cannot serialize Option, only in OptionDescription" msgstr "ne peut serialiser une Option, seulement via une OptionDescription" -#: tiramisu/option.py:308 +#: tiramisu/option.py:306 msgid "a default_multi is set whereas multi is False in option: {0}" msgstr "" "une default_multi est renseignée alors que multi est False dans l'option : " "{0}" -#: tiramisu/option.py:314 +#: tiramisu/option.py:312 msgid "invalid default_multi value {0} for option {1}: {2}" msgstr "la valeur default_multi est invalide {0} pour l'option {1} : {2}" -#: tiramisu/option.py:319 +#: tiramisu/option.py:317 msgid "default value not allowed if option: {0} is calculated" msgstr "la valeur par défaut n'est pas possible si l'option {0} est calculée" -#: tiramisu/option.py:322 +#: tiramisu/option.py:320 msgid "" "params defined for a callback function but no callback defined yet for " "option {0}" @@ -107,72 +107,72 @@ msgstr "" "params définis pour une fonction callback mais par de callback encore " "définis pour l'option {0}" -#: tiramisu/option.py:361 +#: tiramisu/option.py:359 msgid "option not in all_cons_opts" msgstr "option non présentante dans all_cons_opts" -#: tiramisu/option.py:427 tiramisu/option.py:437 +#: tiramisu/option.py:425 tiramisu/option.py:435 msgid "invalid value for option {0}: {1}" msgstr "valeur invalide pour l'option {0} : {1}" -#: tiramisu/option.py:454 -msgid ""invalid value {0} for option {1} which must be a list" +#: tiramisu/option.py:452 +msgid "invalid value {0} for option {1} which must be a list" msgstr "valeur invalide pour l'option {0} : {1} laquelle doit être une liste" -#: tiramisu/option.py:514 +#: tiramisu/option.py:508 msgid "consistency should be set with an option" msgstr "consistency doit être configuré avec une option" -#: tiramisu/option.py:516 +#: tiramisu/option.py:510 msgid "cannot add consistency with itself" msgstr "ne peut ajouter une consistency avec lui même" -#: tiramisu/option.py:518 +#: tiramisu/option.py:512 msgid "every options in consistency should be multi or none" msgstr "" "toutes les options d'une consistency devrait être multi ou ne pas l'être" -#: tiramisu/option.py:538 +#: tiramisu/option.py:532 msgid "same value for {0} and {1}" msgstr "même valeur pour {0} et {1}" -#: tiramisu/option.py:647 +#: tiramisu/option.py:641 msgid "values must be a tuple for {0}" msgstr "values doit être un tuple pour {0}" -#: tiramisu/option.py:650 +#: tiramisu/option.py:644 msgid "open_values must be a boolean for {0}" msgstr "open_values doit être un booléen pour {0}" -#: tiramisu/option.py:672 +#: tiramisu/option.py:666 msgid "value {0} is not permitted, only {1} is allowed" msgstr "valeur {0} n'est pas permis, seules {1} sont autorisées" -#: tiramisu/option.py:684 +#: tiramisu/option.py:678 msgid "invalid boolean" msgstr "booléen invalide" -#: tiramisu/option.py:694 +#: tiramisu/option.py:688 msgid "invalid integer" msgstr "nombre invalide" -#: tiramisu/option.py:704 +#: tiramisu/option.py:698 msgid "invalid float" msgstr "invalide nombre flottan" -#: tiramisu/option.py:714 +#: tiramisu/option.py:708 msgid "invalid string" msgstr "invalide caractère" -#: tiramisu/option.py:731 +#: tiramisu/option.py:725 msgid "invalid unicode" msgstr "invalide unicode" -#: tiramisu/option.py:743 +#: tiramisu/option.py:737 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "symlinkoption mal formé, doit être une option pour symlink {0}" -#: tiramisu/option.py:792 +#: tiramisu/option.py:787 tiramisu/option.py:792 msgid "invalid IP" msgstr "adresse IP invalide" @@ -209,12 +209,12 @@ msgid "invalid len for opts" msgstr "longueur invalide pour opts" #: tiramisu/option.py:927 -msgid "invalid network {0} ({1}) with netmask {2} ({3}), this network is an IP" -msgstr "réseau invalide {0} ({1}) avec masque {2} ({3}), ce réseau est une IP" +msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP" +msgstr "réseau invalide {0} ({1}) avec masque {2}, ce réseau est une IP" #: tiramisu/option.py:932 -msgid "invalid IP {0} ({1}) with netmask {2} ({3}), this IP is a network" -msgstr "IP invalide {0} ({1}) avec masque {2} ({3}), cette IP est un réseau" +msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network" +msgstr "IP invalide {0} ({1}) avec masque {2}, cette IP est un réseau" #: tiramisu/option.py:937 msgid "invalid IP {0} ({1}) with netmask {2}" @@ -250,107 +250,108 @@ msgstr "allow_ip doit être un booléen" msgid "allow_without_dot must be a boolean" msgstr "allow_without_dot doit être un booléen" -#: tiramisu/option.py:1024 +#: tiramisu/option.py:1028 msgid "invalid domainname, must have dot" msgstr "nom de domaine invalide, doit avoir un point" -#: tiramisu/option.py:1026 +#: tiramisu/option.py:1030 msgid "invalid domainname's length (max 255)" msgstr "longueur du nom de domaine invalide (maximum {1})" -#: tiramisu/option.py:1028 +#: tiramisu/option.py:1032 msgid "invalid domainname's length (min 2)" msgstr "longueur du nom de domaine invalide (minimum 2)" -#: tiramisu/option.py:1030 +#: tiramisu/option.py:1034 msgid "invalid domainname" msgstr "nom de domaine invalide" -#: tiramisu/option.py:1049 +#: tiramisu/option.py:1047 msgid "invalid email address, should contains one @" msgstr "adresse email invalide, devrait contenir un @" -#: tiramisu/option.py:1052 +#: tiramisu/option.py:1050 msgid "invalid username in email address" msgstr "nom d'utilisateur invalide dans une adresse email" -#: tiramisu/option.py:1071 +#: tiramisu/option.py:1063 msgid "invalid url, should start with http:// or https://" msgstr "URL invalide, devrait démarré avec http:// ou https://" -#: tiramisu/option.py:1090 +#: tiramisu/option.py:1082 msgid "invalid url, port must be an between 0 and 65536" msgstr "URL invalide, port doit être entre 0 et 65536" -#: tiramisu/option.py:1096 -#, fuzzy +#: tiramisu/option.py:1088 msgid "invalid url, should ends with filename" msgstr "URL invalide, devrait finir avec un nom de fichier" -#: tiramisu/option.py:1107 +#: tiramisu/option.py:1099 msgid "invalid filename" msgstr "nom de fichier invalide" -#: tiramisu/option.py:1134 +#: tiramisu/option.py:1126 msgid "duplicate option name: {0}" msgstr "nom de l'option dupliqué : {0}" -#: tiramisu/option.py:1152 +#: tiramisu/option.py:1144 msgid "unknown Option {0} in OptionDescription {1}" msgstr "Option {0} inconnue pour l'OptionDescription {1}" -#: tiramisu/option.py:1203 +#: tiramisu/option.py:1195 msgid "duplicate option: {0}" msgstr "option dupliquée : {0}" -#: tiramisu/option.py:1233 +#: tiramisu/option.py:1225 msgid "consistency with option {0} which is not in Config" msgstr "consistency avec l'option {0} qui n'est pas dans une Config" -#: tiramisu/option.py:1241 +#: tiramisu/option.py:1233 msgid "no option for path {0}" msgstr "pas d'option pour le chemin {0}" -#: tiramisu/option.py:1247 +#: tiramisu/option.py:1239 msgid "no option {0} found" msgstr "pas d'option {0} trouvée" -#: tiramisu/option.py:1257 +#: tiramisu/option.py:1249 msgid "cannot change group_type if already set (old {0}, new {1})" msgstr "ne peut changer group_type si déjà spécifié (ancien {0}, nouveau {1})" -#: tiramisu/option.py:1270 +#: tiramisu/option.py:1261 msgid "master group {0} shall not have a subgroup" msgstr "groupe maître {0} ne doit pas avoir de sous-groupe" -#: tiramisu/option.py:1273 +#: tiramisu/option.py:1264 msgid "master group {0} shall not have a symlinkoption" msgstr "groupe maître {0} ne doit pas avoir de symlinkoption" -#: tiramisu/option.py:1276 +#: tiramisu/option.py:1267 msgid "not allowed option {0} in group {1}: this option is not a multi" msgstr "" "option non autorisée {0} dans le groupe {1} : cette option n'est pas une " "multi" -#: tiramisu/option.py:1287 +#: tiramisu/option.py:1277 msgid "master group with wrong master name for {0}" msgstr "le groupe maître avec un nom de maître érroné pour {0}" -#: tiramisu/option.py:1296 -msgid "no child has same nom has master group for: {0}" -msgstr "pas d'enfant avec le nom du groupe maître pour {0} " +#: tiramisu/option.py:1285 +msgid "callback of master's option shall not refered a slave's ones" +msgstr "" +"callback d'une variable maitre ne devrait pas référencer des variables " +"esclaves" -#: tiramisu/option.py:1299 +#: tiramisu/option.py:1293 msgid "group_type: {0} not allowed" msgstr "group_type : {0} non autorisé" -#: tiramisu/option.py:1391 +#: tiramisu/option.py:1385 msgid "malformed requirements type for option: {0}, must be a dict" msgstr "" "type requirements malformé pour l'option : {0}, doit être un dictionnaire" -#: tiramisu/option.py:1408 +#: tiramisu/option.py:1402 msgid "" "malformed requirements for option: {0} require must have option, expected " "and action keys" @@ -358,66 +359,66 @@ msgstr "" "requirements malformé pour l'option : {0} l'exigence doit avoir les clefs " "option, expected et action" -#: tiramisu/option.py:1413 +#: tiramisu/option.py:1407 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "" "requirements mal formés pour l'option : {0} inverse doit être un booléen" -#: tiramisu/option.py:1417 +#: tiramisu/option.py:1411 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "" "requirements mal formés pour l'option : {0} transitive doit être booléen" -#: tiramisu/option.py:1421 +#: tiramisu/option.py:1415 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" "requirements mal formés pour l'option : {0} same_action doit être un booléen" -#: tiramisu/option.py:1425 +#: tiramisu/option.py:1419 msgid "malformed requirements must be an option in option {0}" msgstr "requirements mal formés doit être une option dans l'option {0}" -#: tiramisu/option.py:1428 +#: tiramisu/option.py:1422 msgid "malformed requirements option {0} should not be a multi" msgstr "requirements mal formés l'option {0} ne doit pas être une multi" -#: tiramisu/option.py:1434 +#: tiramisu/option.py:1428 msgid "" "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" "requirements mal formés deuxième argument doit être valide pour l'option " "{0} : {1}" -#: tiramisu/option.py:1439 +#: tiramisu/option.py:1433 msgid "inconsistency in action types for option: {0} action: {1}" msgstr "incohérence dans les types action pour l'option : {0} action {1}" -#: tiramisu/option.py:1464 +#: tiramisu/option.py:1458 msgid "{0} should be a function" msgstr "{0} doit être une fonction" -#: tiramisu/option.py:1467 +#: tiramisu/option.py:1461 msgid "{0}_params should be a dict" msgstr "{0}_params devrait être un dict" -#: tiramisu/option.py:1470 +#: tiramisu/option.py:1464 msgid "{0}_params with key {1} should not have length different to 1" msgstr "" "{0}_params avec la clef {1} devrait ne pas avoir une longueur différent de 1" -#: tiramisu/option.py:1474 +#: tiramisu/option.py:1468 msgid "{0}_params should be tuple for key \"{1}\"" msgstr "{0}_params devrait être un tuple pour la clef \"{1}\"" -#: tiramisu/option.py:1480 +#: tiramisu/option.py:1474 msgid "validator not support tuple" msgstr "validator n'accepte pas de tuple" -#: tiramisu/option.py:1483 +#: tiramisu/option.py:1477 msgid "{0}_params should have an option not a {0} for first argument" msgstr "{0}_params devrait avoir une option pas un {0} pour premier argument" -#: tiramisu/option.py:1487 +#: tiramisu/option.py:1481 msgid "{0}_params should have a boolean not a {0} for second argument" msgstr "{0}_params devrait avoir un boolean pas un {0} pour second argument" @@ -429,39 +430,39 @@ msgstr "ne peut redéfinir ({0})" msgid "can't unbind {0}" msgstr "ne peut supprimer ({0})" -#: tiramisu/setting.py:259 +#: tiramisu/setting.py:272 msgid "cannot append {0} property for option {1}: this property is calculated" msgstr "" "ne peut ajouter la propriété {0} dans l'option {1}: cette propriété est " "calculée" -#: tiramisu/setting.py:322 +#: tiramisu/setting.py:363 msgid "opt and all_properties must not be set together in reset" msgstr "opt et all_properties ne doit pas être renseigné ensemble dans reset" -#: tiramisu/setting.py:337 +#: tiramisu/setting.py:378 msgid "if opt is not None, path should not be None in _getproperties" msgstr "" "si opt n'est pas None, path devrait ne pas être à None dans _getproperties" -#: tiramisu/setting.py:440 +#: tiramisu/setting.py:483 msgid "cannot change the value for option {0} this option is frozen" msgstr "" "ne peut modifier la valeur de l'option {0} cette option n'est pas modifiable" -#: tiramisu/setting.py:446 +#: tiramisu/setting.py:489 msgid "trying to access to an option named: {0} with properties {1}" msgstr "tentative d'accès à une option nommée : {0} avec les propriétés {1}" -#: tiramisu/setting.py:464 +#: tiramisu/setting.py:507 msgid "permissive must be a tuple" msgstr "permissive doit être un tuple" -#: tiramisu/setting.py:471 tiramisu/value.py:301 +#: tiramisu/setting.py:514 tiramisu/value.py:315 msgid "invalid generic owner {0}" msgstr "invalide owner générique {0}" -#: tiramisu/setting.py:558 +#: tiramisu/setting.py:602 msgid "" "malformed requirements imbrication detected for option: '{0}' with " "requirement on: '{1}'" @@ -469,7 +470,7 @@ msgstr "" "imbrication de requirements mal formés detectée pour l'option : '{0}' avec " "requirement sur : '{1}'" -#: tiramisu/setting.py:570 +#: tiramisu/setting.py:613 msgid "option '{0}' has requirement's property error: {1} {2}" msgstr "l'option '{0}' a une erreur de propriété pour le requirement : {1} {2}" @@ -494,52 +495,62 @@ msgstr "session déjà utilisée" msgid "a dictionary cannot be persistent" msgstr "un espace de stockage dictionary ne peut être persistant" -#: tiramisu/value.py:308 +#: tiramisu/value.py:322 msgid "no value for {0} cannot change owner to {1}" msgstr "pas de valeur pour {0} ne peut changer d'utilisateur pour {1}" -#: tiramisu/value.py:416 +#: tiramisu/value.py:442 msgid "invalid len for the slave: {0} which has {1} as master" msgstr "longueur invalide pour une esclave : {0} qui a {1} comme maître" -#: tiramisu/value.py:440 +#: tiramisu/value.py:466 msgid "invalid len for the master: {0} which has {1} as slave with greater len" msgstr "" "longueur invalide pour un maître : {0} qui a {1} une esclave avec une plus " "grande longueur" -#: tiramisu/value.py:470 +#: tiramisu/value.py:496 msgid "cannot append a value on a multi option {0} which is a slave" msgstr "ne peut ajouter une valeur sur l'option multi {0} qui est une esclave" -#: tiramisu/value.py:507 +#: tiramisu/value.py:535 msgid "cannot sort multi option {0} if master or slave" msgstr "ne peut trier une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:511 +#: tiramisu/value.py:539 msgid "cmp is not permitted in python v3 or greater" msgstr "cmp n'est pas permis en python v3 ou supérieure" -#: tiramisu/value.py:520 +#: tiramisu/value.py:548 msgid "cannot reverse multi option {0} if master or slave" msgstr "ne peut inverser une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:528 +#: tiramisu/value.py:556 msgid "cannot insert multi option {0} if master or slave" msgstr "ne peut insérer une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:536 +#: tiramisu/value.py:564 msgid "cannot extend multi option {0} if master or slave" msgstr "ne peut étendre une option multi {0} pour une maître ou une esclave" -#: tiramisu/value.py:547 +#: tiramisu/value.py:575 msgid "invalid value {0} for option {1}: {2}" msgstr "valeur invalide {0} pour l'option {1} : {2}" -#: tiramisu/value.py:564 +#: tiramisu/value.py:593 msgid "cannot pop a value on a multi option {0} which is a slave" msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave" +#~ msgid "" +#~ "unable to carry out a calculation, option value with multi types must " +#~ "have same length for: {0}" +#~ msgstr "" +#~ "impossible d'effectuer le calcul, la valeur d'une option avec le type " +#~ "multi doit avoir la même longueur pour : {0}" + +#~ msgid "no child has same nom has master group for: {0}" +#~ msgstr "pas d'enfant avec le nom du groupe maître pour {0} " + #~ msgid "value must be a boolean" #~ msgstr "valeur doit être un booléen" @@ -555,9 +566,6 @@ msgstr "ne peut supprimer une valeur dans l'option multi {0} qui est esclave" #~ msgid "value must be an unicode" #~ msgstr "valeur doit être une valeur unicode" -#~ msgid "invalid value {0} for option {1} which must be a list" -#~ msgstr "valeur invalide {0} pour l'option {1} qui doit être une liste" - #~ msgid "invalid value {0} for option {1} must be different as {2} option" #~ msgstr "" #~ "valeur invalide {0} pour l'option {1} doit être différente de l'option {2}" diff --git a/translations/tiramisu.pot b/translations/tiramisu.pot index 89808a9..e572a40 100644 --- a/translations/tiramisu.pot +++ b/translations/tiramisu.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-09-30 22:49+CEST\n" +"POT-Creation-Date: 2014-01-25 11:30+CET\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,14 +15,10 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: tiramisu/autolib.py:145 +#: tiramisu/autolib.py:159 msgid "unable to carry out a calculation, option {0} has properties: {1} for: {2}" msgstr "" -#: tiramisu/autolib.py:154 -msgid "unable to carry out a calculation, option value with multi types must have same length for: {0}" -msgstr "" - #: tiramisu/config.py:52 msgid "descr must be an optiondescription, not {0}" msgstr "" @@ -31,135 +27,140 @@ msgstr "" msgid "unknown group_type: {0}" msgstr "" -#: tiramisu/config.py:163 +#: tiramisu/config.py:166 tiramisu/setting.py:339 tiramisu/value.py:57 +#: tiramisu/value.py:427 +msgid "the context does not exist anymore" +msgstr "" + +#: tiramisu/config.py:171 msgid "no option description found for this config (may be metaconfig without meta)" msgstr "" -#: tiramisu/config.py:189 +#: tiramisu/config.py:197 msgid "can't assign to an OptionDescription" msgstr "" -#: tiramisu/config.py:320 +#: tiramisu/config.py:330 msgid "unknown type_ type {0}for _find" msgstr "" -#: tiramisu/config.py:359 +#: tiramisu/config.py:369 msgid "no option found in config with these criteria" msgstr "" -#: tiramisu/config.py:409 +#: tiramisu/config.py:419 msgid "make_dict can't filtering with value without option" msgstr "" -#: tiramisu/config.py:430 +#: tiramisu/config.py:440 msgid "unexpected path {0}, should start with {1}" msgstr "" -#: tiramisu/config.py:490 +#: tiramisu/config.py:500 msgid "opt in getowner must be an option not {0}" msgstr "" -#: tiramisu/option.py:69 +#: tiramisu/option.py:67 msgid "invalid name: {0} for option" msgstr "" -#: tiramisu/option.py:78 +#: tiramisu/option.py:76 msgid "invalid properties type {0} for {1}, must be a tuple" msgstr "" -#: tiramisu/option.py:116 +#: tiramisu/option.py:114 msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgstr "" -#: tiramisu/option.py:143 tiramisu/value.py:362 +#: tiramisu/option.py:141 tiramisu/value.py:376 msgid "information's item not found: {0}" msgstr "" -#: tiramisu/option.py:205 +#: tiramisu/option.py:203 msgid "cannot serialize Option, only in OptionDescription" msgstr "" -#: tiramisu/option.py:308 +#: tiramisu/option.py:306 msgid "a default_multi is set whereas multi is False in option: {0}" msgstr "" -#: tiramisu/option.py:314 +#: tiramisu/option.py:312 msgid "invalid default_multi value {0} for option {1}: {2}" msgstr "" -#: tiramisu/option.py:319 +#: tiramisu/option.py:317 msgid "default value not allowed if option: {0} is calculated" msgstr "" -#: tiramisu/option.py:322 +#: tiramisu/option.py:320 msgid "params defined for a callback function but no callback defined yet for option {0}" msgstr "" -#: tiramisu/option.py:361 +#: tiramisu/option.py:359 msgid "option not in all_cons_opts" msgstr "" -#: tiramisu/option.py:427 tiramisu/option.py:437 +#: tiramisu/option.py:425 tiramisu/option.py:435 msgid "invalid value for option {0}: {1}" msgstr "" -#: tiramisu/option.py:454 -msgid "which must be a list" +#: tiramisu/option.py:452 +msgid "invalid value {0} for option {1} which must be a list" msgstr "" -#: tiramisu/option.py:514 +#: tiramisu/option.py:508 msgid "consistency should be set with an option" msgstr "" -#: tiramisu/option.py:516 +#: tiramisu/option.py:510 msgid "cannot add consistency with itself" msgstr "" -#: tiramisu/option.py:518 +#: tiramisu/option.py:512 msgid "every options in consistency should be multi or none" msgstr "" -#: tiramisu/option.py:538 +#: tiramisu/option.py:532 msgid "same value for {0} and {1}" msgstr "" -#: tiramisu/option.py:647 +#: tiramisu/option.py:641 msgid "values must be a tuple for {0}" msgstr "" -#: tiramisu/option.py:650 +#: tiramisu/option.py:644 msgid "open_values must be a boolean for {0}" msgstr "" -#: tiramisu/option.py:672 +#: tiramisu/option.py:666 msgid "value {0} is not permitted, only {1} is allowed" msgstr "" -#: tiramisu/option.py:684 +#: tiramisu/option.py:678 msgid "invalid boolean" msgstr "" -#: tiramisu/option.py:694 +#: tiramisu/option.py:688 msgid "invalid integer" msgstr "" -#: tiramisu/option.py:704 +#: tiramisu/option.py:698 msgid "invalid float" msgstr "" -#: tiramisu/option.py:714 +#: tiramisu/option.py:708 msgid "invalid string" msgstr "" -#: tiramisu/option.py:731 +#: tiramisu/option.py:725 msgid "invalid unicode" msgstr "" -#: tiramisu/option.py:743 +#: tiramisu/option.py:737 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "" -#: tiramisu/option.py:792 +#: tiramisu/option.py:787 tiramisu/option.py:792 msgid "invalid IP" msgstr "" @@ -196,11 +197,11 @@ msgid "invalid len for opts" msgstr "" #: tiramisu/option.py:927 -msgid "invalid network {0} ({1}) with netmask {2} ({3}), this network is an IP" +msgid "invalid network {0} ({1}) with netmask {2}, this network is an IP" msgstr "" #: tiramisu/option.py:932 -msgid "invalid IP {0} ({1}) with netmask {2} ({3}), this IP is a network" +msgid "invalid IP {0} ({1}) with netmask {2}, this IP is a network" msgstr "" #: tiramisu/option.py:937 @@ -235,159 +236,159 @@ msgstr "" msgid "allow_without_dot must be a boolean" msgstr "" -#: tiramisu/option.py:1024 +#: tiramisu/option.py:1028 msgid "invalid domainname, must have dot" msgstr "" -#: tiramisu/option.py:1026 +#: tiramisu/option.py:1030 msgid "invalid domainname's length (max 255)" msgstr "" -#: tiramisu/option.py:1028 +#: tiramisu/option.py:1032 msgid "invalid domainname's length (min 2)" msgstr "" -#: tiramisu/option.py:1030 +#: tiramisu/option.py:1034 msgid "invalid domainname" msgstr "" -#: tiramisu/option.py:1049 +#: tiramisu/option.py:1047 msgid "invalid email address, should contains one @" msgstr "" -#: tiramisu/option.py:1052 +#: tiramisu/option.py:1050 msgid "invalid username in email address" msgstr "" -#: tiramisu/option.py:1071 +#: tiramisu/option.py:1063 msgid "invalid url, should start with http:// or https://" msgstr "" -#: tiramisu/option.py:1090 +#: tiramisu/option.py:1082 msgid "invalid url, port must be an between 0 and 65536" msgstr "" -#: tiramisu/option.py:1096 +#: tiramisu/option.py:1088 msgid "invalid url, should ends with filename" msgstr "" -#: tiramisu/option.py:1107 +#: tiramisu/option.py:1099 msgid "invalid filename" msgstr "" -#: tiramisu/option.py:1134 +#: tiramisu/option.py:1126 msgid "duplicate option name: {0}" msgstr "" -#: tiramisu/option.py:1152 +#: tiramisu/option.py:1144 msgid "unknown Option {0} in OptionDescription {1}" msgstr "" -#: tiramisu/option.py:1203 +#: tiramisu/option.py:1195 msgid "duplicate option: {0}" msgstr "" -#: tiramisu/option.py:1233 +#: tiramisu/option.py:1225 msgid "consistency with option {0} which is not in Config" msgstr "" -#: tiramisu/option.py:1241 +#: tiramisu/option.py:1233 msgid "no option for path {0}" msgstr "" -#: tiramisu/option.py:1247 +#: tiramisu/option.py:1239 msgid "no option {0} found" msgstr "" -#: tiramisu/option.py:1257 +#: tiramisu/option.py:1249 msgid "cannot change group_type if already set (old {0}, new {1})" msgstr "" -#: tiramisu/option.py:1270 +#: tiramisu/option.py:1261 msgid "master group {0} shall not have a subgroup" msgstr "" -#: tiramisu/option.py:1273 +#: tiramisu/option.py:1264 msgid "master group {0} shall not have a symlinkoption" msgstr "" -#: tiramisu/option.py:1276 +#: tiramisu/option.py:1267 msgid "not allowed option {0} in group {1}: this option is not a multi" msgstr "" -#: tiramisu/option.py:1287 +#: tiramisu/option.py:1277 msgid "master group with wrong master name for {0}" msgstr "" -#: tiramisu/option.py:1296 -msgid "no child has same nom has master group for: {0}" +#: tiramisu/option.py:1285 +msgid "callback of master's option shall not refered a slave's ones" msgstr "" -#: tiramisu/option.py:1299 +#: tiramisu/option.py:1293 msgid "group_type: {0} not allowed" msgstr "" -#: tiramisu/option.py:1391 +#: tiramisu/option.py:1385 msgid "malformed requirements type for option: {0}, must be a dict" msgstr "" -#: tiramisu/option.py:1408 +#: tiramisu/option.py:1402 msgid "malformed requirements for option: {0} require must have option, expected and action keys" msgstr "" -#: tiramisu/option.py:1413 +#: tiramisu/option.py:1407 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "" -#: tiramisu/option.py:1417 +#: tiramisu/option.py:1411 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "" -#: tiramisu/option.py:1421 +#: tiramisu/option.py:1415 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" -#: tiramisu/option.py:1425 +#: tiramisu/option.py:1419 msgid "malformed requirements must be an option in option {0}" msgstr "" -#: tiramisu/option.py:1428 +#: tiramisu/option.py:1422 msgid "malformed requirements option {0} should not be a multi" msgstr "" -#: tiramisu/option.py:1434 +#: tiramisu/option.py:1428 msgid "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" -#: tiramisu/option.py:1439 +#: tiramisu/option.py:1433 msgid "inconsistency in action types for option: {0} action: {1}" msgstr "" -#: tiramisu/option.py:1464 +#: tiramisu/option.py:1458 msgid "{0} should be a function" msgstr "" -#: tiramisu/option.py:1467 +#: tiramisu/option.py:1461 msgid "{0}_params should be a dict" msgstr "" -#: tiramisu/option.py:1470 +#: tiramisu/option.py:1464 msgid "{0}_params with key {1} should not have length different to 1" msgstr "" -#: tiramisu/option.py:1474 +#: tiramisu/option.py:1468 msgid "{0}_params should be tuple for key \"{1}\"" msgstr "" -#: tiramisu/option.py:1480 +#: tiramisu/option.py:1474 msgid "validator not support tuple" msgstr "" -#: tiramisu/option.py:1483 +#: tiramisu/option.py:1477 msgid "{0}_params should have an option not a {0} for first argument" msgstr "" -#: tiramisu/option.py:1487 +#: tiramisu/option.py:1481 msgid "{0}_params should have a boolean not a {0} for second argument" msgstr "" @@ -399,39 +400,39 @@ msgstr "" msgid "can't unbind {0}" msgstr "" -#: tiramisu/setting.py:259 +#: tiramisu/setting.py:272 msgid "cannot append {0} property for option {1}: this property is calculated" msgstr "" -#: tiramisu/setting.py:322 +#: tiramisu/setting.py:363 msgid "opt and all_properties must not be set together in reset" msgstr "" -#: tiramisu/setting.py:337 +#: tiramisu/setting.py:378 msgid "if opt is not None, path should not be None in _getproperties" msgstr "" -#: tiramisu/setting.py:440 +#: tiramisu/setting.py:483 msgid "cannot change the value for option {0} this option is frozen" msgstr "" -#: tiramisu/setting.py:446 +#: tiramisu/setting.py:489 msgid "trying to access to an option named: {0} with properties {1}" msgstr "" -#: tiramisu/setting.py:464 +#: tiramisu/setting.py:507 msgid "permissive must be a tuple" msgstr "" -#: tiramisu/setting.py:471 tiramisu/value.py:301 +#: tiramisu/setting.py:514 tiramisu/value.py:315 msgid "invalid generic owner {0}" msgstr "" -#: tiramisu/setting.py:558 +#: tiramisu/setting.py:602 msgid "malformed requirements imbrication detected for option: '{0}' with requirement on: '{1}'" msgstr "" -#: tiramisu/setting.py:570 +#: tiramisu/setting.py:613 msgid "option '{0}' has requirement's property error: {1} {2}" msgstr "" @@ -455,47 +456,47 @@ msgstr "" msgid "a dictionary cannot be persistent" msgstr "" -#: tiramisu/value.py:308 +#: tiramisu/value.py:322 msgid "no value for {0} cannot change owner to {1}" msgstr "" -#: tiramisu/value.py:416 +#: tiramisu/value.py:442 msgid "invalid len for the slave: {0} which has {1} as master" msgstr "" -#: tiramisu/value.py:440 +#: tiramisu/value.py:466 msgid "invalid len for the master: {0} which has {1} as slave with greater len" msgstr "" -#: tiramisu/value.py:470 +#: tiramisu/value.py:496 msgid "cannot append a value on a multi option {0} which is a slave" msgstr "" -#: tiramisu/value.py:507 +#: tiramisu/value.py:535 msgid "cannot sort multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:511 +#: tiramisu/value.py:539 msgid "cmp is not permitted in python v3 or greater" msgstr "" -#: tiramisu/value.py:520 +#: tiramisu/value.py:548 msgid "cannot reverse multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:528 +#: tiramisu/value.py:556 msgid "cannot insert multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:536 +#: tiramisu/value.py:564 msgid "cannot extend multi option {0} if master or slave" msgstr "" -#: tiramisu/value.py:547 +#: tiramisu/value.py:575 msgid "invalid value {0} for option {1}: {2}" msgstr "" -#: tiramisu/value.py:564 +#: tiramisu/value.py:593 msgid "cannot pop a value on a multi option {0} which is a slave" msgstr ""