2011-06-03 90 views
2

我想使用WsgiService库在Google App Engine(GAE)上编写REST服务。我最喜欢的两个功能是自动输出特定格式(JSON,XML,...)的方式,具体取决于请求路径中结尾的文件名。此外,它能够使用正则表达式将路径的部分直接映射到变量。是否可以在Python 2.5(Google App Engine)中使用wsgiservice?

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

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

回答

2

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

@MyDecorator 
def myfunction(): 
    mycode 

这是相同的:

所以,如果你可以不屑于这种风格编写所有的代码,它应该仍然工作(假设其他代码与Python 2.5兼容)。

要清楚自己在做什么,我可能把装饰在评论上面,如:

# @MyDecorator 

编辑:如果装饰带参数,它必须返回一个函数,函数被调用函数被包装:

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

等效于此:

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

感谢您的回应。两个问题:如果装饰器本身带有参数,那么被替换的函数/类参数作为第一个还是最后一个参数传递?还有如何找出lib需要的Python版本? (我对Python比较新,在任何文档中找不到以上内容......) – fivanski 2011-06-03 08:10:06

+0

1.好问题。其实都不是;如果装饰器接受参数,它必须返回一个函数,并且被替换的函数被传递给*。我将编辑答案以示例(因为这里没有空格)。 2.没有具体的方法来做到这一点;只需查阅相关文档。 – mgiuca 2011-06-03 08:53:54

+0

感谢您的努力,不幸的是,WsgiService确实需要Python 2.6,替换了简单的在一个wsgiservice模块中发生语法异常的修饰器。 – fivanski 2011-06-03 09:51:52

相关问题