From b533bd996bfb00a6d92ab3d98d8a716f61b80e8b Mon Sep 17 00:00:00 2001 From: gwen Date: Tue, 18 Sep 2012 09:48:41 +0200 Subject: [PATCH] eosfunc and autolib --- tiramisu/autolib.py | 37 +++++++++++++++++++++++++------------ tiramisu/config.py | 3 --- tiramisu/error.py | 9 +++++---- tiramisu/option.py | 7 ++++--- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/tiramisu/autolib.py b/tiramisu/autolib.py index 7c715fd..2ea37e6 100644 --- a/tiramisu/autolib.py +++ b/tiramisu/autolib.py @@ -14,21 +14,22 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# The original `Config` design model is unproudly borrowed from +# The original `Config` design model is unproudly borrowed from # the rough gus of pypy: pypy: http://codespeak.net/svn/pypy/dist/pypy/config/ # the whole pypy projet is under MIT licence # ____________________________________________________________ "enables us to carry out a calculation and return an option's value" -from tiramisu.error import PropertiesOptionError, ConflictConfigError +from tiramisu.error import PropertiesOptionError, ConflictConfigError, + NoValueReturned # ____________________________________________________________ # automatic Option object -#def special_owner_factory(name, owner, value, +#def special_owner_factory(name, owner, value, # callback, callback_params=None, config=None): -# # in case of an 'auto' and a 'fill' without a value, +# # in case of an 'auto' and a 'fill' without a value, # # we have to carry out a calculation # return calc_factory(name, callback, callback_params, config) def carry_out_calculation(name, callback, callback_params, config): - # FIXME we have to know the exact status of the config + # FIXME we have to know the exact status of the config # not to disrupt it # config.freeze() if callback_params is None: @@ -67,22 +68,34 @@ def carry_out_calculation(name, callback, callback_params, config): for key, couple in tcparams.items(): value, ismulti = couple if ismulti and value != None: - tcp[key] = value[incr] + if key == '': + params.append(value[incr]) + else: + tcp[key] = value[incr] else: - tcp[key] = value + if key == '': + params.append(value) + else: + tcp[key] = value ret.append(calculate(name, callback, tcp)) return ret else: tcp = {} + params = [] for key, couple in tcparams.items(): - tcp[key] = couple[0] - return calculate(name, callback, tcp) - -def calculate(name, callback, tcparams): + if key == '': + params.append(couple[0]) + else: + tcp[key] = couple[0] + return calculate(name, callback, params, tcp) + +def calculate(name, callback, params, tcparams): try: # XXX not only creole... from creole import eosfunc - return getattr(eosfunc, callback)(**tcparams) + return getattr(eosfunc, callback)(*params, **tcparams) + except NoValueReturned, err: + return "" except AttributeError, err: import traceback traceback.print_exc() diff --git a/tiramisu/config.py b/tiramisu/config.py index 156bde9..0a44610 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -231,9 +231,6 @@ class Config(object): (self.__class__, name)) if not isinstance(opt_or_descr, OptionDescription): # options with callbacks (fill or auto) - if name == 'interface_gw': - print "pouet" - print opt_or_descr.has_callback() if opt_or_descr.has_callback(): value = self._cfgimpl_values[name] if (not opt_or_descr.is_frozen() or \ diff --git a/tiramisu/error.py b/tiramisu/error.py index 07cc0db..d00d2d7 100644 --- a/tiramisu/error.py +++ b/tiramisu/error.py @@ -14,11 +14,12 @@ class PropertiesOptionError(AttributeError): class NotFoundError(Exception): pass class MethodCallError(Exception): - pass + pass class RequiresError(Exception): - pass + pass class RequirementRecursionError(RequiresError): pass class MandatoryError(Exception): - pass - + pass +class NoValueReturned(Exception): + pass diff --git a/tiramisu/option.py b/tiramisu/option.py index 25f02b8..849e7b4 100644 --- a/tiramisu/option.py +++ b/tiramisu/option.py @@ -23,9 +23,10 @@ from tiramisu.basetype import HiddenBaseType, DisabledBaseType from tiramisu.error import (ConfigError, ConflictConfigError, NotFoundError, RequiresError, RequirementRecursionError, MandatoryError) -available_actions = ['hide', 'show', 'enable', 'disable'] +available_actions = ['hide', 'show', 'enable', 'disable', 'freeze', 'unfreeze'] reverse_actions = {'hide': 'show', 'show': 'hide', - 'disable':'enable', 'enable': 'disable'} + 'disable': 'enable', 'enable': 'disable', + 'freeze': 'unfreeze', 'unfreeze': 'freeze'} # ____________________________________________________________ # OptionDescription authorized group_type values group_types = ['default', 'family', 'group', 'master'] @@ -101,7 +102,7 @@ class Option(HiddenBaseType, DisabledBaseType): #if self.multi and default_multi is None: # _cfgimpl_warnings[name] = DefaultMultiWarning if callback is not None and (default is not None or default_multi is not None): - raise ConfigError("defaut values not allowed if option: {0}" + raise ConfigError("defaut values not allowed if option: {0} " "is calculated".format(name)) self.callback = callback if self.callback is None and callback_params is not None: