Refactor extract_param_pairs()

Implement it in terms of the more general extract_param_list().

Change-Id: Ifbf0dd8205da87e707610c0b8cb0ca616d7b2e22
Signed-off-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
Zane Bitter 2012-08-29 19:35:12 +02:00
parent d2401dbaf1
commit 87df079624
2 changed files with 19 additions and 41 deletions

View File

@ -44,29 +44,11 @@ def extract_param_pairs(params, prefix='', keyname='', valuename=''):
We reformat this into a dict here to match the heat
engine API expected format
"""
# Define the AWS key format to extract
LIST_KEYS = (
LIST_USER_KEY_re,
LIST_USER_VALUE_fmt,
) = (
re.compile(r"%s\.member\.(.*?)\.%s$" % (prefix, keyname)),
'.'.join([prefix, 'member', '%s', valuename])
)
plist = extract_param_list(params, prefix)
kvs = [(p[keyname], p[valuename]) for p in plist
if keyname in p and valuename in p]
def get_param_pairs():
for k in params:
keymatch = LIST_USER_KEY_re.match(k)
if keymatch:
key = params[k]
v = LIST_USER_VALUE_fmt % keymatch.group(1)
try:
value = params[v]
except KeyError:
logger.error('Could not extract parameter %s' % key)
yield (key, value)
return dict(get_param_pairs())
return dict(kvs)
def extract_param_list(params, prefix=''):

View File

@ -37,10 +37,10 @@ class AWSCommon(unittest.TestCase):
self.assert_(response == expected)
def test_params_extract(self):
p = {'Parameters.member.Foo.ParameterKey': 'foo',
'Parameters.member.Foo.ParameterValue': 'bar',
'Parameters.member.Blarg.ParameterKey': 'blarg',
'Parameters.member.Blarg.ParameterValue': 'wibble'}
p = {'Parameters.member.1.ParameterKey': 'foo',
'Parameters.member.1.ParameterValue': 'bar',
'Parameters.member.2.ParameterKey': 'blarg',
'Parameters.member.2.ParameterValue': 'wibble'}
params = api_utils.extract_param_pairs(p, prefix='Parameters',
keyname='ParameterKey',
valuename='ParameterValue')
@ -51,24 +51,20 @@ class AWSCommon(unittest.TestCase):
self.assertEqual(params['blarg'], 'wibble')
def test_params_extract_dots(self):
p = {'Parameters.member.Foo.Bar.ParameterKey': 'foo',
'Parameters.member.Foo.Bar.ParameterValue': 'bar',
'Parameters.member.Foo.Baz.ParameterKey': 'blarg',
'Parameters.member.Foo.Baz.ParameterValue': 'wibble'}
p = {'Parameters.member.1.1.ParameterKey': 'foo',
'Parameters.member.1.1.ParameterValue': 'bar',
'Parameters.member.2.1.ParameterKey': 'blarg',
'Parameters.member.2.1.ParameterValue': 'wibble'}
params = api_utils.extract_param_pairs(p, prefix='Parameters',
keyname='ParameterKey',
valuename='ParameterValue')
self.assertEqual(len(params), 2)
self.assertTrue('foo' in params)
self.assertEqual(params['foo'], 'bar')
self.assertTrue('blarg' in params)
self.assertEqual(params['blarg'], 'wibble')
self.assertFalse(params)
def test_params_extract_garbage(self):
p = {'Parameters.member.Foo.Bar.ParameterKey': 'foo',
'Parameters.member.Foo.Bar.ParameterValue': 'bar',
'Foo.Baz.ParameterKey': 'blarg',
'Foo.Baz.ParameterValue': 'wibble'}
p = {'Parameters.member.1.ParameterKey': 'foo',
'Parameters.member.1.ParameterValue': 'bar',
'Foo.1.ParameterKey': 'blarg',
'Foo.1.ParameterValue': 'wibble'}
params = api_utils.extract_param_pairs(p, prefix='Parameters',
keyname='ParameterKey',
valuename='ParameterValue')
@ -85,8 +81,8 @@ class AWSCommon(unittest.TestCase):
self.assertFalse(params)
def test_params_extract_garbage_suffix(self):
p = {'Parameters.member.Foo.Bar.ParameterKeysuffix': 'foo',
'Parameters.member.Foo.Bar.ParameterValue': 'bar'}
p = {'Parameters.member.1.ParameterKeysuffix': 'foo',
'Parameters.member.1.ParameterValue': 'bar'}
params = api_utils.extract_param_pairs(p, prefix='Parameters',
keyname='ParameterKey',
valuename='ParameterValue')