2011-06-03 133 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

相關問題