`

仿Openstack的WSGI接口及RESTul服务实现(python)

 
阅读更多

首先是testroutes.py文件

 

import logging
import os

import webob.dec  
import webob.exc
from paste.deploy import loadapp
from wsgiref.simple_server import make_server  

import routes.middleware  
# Environment variable used to pass the request context
CONTEXT_ENV = 'openstack.context'


# Environment variable used to pass the request params
PARAMS_ENV = 'openstack.params'

LOG = logging.getLogger(__name__)

class Controller(object): 
    @webob.dec.wsgify
    def __call__(self, req):
        arg_dict = req.environ['wsgiorg.routing_args'][1]
        action = arg_dict.pop('action')
        del arg_dict['controller']
        context = req.environ.get(CONTEXT_ENV, {})
        context['query_string'] = dict(req.params.iteritems())
        context['headers'] = dict(req.headers.iteritems())
        context['path'] = req.environ['PATH_INFO']
        params = req.environ.get(PARAMS_ENV, {})

        for name in ['REMOTE_USER', 'AUTH_TYPE']:
            try:
                context[name] = req.environ[name]
            except KeyError:
                try:
                    del context[name]
                except KeyError:
                    pass

        params.update(arg_dict)

        # TODO(termie): do some basic normalization on methods
        method = getattr(self, action)

        
        result = method(context, **params)
        
        return webob.Response('OK')
    
    def getMessage(self,context, user_id):
        return {'Message': 'TestMessage'}
        pass
        
class Router(object):  
    def __init__(self):  
        self._mapper = routes.Mapper()  
        self._mapper.connect('/test/{user_id}',
                            controller=Controller(),
                            action='getMessage',
                            conditions={'method': ['GET']})
        
        self._router = routes.middleware.RoutesMiddleware(self._dispatch, self._mapper)
     
    @webob.dec.wsgify  
    def __call__(self, req):
        return self._router
    
    @staticmethod  
    @webob.dec.wsgify  
    def _dispatch(req):
        match = req.environ['wsgiorg.routing_args'][1]  
                      
        if not match:  
            return webob.exc.HTTPNotFound()  
              
        app = match['controller']
        return app
    
    @classmethod
    def app_factory(cls, global_config, **local_config):    
        return cls()
        

if __name__ == '__main__':
    configfile='testroutes.ini'
    appname="main"
    wsgi_app = loadapp("config:%s" % os.path.abspath(configfile), appname)  
    httpd = make_server('localhost', 8282, wsgi_app)  
    httpd.serve_forever()

然后是testroutes.ini文件

 

[DEFAULT]
name=huang

[composite:main]
use=egg:Paste#urlmap
/=show

[pipeline:show]
pipeline = root

[app:root]
paste.app_factory = testroutes:Router.app_factory

由此可见,ini文件按照pastedeploy的模式配置了根目录/,指向pipeline show,pipeline又指向app root。app下指向的是Router的app_factory函数,返回的是Router().根据调用过程,初始化__init__->__call__返回self._routers.根据__init__下写的映射规则,能识别类似/test/123这样的路径,其处理函数调用"Controller"的"action"函数,也就是getMessage。

 

测试运行,在浏览器下输入127.0.0,1:8282/test/123

返回OK,如

 

return webob.Response('OK')

 

测试完毕。

 

bluefire1991

2013.11.2

19:59:12

分享到:
评论

相关推荐

    基于python的openstack资源监控系统设计与实现

    为了优化 OpenStack 监控模块在功能和可视化方面的不足,确保 OpenStack 实例的稳定运行,设计出一个用于 OpenStack 的监控系统。通 过使用 Libvirt、Python 编程语言、Django 框架、Echarts 等开发技术, 完成了...

    使用python创建OpenStack虚拟机

    手把手教您如何使用python语言,创建OpenStack虚拟机。

    基于python的openstack资源监控系统设计与实现.docx

    基于 Python 的 OpenStack 资源监控系统设计与实现 Python 是一种广泛应用于各种领域的高级编程语言,OpenStack 是一个开源的云计算平台。本文旨在设计和实现一个基于 Python 的 OpenStack 资源监控系统,以优化 ...

    OpenStack KVM镜像制作发布

    ### OpenStack KVM镜像制作与发布 ...通过以上步骤,您可以成功地在OpenStack环境中使用KVM技术创建并发布Linux及Windows系统的镜像。这些镜像可以方便地用于快速部署虚拟机实例,提高资源利用效率,简化管理流程。

    openstack设计与实现

    《Open Stack设计与实现》是一本介绍OpenStack设计与实现原理的书。《Open Stack设计与实现》以Juno版本为基础,覆盖了OpenStack的学习方法到设计与实现等各个方面内容,致力于帮助读者形成OpenStack及其各个主要...

    demo-python-openstacksdk

    Python-clients是基于OpenStack的统一命令行模型构建的,确保了不同服务的命令行接口具有一致性。 二、Python-openstacksdk概述 Python-openstacksdk,即OpenStack SDK for Python,是一个面向开发者的高级API库,...

    python-openstacksdk, 用于OpenStack的统一SDK请参见.zip

    python-openstacksdk, 用于OpenStack的统一SDK请参见 openstacksdkopenstacksdk是一个客户端库,用于构建使用OpenStack云的应用程序。 项目旨在提供与openstack许多服务的一致和完整的交互,以及完整的文档。示例和...

    Python库 | openstack-vim-driver-0.1.0.tar.gz

    1. **接口设计**:该驱动库的核心是实现与OpenStack API的交互,这包括了接收OpenStack的请求并转换为对底层虚拟化技术的操作,以及将操作结果反馈回OpenStack。接口设计的灵活性和效率直接影响到整个系统的性能。 ...

    基于Python运维Openstack虚拟机的研究.pdf

    基于公开了原生的 Python API能方便地...本文围绕Openstack云平台虚拟机的创建与运维,简析Openstack的体系架构及虚拟机创建流程,阐述如何建构Openstack Python API运维环境以及如何调用API实现常见的虚拟机管理任务。

    syntribos, OpenStack安全组的python API安全测试工具.zip

    syntribos, OpenStack安全组的python API安全测试工具 团队和知识库标签 Syntribos,自动化的API安全测试工具 syntribos xxxxxxx x xxxxxxxxxxxxx x x xxxxxxxxxxx x xxxxx

    OpenStack API文档

    所有OpenStack命令行工具的功能都能通过Python SDK实现。更多关于OpenStack Python SDK的信息可以在《OpenStack用户指南》中找到。 #### 四、认证流程 为了访问OpenStack服务,用户需要先向OpenStack认证服务发送...

    基于python的openstack资源监控系统设计与实现-毕业论文

    为了优化 OpenStack 监控模块在功能和可视化方面的不足,确保 OpenStack 实例的稳定运行,设计出一个用于 OpenStack 的监控系统。通 过使用 Libvirt 、Python 编程语言、Django 框架、Echarts等开发技术, 完成了...

    openstack部分源码

    NovaClient 提供了对 Nova 服务的命令行接口(CLI)和 Python 库,用于创建、删除、启动、停止、迁移虚拟机,以及管理 Flavor(虚拟机规格)、Image(镜像)和 Network(网络)等资源。 3. **python-neutronclient-...

    openstack安装包(一)

    声明:因为软件超过50M,所以分成了两部分,请搜索openstack安装包(二) 安装包二里面会有一键安装一键卸载的说明,敬请留意 openstack-rpm包信息: augeas-libs-1.0.0-5.el6_5.1.x86_64.rpm boost-program-options...

    Openstack keystone 安装包

    OpenStack Keystone是OpenStack云平台的核心组件之一,主要负责身份管理和服务目录。它提供认证(Authentication)、授权(Authorization)和令牌管理(Token Management)服务,确保用户和系统间的安全交互。在...

    基于python实现用Python实现文件对比分析并生成报告附项目源码分享

    Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算、云计算、大数据和网络编程等领域有着极为广泛的应用,像 OpenStack 这样的云平台就是由 Python 实现的,许多平台即服务(PaaS)产品都支持...

    openstack 设计与实现

    《OpenStack设计与实现》是一本深度探讨OpenStack开源云计算平台的专业书籍,旨在为读者提供一个全面、深入的OpenStack学习资源,以帮助初学者快速入门,并对OpenStack的内部工作机制有深入的理解。OpenStack是一个...

    openstack网络配置及管理

    ### OpenStack网络配置及管理深度解析 #### 一、OpenStack网络概述 OpenStack作为一款开源的云操作系统,其核心组件之一便是网络管理组件Neutron(原名Quantum)。网络配置与管理在OpenStack中扮演着至关重要的...

    OpenStack Compute调研及安装

    Nova通过与其它OpenStack组件如Glance(镜像服务)、Neutron(网络服务)和Cinder(块存储服务)紧密集成,实现全面的云基础设施服务。 2. OpenStack Compute 安装 安装OpenStack Compute涉及到设置实验环境,安装...

Global site tag (gtag.js) - Google Analytics