eosfunc and autolib
authorgwen <gremond@cadoles.com>
Tue, 18 Sep 2012 07:48:41 +0000 (09:48 +0200)
committergwen <gremond@cadoles.com>
Tue, 18 Sep 2012 07:48:41 +0000 (09:48 +0200)
tiramisu/autolib.py
tiramisu/config.py
tiramisu/error.py
tiramisu/option.py

index 7c715fd..2ea37e6 100644 (file)
 # 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()
index 156bde9..0a44610 100644 (file)
@@ -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 \
index 07cc0db..d00d2d7 100644 (file)
@@ -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
index 25f02b8..849e7b4 100644 (file)
 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: