]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat API : Add missing Response wrappers
authorSteven Hardy <shardy@redhat.com>
Mon, 2 Jul 2012 13:04:33 +0000 (14:04 +0100)
committerSteven Hardy <shardy@redhat.com>
Mon, 2 Jul 2012 16:02:04 +0000 (17:02 +0100)
It's not clear from the AWS API docs, but all responses
should be wrapped in ActionNameResponse tags.
ref #125

Change-Id: I25f3860f30b7313ce63019e96d1da4e370552ed6
Signed-off-by: Steven Hardy <shardy@redhat.com>
heat/api/v1/stacks.py

index be8cd8407eff2f415eb7c94c88188169d034c98a..dd246880a5f8c89e5158f01663d93b11c246df8f 100644 (file)
@@ -58,6 +58,13 @@ class StackController(object):
             resp['StackId'] = "/".join([hostportprefix, resp['StackId']])
         return resp
 
+    def _format_response(self, action, response):
+        '''
+            Format response from engine into API format
+        '''
+        # TODO : logic to handle error response format will go here..
+        return {'%sResponse' % action: {'%sResult' % action: response}}
+
     def list(self, req):
         """
         Returns the following information for all stacks:
@@ -69,15 +76,12 @@ class StackController(object):
                             {'method': 'list_stacks',
                             'args': {'params': parms}})
 
-        res = {'ListStacksResponse': {
-                'ListStacksResult': {'StackSummaries': []}}}
-        results = res['ListStacksResponse']['ListStacksResult']
-        summaries = results['StackSummaries']
+        res = {'StackSummaries': []}
         if stack_list is not None:
             for s in stack_list['stacks']:
-                summaries.append(self._stackid_addprefix(s))
+                res['StackSummaries'].append(self._stackid_addprefix(s))
 
-        return res
+        return self._format_response('ListStacks', res)
 
     def describe(self, req):
         """
@@ -102,8 +106,7 @@ class StackController(object):
         except rpc_common.RemoteError as ex:
             return webob.exc.HTTPBadRequest(str(ex))
 
-        res = {'DescribeStacksResult': {'Stacks': []}}
-        stacks = res['DescribeStacksResult']['Stacks']
+        res = {'Stacks': []}
         for s in stack_list['stacks']:
             # Reformat Parameters dict-of-dict into AWS API format
             # This is a list-of-dict with nasty "ParameterKey" : key
@@ -111,9 +114,9 @@ class StackController(object):
             s['Parameters'] = [{'ParameterKey':k,
                 'ParameterValue':v.get('Default')}
                 for (k, v) in s['Parameters'].items()]
-            stacks.append(self._stackid_addprefix(s))
+            res['Stacks'].append(self._stackid_addprefix(s))
 
-        return res
+        return self._format_response('DescribeStacks', res)
 
     def _get_template(self, req):
         if 'TemplateBody' in req.params:
@@ -169,11 +172,8 @@ class StackController(object):
         except rpc_common.RemoteError as ex:
             return webob.exc.HTTPBadRequest(str(ex))
 
-        # Note boto expects CreateStackResult wrapped in CreateStackResponse
-        # CreateStackResponse is not mentioned in the aws API docs, so we
-        # need to check against a real AWS response to ensure this is correct
-        return {'CreateStackResponse':
-            {'CreateStackResult': self._stackid_addprefix(res)}}
+        return self._format_response('CreateStack',
+            self._stackid_addprefix(res))
 
     def get_template(self, req):
 
@@ -192,11 +192,11 @@ class StackController(object):
         if templ is None:
             return webob.exc.HTTPNotFound('stack not found')
 
-        return {'GetTemplateResult': {'TemplateBody': templ}}
+        return self._format_response('GetTemplate', {'TemplateBody': templ})
 
     def estimate_template_cost(self, req):
-        return {'EstimateTemplateCostResult': {
-                'Url': 'http://en.wikipedia.org/wiki/Gratis'}}
+        return self._format_response('EstimateTemplateCost',
+            {'Url': 'http://en.wikipedia.org/wiki/Gratis'})
 
     def validate_template(self, req):
 
@@ -244,9 +244,9 @@ class StackController(object):
             return webob.exc.HTTPBadRequest(str(ex))
 
         if res is None:
-            return {'DeleteStackResult': ''}
+            return self._format_response('DeleteStack', '')
         else:
-            return {'DeleteStackResult': res['Error']}
+            return self._format_response('DeleteStack', res['Error'])
 
     def events_list(self, req):
         """
@@ -266,7 +266,8 @@ class StackController(object):
 
         events = 'Error' not in event_res and event_res['events'] or []
 
-        return {'DescribeStackEventsResult': {'StackEvents': events}}
+        return self._format_response('DescribeStackEvents',
+            {'StackEvents': events})
 
     def describe_stack_resource(self, req):
         """
@@ -286,13 +287,8 @@ class StackController(object):
         except rpc_common.RemoteError as ex:
             return webob.exc.HTTPBadRequest(str(ex))
 
-        return {
-            'DescribeStackResourceResponse': {
-                'DescribeStackResourceResult': {
-                    'StackResourceDetail': resource_details,
-                },
-            },
-        }
+        return self._format_response('DescribeStackResource',
+            {'StackResourceDetail': resource_details})
 
     def describe_stack_resources(self, req):
         """
@@ -330,12 +326,8 @@ class StackController(object):
         except rpc_common.RemoteError as ex:
             return webob.exc.HTTPBadRequest(str(ex))
 
-        response = {
-            'DescribeStackResourcesResult': {
-                'StackResources': resources,
-            }
-        }
-        return response
+        return self._format_response('DescribeStackResources',
+            {'StackResources': resources})
 
     def list_stack_resources(self, req):
         """
@@ -352,13 +344,8 @@ class StackController(object):
         except rpc_common.RemoteError as ex:
             return webob.exc.HTTPBadRequest(str(ex))
 
-        return {
-            'ListStackResourcesResponse': {
-                'ListStackResourcesResult': {
-                    'StackResourceSummaries': resources,
-                },
-            },
-        }
+        return self._format_response('ListStackResources',
+            {'StackResourceSummaries': resources})
 
 
 def create_resource(options):