2011-06-08 106 views
2

我已經爲Trac編寫了一個插件。 它應該提供在問題跟蹤系統中提交的票據數量和估算的燃盡數據。 用戶以wikimacro的身份寫入他的請求,並提供一個鏈接/按鈕用於下載作爲csv文件的burndown,輸出結果也是按照圖表計算的,但優先級較低。由Trac- Wikimacro動態創建的文件的下載鏈接

我有一個處理數據的工作解決方案,但我留下了以下問題。

我的問題

我如何可以提供downloadlink/- 針對動態由用戶請求創建一個文件在Wiki頁面的按鈕?

我見過一些嘗試在trac源文件和其他插件中發送文件,但是因爲我對web編程並不是很瞭解,

UPDATE1 我一直在試圖解決這個問題菲利克斯建議的方式,開闢了一個新的問題對我來說。這個(愚蠢的)例子應該證明我的問題。 我的宏生成以下URL並將其作爲鏈接添加到Wikipage。

//http://servername.com/projectname/wiki/page_name?teddy=bear  

但RequestHandler不作出反應,即使條件返回true。 編輯:這段代碼現在顯示示例的工作版本。

新網址:

#example url 
#http://127.0.0.1:8000/prove/files/new 

class CustomRequestHandlerModule(Component): 
    implements(IRequestHandler) 

    def match_request(self,req): 
     #old, not working 
     #return "teddy=bear"== str(req.path_info).split('?')[1] 
     #new 
     accept="/files/new"== str(req.path_info) 
     return accept 

    def process_request(self,req): 
     csvfile = self.create_csv() 
     req.send_response(200) 
     req.send_header('Content-Type', 'text/csv') 
     req.send_header('Content-length', len(csvfile)) 
     req.send_header('Content-Disposition','filename=lala.csv') 
     req.end_headers() 
     req.write(csvfile) 
     raise RequestDone  

UPDATE2 插入loggingstatements顯示match_request不會被調用。

我在做什麼錯? (是的,create_csv()已經存在)

更新3 THX,幫助=)

回答

2

如果match_request沒有被調用,那麼process_request從來沒有機會執行。假設您的插件沒有任何問題阻止Trac正確加載,則可能發生的是另一個處理程序在您的match_request版本被調用之前匹配URL。嘗試將您的日誌級別提高到「調試」並查看它是否提供了足夠的信息來告知誰正在處理該請求。

另一種選擇是爲自動生成的文件創建一個自定義「命名空間」。嘗試用「文件」之類的東西替換生成的網址中的「維基」。這應該防止任何內置處理程序在調用插件的match_request方法之前處理請求。

2

基本上你需要編寫自己的IRequestHandler用來處理特定的URL,並返回你的動態創建的數據。之後,你的宏應該返回一個爲你的請求處理器配置的url。