Fix valid_values initing from configdata

This commit is contained in:
Florian Bruhin 2017-06-13 15:09:38 +02:00
parent fcc0b3e8c0
commit b9aa5d0e4e
2 changed files with 16 additions and 7 deletions

View File

@ -553,6 +553,9 @@ def _parse_yaml_type(name, node):
# -> create the type object and pass arguments
type_name = node.pop('name')
kwargs = node
valid_values = kwargs.get('valid_values', None)
if valid_values is not None:
kwargs['valid_values'] = configtypes.ValidValues(*valid_values)
else:
_raise_invalid_node(name, 'type', node)

View File

@ -54,19 +54,25 @@ class ValidValues:
descriptions: A dict with value/desc mappings.
"""
def __init__(self, *vals):
if not vals:
def __init__(self, *values):
if not values:
raise ValueError("ValidValues with no values makes no sense!")
self.descriptions = {}
self.values = []
for v in vals:
if isinstance(v, str):
for value in values:
if isinstance(value, str):
# Value without description
self.values.append(v)
self.values.append(value)
elif isinstance(value, dict):
# List of dicts from configdata.yml
assert len(value) == 1, value
value, desc = list(value.items())[0]
self.values.append(value)
self.descriptions[value] = desc
else:
# (value, description) tuple
self.values.append(v[0])
self.descriptions[v[0]] = v[1]
self.values.append(value[0])
self.descriptions[value[0]] = value[1]
def __contains__(self, val):
return val in self.values