text: # vim: tabstop=4 shiftwidth=4 softtabstop=4
  
  #    Copyright 2013 Rackspace
  #
  #    Licensed under the Apache License, Version 2.0 (the "License"); you may
  #    not use this file except in compliance with the License. You may obtain
  #    a copy of the License at
  #
  #         http://www.apache.org/licenses/LICENSE-2.0
  #
  #    Unless required by applicable law or agreed to in writing, software
  #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  #    License for the specific language governing permissions and limitations
  #    under the License.
  
  import webob
  import webob.exc
  
  from qonos.openstack.common._i18n import _
  from qonos.openstack.common import log as logging
  from qonos.openstack.common import wsgi as wsgi
  
  LOG = logging.getLogger(__name__)
  
  
  class FaultWrapper(wsgi.Middleware):
      """Calls down the middleware stack, making exceptions into faults."""
  
      _status_to_type = {}
  
      def _error(self, inner, req):
          LOG.exception(_("Caught error: %s"), unicode(inner))
  
          status = getattr(inner, 'code', 500)
          if status is None:
              status = 500
  
          msg_dict = dict(url=req.url, status=status)
          LOG.info(_("%(url)s returned with HTTP %(status)d") % msg_dict)
  
          return webob.exc.HTTPInternalServerError()
  
      @webob.dec.wsgify(RequestClass=wsgi.Request)
      def __call__(self, req):
          try:
              return req.get_response(self.application)
          except Exception as ex:
              return self._error(ex, req)
  
      @classmethod
      def factory(cls, global_conf, **local_conf):
          def filter(app):
              return cls(app)
          return filter
  