impl_get_values with calculated values and no context should return []

This commit is contained in:
Emmanuel Garette 2015-11-26 19:42:33 +01:00
parent ab555966f7
commit c2a6772ec2
3 changed files with 18 additions and 9 deletions

View 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():

View 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()

View 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):