]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Refactor extract_param_pairs()
authorZane Bitter <zbitter@redhat.com>
Wed, 29 Aug 2012 17:35:12 +0000 (19:35 +0200)
committerZane Bitter <zbitter@redhat.com>
Wed, 29 Aug 2012 18:37:12 +0000 (20:37 +0200)
Implement it in terms of the more general extract_param_list().

Change-Id: Ifbf0dd8205da87e707610c0b8cb0ca616d7b2e22
Signed-off-by: Zane Bitter <zbitter@redhat.com>
heat/api/aws/utils.py
heat/tests/test_api_aws.py

index ef5bde5fe94c3b782623d336626439968ad64294..55fc6898e8d24f0dfeebf6024b037f1edece007e 100644 (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])
-    )
-
-    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)
+    plist = extract_param_list(params, prefix)
+    kvs = [(p[keyname], p[valuename]) for p in plist
+                                      if keyname in p and valuename in p]
 
-    return dict(get_param_pairs())
+    return dict(kvs)
 
 
 def extract_param_list(params, prefix=''):
index b24a5fde9641bb0a27a05db54a0a6adcad3463b5..99dcbd08a6a2507b0450d9e9c7c4e172c69c4f75 100644 (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')