eosfunc and autolib

This commit is contained in:
gwen 2012-09-18 09:48:41 +02:00
parent 934d011847
commit b533bd996b
4 changed files with 34 additions and 22 deletions

View file

@ -14,21 +14,22 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # 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 rough gus of pypy: pypy: http://codespeak.net/svn/pypy/dist/pypy/config/
# the whole pypy projet is under MIT licence # the whole pypy projet is under MIT licence
# ____________________________________________________________ # ____________________________________________________________
"enables us to carry out a calculation and return an option's value" "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 # automatic Option object
#def special_owner_factory(name, owner, value, #def special_owner_factory(name, owner, value,
# callback, callback_params=None, config=None): # 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 # # we have to carry out a calculation
# return calc_factory(name, callback, callback_params, config) # return calc_factory(name, callback, callback_params, config)
def carry_out_calculation(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 # not to disrupt it
# config.freeze() # config.freeze()
if callback_params is None: if callback_params is None:
@ -67,22 +68,34 @@ def carry_out_calculation(name, callback, callback_params, config):
for key, couple in tcparams.items(): for key, couple in tcparams.items():
value, ismulti = couple value, ismulti = couple
if ismulti and value != None: if ismulti and value != None:
tcp[key] = value[incr] if key == '':
params.append(value[incr])
else:
tcp[key] = value[incr]
else: else:
tcp[key] = value if key == '':
params.append(value)
else:
tcp[key] = value
ret.append(calculate(name, callback, tcp)) ret.append(calculate(name, callback, tcp))
return ret return ret
else: else:
tcp = {} tcp = {}
params = []
for key, couple in tcparams.items(): for key, couple in tcparams.items():
tcp[key] = couple[0] if key == '':
return calculate(name, callback, tcp) params.append(couple[0])
else:
def calculate(name, callback, tcparams): tcp[key] = couple[0]
return calculate(name, callback, params, tcp)
def calculate(name, callback, params, tcparams):
try: try:
# XXX not only creole... # XXX not only creole...
from creole import eosfunc from creole import eosfunc
return getattr(eosfunc, callback)(**tcparams) return getattr(eosfunc, callback)(*params, **tcparams)
except NoValueReturned, err:
return ""
except AttributeError, err: except AttributeError, err:
import traceback import traceback
traceback.print_exc() traceback.print_exc()

View file

@ -231,9 +231,6 @@ class Config(object):
(self.__class__, name)) (self.__class__, name))
if not isinstance(opt_or_descr, OptionDescription): if not isinstance(opt_or_descr, OptionDescription):
# options with callbacks (fill or auto) # options with callbacks (fill or auto)
if name == 'interface_gw':
print "pouet"
print opt_or_descr.has_callback()
if opt_or_descr.has_callback(): if opt_or_descr.has_callback():
value = self._cfgimpl_values[name] value = self._cfgimpl_values[name]
if (not opt_or_descr.is_frozen() or \ if (not opt_or_descr.is_frozen() or \

View file

@ -14,11 +14,12 @@ class PropertiesOptionError(AttributeError):
class NotFoundError(Exception): class NotFoundError(Exception):
pass pass
class MethodCallError(Exception): class MethodCallError(Exception):
pass pass
class RequiresError(Exception): class RequiresError(Exception):
pass pass
class RequirementRecursionError(RequiresError): class RequirementRecursionError(RequiresError):
pass pass
class MandatoryError(Exception): class MandatoryError(Exception):
pass pass
class NoValueReturned(Exception):
pass

View file

@ -23,9 +23,10 @@
from tiramisu.basetype import HiddenBaseType, DisabledBaseType from tiramisu.basetype import HiddenBaseType, DisabledBaseType
from tiramisu.error import (ConfigError, ConflictConfigError, NotFoundError, from tiramisu.error import (ConfigError, ConflictConfigError, NotFoundError,
RequiresError, RequirementRecursionError, MandatoryError) RequiresError, RequirementRecursionError, MandatoryError)
available_actions = ['hide', 'show', 'enable', 'disable'] available_actions = ['hide', 'show', 'enable', 'disable', 'freeze', 'unfreeze']
reverse_actions = {'hide': 'show', 'show': 'hide', reverse_actions = {'hide': 'show', 'show': 'hide',
'disable':'enable', 'enable': 'disable'} 'disable': 'enable', 'enable': 'disable',
'freeze': 'unfreeze', 'unfreeze': 'freeze'}
# ____________________________________________________________ # ____________________________________________________________
# OptionDescription authorized group_type values # OptionDescription authorized group_type values
group_types = ['default', 'family', 'group', 'master'] group_types = ['default', 'family', 'group', 'master']
@ -101,7 +102,7 @@ class Option(HiddenBaseType, DisabledBaseType):
#if self.multi and default_multi is None: #if self.multi and default_multi is None:
# _cfgimpl_warnings[name] = DefaultMultiWarning # _cfgimpl_warnings[name] = DefaultMultiWarning
if callback is not None and (default is not None or default_multi is not None): 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)) "is calculated".format(name))
self.callback = callback self.callback = callback
if self.callback is None and callback_params is not None: if self.callback is None and callback_params is not None: