2014-02-18 48 views
1

我目前正在用python/twisted構建一個http服務器。扭曲的延期請求和文件與ErrorPage

該服務器必須獲取另一個Web服務器上的內容,將其存儲在本地並將響應發送回客戶端。如果遇到404,它必須嘗試提供本地文件,否則將失敗,如果根本沒有本地文件。

爲了達到這個目的,我使用了不同的請求。我的代碼大致是這樣的:

class RemoteFile(Resource): 
    isLeaf = True 

    def render_GET(self, request): 
     # Start downloading the corresponding file on the remote server 
     # Will call `self.serve_local_file` when done 
     return NOT_DONE_YET 

    def serve_local_file(self, request): 
     if self.file_exists_for_request(request): 
      fileResource = File(filename) 
      fileResource.render(request) 
     else: 
      page = NoResource("No such file") 
      html = page.render(request) 

      # The next two lines are my problem 
      request.write(html) 
      request.finish() 

我不得不在最後兩行(write()finish()),以獲得實際完成的要求添加。我不需要這些行來處理File資源,因爲它與NoResource不同,它本身處理寫入/完成操作。

這不是問題本身,但事實證明,這page變量沒有硬編碼的,它實際上是在我的課,這應該是一個Resource一個fallback屬性。這意味着我將來可以用默認的File替換它。在這種情況下,我將不得不修改我的代碼...

我做錯了什麼,或者這是不一致的接口FileErrorPage

+0

請包含一個完整的可運行示例,以便我們可以實際運行某些內容並查看行爲是什麼,而不是猜測。 – Glyph

回答

1

有沒有在你的問題本身就是一個暗示:

return NOT_DONE_YET 

這是如何的IResource信號是否它返回它的調用者必須寫入請求之前明確一個字符串「完成」的要求,還是部分IResource負責做這些事情。

檢查你打電話render的返回值,然後相應地採取行動。

+0

有趣的答案,我會研究這個! – aspyct