【问题标题】:Is it possible to use wsgiservice with Python 2.5 (Google App Engine)?是否可以将 wsgiservice 与 Python 2.5(Google App Engine)一起使用?
【发布时间】:2011-06-03 07:51:36
【问题描述】:

我想使用WsgiService 库在Google App Engine (GAE) 上编写一个REST 服务。我最喜欢的两个功能是它根据请求路径结尾的文件名自动输出某种格式(JSON、XML、...)的方式。它还可以使用正则表达式直接将部分路径映射到变量。

The official tutorial 使用 Python 2.5 中不可用的类装饰器,因此 GAE 会引发无效语法异常。堆栈溢出问题 Class decorators in Python 2.5? 提到类装饰器只是语法糖,可以用向后兼容的代码替换。 wsgiservice 文档也没有提到严格要求 Python 2.6。不幸的是,我无法替换类装饰器以使其在 GAE 上运行。

是否可以替换教程中的类装饰器以使用 Python 2.5 运行?如果没有,是否有任何其他库在兼容 GAE 的同时提供上述功能?

【问题讨论】:

    标签: google-app-engine syntax wsgi python-2.5


    【解决方案1】:

    我没有使用过 WsgiService,但是 Python 2.6 中的装饰器确实是 just function calls with a special syntax。所以如果你看到下面的代码:

    @MyDecorator
    def myfunction():
        mycode
    

    相当于这样:

    def myfunction():
        mycode
    myfunction = MyDecorator(myfunction)
    

    因此,如果您不愿意以这种风格编写所有代码,它应该仍然可以工作(假设其他代码符合 Python 2.5)。

    为了说明你在做什么,我可能会把装饰器放在上面的评论中,比如:

    # @MyDecorator
    

    编辑:如果装饰器接受参数,它必须返回一个函数,并且那个函数在被包装的函数的情况下被调用:

    @MyDecorator(arg1, arg2)
    def myfunction():
        mycode
    

    相当于这个:

    def myfunction():
        mycode
    myfunction = MyDecorator(arg1, arg2)(myfunction)
    

    【讨论】:

    • 感谢您的回复。两个问题:如果装饰器本身接受参数,被替换的函数/类参数是作为第一个参数还是最后一个参数传递?还有你怎么能找出一个lib需要什么版本的Python? (我对 Python 比较陌生,在任何文档中都找不到上述内容...)
    • 1.好问题。实际上两者都不是;如果装饰器接受参数,它必须返回一个函数,并且被替换的函数传递给到那个。我将编辑答案以显示一个示例(因为这里没有空格)。 2.没有具体的方法可以做到这一点;只需查阅相关文档即可。
    • 感谢您的努力,不幸的是 WsgiService 确实需要 Python 2.6,替换装饰器只是使语法异常发生在 wsgiservice 模块之一中..
    【解决方案2】:

    WsgiService 的 PKG-INFO 文件包含以下行

    Classifier: Programming Language :: Python :: 2.6

    因此不适合 GAE (Python 2.5)。

    请求的功能可以通过不同的 URL 映射来实现,如下所述: http://code.google.com/appengine/docs/python/tools/webapp/running.html#URL_Mappings

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 2023-04-11
      • 2017-12-13
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多