您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何進行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解析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。