]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
ReST API: Return appropriate error codes
authorZane Bitter <zbitter@redhat.com>
Fri, 12 Oct 2012 20:32:54 +0000 (22:32 +0200)
committerZane Bitter <zbitter@redhat.com>
Fri, 12 Oct 2012 20:34:01 +0000 (22:34 +0200)
Change-Id: I769366dd164199c3b7d16ca8bf4c4d99d21dbb7b
Signed-off-by: Zane Bitter <zbitter@redhat.com>
heat/api/openstack/v1/stacks.py

index 682285a866c09eb6ed58f134a33d29695910477b..370294283448fa79eb807dac99456cbcf83c8332 100644 (file)
@@ -194,13 +194,19 @@ class StackController(object):
         self.options = options
         self.engine_rpcapi = engine_rpcapi.EngineAPI()
 
-    def _remote_error(self, ex):
+    def _remote_error(self, ex, force_exists=False):
         """
         Map rpc_common.RemoteError exceptions returned by the engine
         to webob exceptions which can be used to return
         properly formatted error responses.
         """
-        raise exc.HTTPBadRequest(explanation=str(ex))
+        if ex.exc_type in ('AttributeError', 'ValueError'):
+            if force_exists:
+                raise exc.HTTPBadRequest(explanation=str(ex))
+            else:
+                raise exc.HTTPNotFound(explanation=str(ex))
+
+        raise exc.HTTPInternalServerError(explanation=str(ex))
 
     def default(self, req, **args):
         raise exc.HTTPNotFound()
@@ -216,7 +222,7 @@ class StackController(object):
             # no stack_name, we only use a subset of the result here though
             stack_list = self.engine_rpcapi.show_stack(req.context, None)
         except rpc_common.RemoteError as ex:
-            return self._remote_error(ex)
+            return self._remote_error(ex, True)
 
         summary_keys = (engine_api.STACK_ID,
                         engine_api.STACK_NAME,
@@ -246,7 +252,7 @@ class StackController(object):
                                                      data.user_params(),
                                                      data.args())
         except rpc_common.RemoteError as ex:
-            return self._remote_error(ex)
+            return self._remote_error(ex, True)
 
         if 'Description' in result:
             raise exc.HTTPBadRequest(explanation=result['Description'])
@@ -280,7 +286,7 @@ class StackController(object):
             return self._remote_error(ex)
 
         if not stack_list['stacks']:
-            raise exc.HTTPNotFound()
+            raise exc.HTTPInternalServerError()
 
         stack = stack_list['stacks'][0]
 
@@ -358,7 +364,7 @@ class StackController(object):
                                                         data.template(),
                                                         data.user_params())
         except rpc_common.RemoteError as ex:
-            return self._remote_error(ex)
+            return self._remote_error(ex, True)
 
 
 def create_resource(options):