summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorTodd Willey <todd@ansolabs.com>2011-01-06 02:08:01 -0500
committerTodd Willey <todd@ansolabs.com>2011-01-06 02:08:01 -0500
commitbccec6c8bac90517a972a5eb8bb91a82b3a13065 (patch)
tree3c05ba805facc9ae24e593f3c19cdf95d7a2acd3 /nova/api
parent6f855be07afb598090184bacf6d709191012c807 (diff)
downloadnova-bccec6c8bac90517a972a5eb8bb91a82b3a13065.tar.gz
nova-bccec6c8bac90517a972a5eb8bb91a82b3a13065.tar.xz
nova-bccec6c8bac90517a972a5eb8bb91a82b3a13065.zip
Fix openstack api tests and add a FaultWrapper to turn exceptions to faults.
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/__init__.py24
1 files changed, 19 insertions, 5 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index c5de03a09..21b9b1d7d 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -20,8 +20,6 @@
WSGI middleware for OpenStack API controllers.
"""
-import time
-
import logging
import routes
import traceback
@@ -29,15 +27,12 @@ import webob.dec
import webob.exc
import webob
-from nova import context
from nova import flags
-from nova import utils
from nova import wsgi
from nova.api.openstack import faults
from nova.api.openstack import backup_schedules
from nova.api.openstack import flavors
from nova.api.openstack import images
-from nova.api.openstack import ratelimiting
from nova.api.openstack import servers
from nova.api.openstack import sharedipgroups
@@ -48,6 +43,19 @@ flags.DEFINE_bool('allow_admin_api',
'When True, this API service will accept admin operations.')
+class FaultWrapper(wsgi.Middleware):
+ """Calls down the middleware stack, making exceptions into faults."""
+
+ @webob.dec.wsgify
+ def __call__(self, req):
+ try:
+ return req.get_response(self.application)
+ except Exception as ex:
+ logging.warn(_("Caught error: %s") % str(ex))
+ logging.error(traceback.format_exc())
+ exc = webob.exc.HTTPInternalServerError(explanation=str(ex))
+ return faults.Fault(exc)
+
class APIRouter(wsgi.Router):
"""
Routes requests on the OpenStack API to the appropriate controller
@@ -105,3 +113,9 @@ def router_factory(global_cof, **local_conf):
def versions_factory(global_conf, **local_conf):
return Versions()
+
+
+def fault_wrapper_factory(global_conf, **local_conf):
+ def fwrap(app):
+ return FaultWrapper(app)
+ return fwrap