中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行openstack組件nova代碼解析

發布時間:2021-12-28 15:51:18 來源:億速云 閱讀:143 作者:柒染 欄目:云計算

如何進行openstack組件nova代碼解析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

隨手記錄一下查看nova代碼時的筆記。nova.wsgi文件定義了wsgi功能組件的基類。

nova.wsgi.Application模塊的解析

此類為wsgi app的基類:

class Application(object):"""WSGI應用程序基類封裝. 子類需要實現__call__方法."""    @classmethod    def factory(cls, global_config, **local_config):"""在paste.deploy配置文件中被調用         任何local配置 (即paste配置文件中[app:APPNAME]的值) 都將作為kwargs傳遞到 `__init__` 方法中。          假設的配置內容如下:            [app:wadl]            latest_version = 1.3            paste.app_factory = nova.api.fancy_api:Wadl.factory         這樣就可以實現paste類似如下的方式調用Wadl類:            import nova.api.fancy_api            fancy_api.Wadl(latest_version='1.3')         當然,您可以在子類中重新實現`factory`方法,但是使用kwarg傳遞它應該是不必要的。         """        return cls(**local_config)def __call__(self, environ, start_response):""" 子類可以類似下面的內容去實現__call__:        @webob.dec.wsgify(RequestClass=Request)        def __call__(self, req):
          #  以下任何對象都可以作為responses:          # Option 1:  簡單字符串   res = 'message\n'          # Option 2:  格式化良好的HTTP異常頁面   res = exc.HTTPForbidden(explanation='Nice try')          # Option 3:  一個webob Response object (需要處理header等內容...)
          res = Response()
          res.app_iter = open('somefile')          # Option 4:  接下來運行的任何wsgi應用程序  res = self.application          # Option 5:  可以為wsgi應用程序獲取一個Response對象,以處理header等內容  res = req.get_response(self.application)          # 也可以只返回response...
          return res
          # ...  或設置req.response然后返回None.
          req.response = res        See the end of http://pythonpaste.org/webob/modules/dec.html        for more info.        """        raise NotImplementedError(_('You must implement __call__'))

nova.wsgi.Router模塊的解析

此類為nova路由器系統的基類:

class Router(object):"""此類是WSGI中間件,可以將傳入請求映射到WSGI應用程序."""    def __init__(self, mapper):""" 為給定的routes.Mapper創建一個路由器.         `mapper`中的每個路由必須指定一個'controller'。指定一個'action'并讓控制器成為一個對象,
        這樣可以將請求路由到特定于action的方法。 
        Examples:
          mapper = routes.Mapper()          sc = ServerController()          # 一個路由到controller+action的顯式映射   mapper.connect(None, '/svrlist', controller=sc, action='list')          # Actions都是隱式定義的  mapper.resource('server', 'servers', controller=sc)          #  指向任意的WSGI app.  可以指定{path_info:.*}參數,
          #   這樣目標應用程序就可以只傳遞URL的這一部分。   mapper.connect(None, '/v1.0/{path_info:.*}', controller=BlogApp())        """        self.map = mapperself._router = routes.middleware.RoutesMiddleware(self._dispatch, self.map)

    @webob.dec.wsgify(RequestClass=Request)def __call__(self, req):""" 將傳入請求路由到基于self.map的控制器。  如果不匹配,返回404。         """        return self._router@staticmethod    @webob.dec.wsgify(RequestClass=Request)def _dispatch(req):""" 將請求分派到適當的控制器。  將傳入請求與路由匹配并將信息放入 req.environ 由self._router調用。 
        """        match = req.environ['wsgiorg.routing_args'][1]if not match:return webob.exc.HTTPNotFound()app = match['controller']return app

nova.wsgi.Middleware模塊的解析

class Middleware(Application):""" WSGI中間件基類.     #這些類需要初始化一個應用程序,該應用程序將在下一步調用。 
     #默認情況下,中間件只調用其封裝的應用程序,或者可以重載__call__ 方法來自定處理行為。    """    @classmethod    def factory(cls, global_config, **local_config):"""在paste.deploy配置文件中被調用        任何local配置 (即paste配置文件中[app:APPNAME]的值) 都將作為kwargs傳遞到 `__init__` 方法中。        假設的配置內容如下:            [filter:analytics]            redis_host = 127.0.0.1            paste.filter_factory = nova.api.analytics:Analytics.factory可以實現如python調用 `Analytics` 類方式行為,如下所示:            import nova.api.analytics            analytics.Analytics(app_from_paste, redis_host='127.0.0.1')        當然,您可以在子類中重新實現`factory`方法        """        def _factory(app):return cls(app, **local_config)return _factorydef __init__(self, application):self.application = applicationdef process_request(self, req):"""在每個request中調用.        #如果它不返回任何值,則繼續執行堆棧中的下一個應用程序。 
        #如果它返回一個響應,那么該響應將被返回,執行將在這里停止。 
        """        return None    def process_response(self, response):"""返回response前可以進行一些預處理."""        return response

    @webob.dec.wsgify(RequestClass=Request)def __call__(self, req):
        response = self.process_request(req)#調用此方法處理api請求if response:return response #如果有響應則返回,一般情況有response代表著有異常
        response = req.get_response(self.application)#執行wsgi 應用程序獲取響應return self.process_response(response)#調用此方法預處理響應。

看完上述內容,你們掌握如何進行openstack組件nova代碼解析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乡城县| 宝应县| 卢湾区| 安龙县| 稻城县| 新绛县| 兴山县| 翁牛特旗| 兴业县| 定远县| 肇庆市| 晋宁县| 鹿泉市| 阿城市| 惠东县| 松潘县| 洪雅县| 贞丰县| 贺州市| 札达县| 黄平县| 黄大仙区| 盘锦市| 浦东新区| 新昌县| 二连浩特市| 邹平县| 柏乡县| 尼木县| 兴安县| 平阳县| 潼关县| 马鞍山市| 社会| 荥阳市| 洪洞县| 四会市| 康乐县| 霍林郭勒市| 辰溪县| 洛扎县|