2

Trac用のプラグインを作成するタスクが与えられました。課題追跡システムに提出されたチケット数と見積もりの​​バーンダウンデータを提供する必要があります。ユーザーは自分のリクエストをwikimacroとして書き込み、バーンダウンをcsvファイルとしてダウンロードするためのリンク/ボタンが提供されます。チャートとしての出力も計画されていますが、優先度は低くなります。

データを処理するための実用的なソリューションがありますが、次の問題が残ります。

私の質問

ユーザーの要求によって動的に作成されたファイルのダウンロードリンク/-ボタンをWikiページに提供するにはどうすればよいですか?

私はtracソース自体や他のプラグインでファイルを送信する試みを見てきましたが、私はWebプログラミングに慣れていないので、実際には役に立ちません。

Update1 私はフェリックスが提案した方法で問題を解決しようとしてきましたが、それは私にとって新しい問題を引き起こしました。この(ばかげた)例は私の問題を示しているはずです。My Macroは次のURLを生成し、それをwikiページへのリンクとして追加します。

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

ただし、条件がtrueを返しても、RequestHandlerは反応しません。 編集:このコードは、例の動作バージョンを示しています。

新しいURL:

#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()はすでに存在します)

支援のために3Thxを更新=)

4

2 に答える 2

2

基本的に、特定のURLを処理し、動的に作成されたデータを返す独自のIRequestHandlerを作成する必要があります。その後、マクロはリクエストハンドラー用に構成されたURLを返す必要があります。

于 2011-06-08T21:06:23.043 に答える
2

match_requestが呼び出されない場合はprocess_request、実行する機会がありません。プラグインに問題がなく、Tracがプラグインを正しくロードできないと仮定すると、おそらく発生しているのは、バージョンmatch_requestが呼び出される前に別のハンドラーがURLと一致していることです。ログレベルを「デバッグ」に上げてみて、誰がその要求を処理しているかを知るのに十分な情報が提供されるかどうかを確認してください。

もう1つのオプションは、自動生成されたファイルのカスタム「名前空間」を作成することです。生成されたURLの「wiki」を「files」のようなものに置き換えてみてください。match_requestこれにより、プラグインのメソッドが呼び出される前に、組み込みハンドラーがリクエストを処理できないようにする必要があります。

于 2011-06-13T18:05:47.823 に答える