impl_get_values with calculated values and no context should return []
authorEmmanuel Garette <egarette@cadoles.com>
Thu, 26 Nov 2015 18:42:33 +0000 (19:42 +0100)
committerEmmanuel Garette <egarette@cadoles.com>
Thu, 26 Nov 2015 18:42:33 +0000 (19:42 +0100)
test/test_choice_option.py
tiramisu/option/baseoption.py
tiramisu/option/option.py

index f636acc..8565be9 100644 (file)
@@ -35,6 +35,8 @@ def test_choiceoption_function():
     assert cfg.getowner(ch) == owners.default
     raises(ValueError, "cfg.ch='no'")
     assert cfg.getowner(ch) == owners.default
+    assert ch.impl_get_values(None) == []
+    assert ch.impl_get_values(cfg) == ['val1', 'val2']
 
 
 def test_choiceoption_calc_function():
index 8629672..3373106 100644 (file)
@@ -782,6 +782,10 @@ class Option(OnlyOption):
         return DynSymLinkOption(name, self, dyn=path)
 
     def _validate_callback(self, callback, callback_params):
+        """callback_params:
+        * None
+        * {'': ((option, permissive),), 'ip': ((None,), (option, permissive))
+        """
         if callback is None:
             return
         default_multi = self.impl_getdefault_multi()
index 623f668..7b669aa 100644 (file)
@@ -71,15 +71,18 @@ class ChoiceOption(Option):
         #FIXME cache? but in context...
         values = self._choice_values
         if isinstance(values, FunctionType):
-            values_params = self._choice_values_params
-            if values_params is None:
-                values_params = {}
-            values = carry_out_calculation(self, context=context,
-                                           callback=values,
-                                           callback_params=values_params)
-            if not isinstance(values, list):  # pragma: optional cover
-                raise ConfigError(_('calculated values for {0} is not a list'
-                                    '').format(self.impl_getname()))
+            if context is None:
+                values = []
+            else:
+                values_params = self._choice_values_params
+                if values_params is None:
+                    values_params = {}
+                values = carry_out_calculation(self, context=context,
+                                               callback=values,
+                                               callback_params=values_params)
+                if not isinstance(values, list):  # pragma: optional cover
+                    raise ConfigError(_('calculated values for {0} is not a list'
+                                        '').format(self.impl_getname()))
         return values
 
     def _validate(self, value, context=undefined):