温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行FaultWrapper解析

发布时间:2021-12-28 15:42:00 来源:亿速云 阅读:144 作者:柒染 栏目:云计算

这篇文章将为大家详细讲解有关如何进行FaultWrapper解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

FaultWrapper解析

class FaultWrapper(base_wsgi.Middleware):#继承基础的WSGI中间件"""调用中间件堆栈,将exceptions封装成faults。"""    _status_to_type = {}@staticmethod    def status_to_type(status):
        #根据状态码转换成webob相应的类型实例if not FaultWrapper._status_to_type:for clazz in utils.walk_class_hierarchy(webob.exc.HTTPError):# 遍历HTTPError类层次结构 
                FaultWrapper._status_to_type[clazz.code] = clazzreturn FaultWrapper._status_to_type.get(
                                  status, webob.exc.HTTPInternalServerError)()def _error(self, inner, req):
        LOG.exception(_LE("Caught error: %s"), inner)

        safe = getattr(inner, 'safe', False)
        headers = getattr(inner, 'headers', None)
        status = getattr(inner, 'code', 500)if status is None:
            status = 500        msg_dict = dict(url=req.url, status=status)
        LOG.info(_LI("%(url)s returned with HTTP %(status)d"), msg_dict)
        outer = self.status_to_type(status)#调用exception转换方法if headers:
            outer.headers = headers# NOTE(johannes): We leave the explanation empty here on        # purpose. It could possibly have sensitive information        # that should not be returned back to the user. See        # bugs 868360 and 874472        # NOTE(eglynn): However, it would be over-conservative and        # inconsistent with the EC2 API to hide every exception,        # including those that are safe to expose, see bug 1021373        if safe:
            #处理翻译
            user_locale = req.best_match_language()
            inner_msg = translate(inner.message, user_locale)
            outer.explanation = '%s: %s' % (inner.__class__.__name__,
                                            inner_msg)

        notifications.send_api_fault(req.url, status, inner)#调用rpc发送api错误到消息队列return wsgi.Fault(outer) #返回webob.exc.HTTPException错误对象

    @webob.dec.wsgify(RequestClass=wsgi.Request)def __call__(self, req):try:return req.get_response(self.application) #执行wsgi应用程序except Exception as ex:return self._error(ex, req)#遇到exception后,调用此方法处理exception,封装成http错误返回

关于如何进行FaultWrapper解析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI