Add valid_dict parameter to convert xml

valid_dict provides a way to set options through their key and value.
This allows users to set options using more conventional naming
schemes/values but the resulting XML will use the corresponding value
from the dict for that key.

Change-Id: I6574a5f33eecddb9b7927841f08600f3977f0ca6
Signed-off-by: Kien Ha <kienha9922@gmail.com>
This commit is contained in:
Kien Ha 2016-07-20 23:27:50 -04:00
parent 49be71864a
commit 9c42d559d6
2 changed files with 46 additions and 3 deletions

View File

@ -496,14 +496,23 @@ def convert_mapping_to_xml(parent, data, mapping, fail_required=False):
valid_options provides a way to check if the value the user input is from a
list of available options. When the user pass a value that is not supported
from the list, it raise an InvalidAttributeError.
valid_dict provides a way to set options through their key and value. If
the user input corresponds to a key, the XML tag will use the key's value
for its element. When the user pass a value that there are no keys for,
it raise an InvalidAttributeError.
"""
for elem in mapping:
(optname, xmlname, val) = elem[:3]
val = data.get(optname, val)
valid_options = []
valid_dict = {}
if len(elem) == 4:
valid_options = elem[3]
if type(elem[3]) is list:
valid_options = elem[3]
if type(elem[3]) is dict:
valid_dict = elem[3]
# Use fail_required setting to allow support for optional parameters
# we will phase this out in the future as we rework plugins so that
@ -517,10 +526,18 @@ def convert_mapping_to_xml(parent, data, mapping, fail_required=False):
if val is None and fail_required is False:
continue
if valid_dict:
if val not in valid_dict:
raise InvalidAttributeError(optname, val, valid_dict.keys())
if valid_options:
if val not in valid_options:
raise InvalidAttributeError(optname, val, valid_options)
if type(val) == bool:
val = str(val).lower()
XML.SubElement(parent, xmlname).text = str(val)
if val in valid_dict:
XML.SubElement(parent, xmlname).text = str(valid_dict[val])
else:
XML.SubElement(parent, xmlname).text = str(val)

View File

@ -70,7 +70,7 @@ class TestCaseTestHelpers(LoggingFixture, testtools.TestCase):
required_mappings,
fail_required=True)
# Test invalid user input
# Test invalid user input for list
user_input_root = XML.Element('testUserInput')
user_input_data = yaml.load("user-input-string: bye")
valid_inputs = ['hello']
@ -82,3 +82,29 @@ class TestCaseTestHelpers(LoggingFixture, testtools.TestCase):
user_input_root,
user_input_data,
user_input_mappings)
# Test invalid user input for dict
user_input_root = XML.Element('testUserInput')
user_input_data = yaml.load("user-input-string: later")
valid_inputs = {'hello': 'world'}
user_input_mappings = [('user-input-string', 'userInputString',
'user-input', valid_inputs)]
self.assertRaises(InvalidAttributeError,
convert_mapping_to_xml,
user_input_root,
user_input_data,
user_input_mappings)
# Test invalid key for dict
user_input_root = XML.Element('testUserInput')
user_input_data = yaml.load("user-input-string: world")
valid_inputs = {'hello': 'world'}
user_input_mappings = [('user-input-string', 'userInputString',
'user-input', valid_inputs)]
self.assertRaises(InvalidAttributeError,
convert_mapping_to_xml,
user_input_root,
user_input_data,
user_input_mappings)