BLOGTIMES
2007/11/03

tracの通知メールをカスタマイズしてみる

  trac  python 
このエントリーをはてなブックマークに追加

某所のtracにカスタムフィールドを使ってtextareaの項目を追加することになったので、trac.iniの[ticket-custom]を書き換えて対応することにしました。ところが、今回追加した項目自体はticketのtypeが特定の項目のときだけ使うことを想定していたので、ticketのタイプによって通知メールに項目を記載したりしなかったりしたいということになりました。

まぁ、これくらいは誰かやっているだろうという軽い気持ちでスタートしたのですが、tracの通知メールをカスタマイズしているという事例はあまり見つかりませんでした。tracはPythonで書かれていますが、国内のPythonの普及事情を考えると仕方がないことかもしれません。実はPythonは今から7年前頃にZopeを触っていたころにバリバリ書いていたころがあったので、昔取った杵柄ということでカスタマイズにチャレンジしてみました。結局、腕が錆びていてかなり苦戦はしてしまいましたけど

とりあえず場所は特定できたけれど

とりあえずメール本文のテンプレートはtemplates/ticket_notify_email.csで送っているスクリプトはtrac/ticket/notification.pyということはすぐにわかったのですが、具体的にプログラムのどの部分がカスタムフィールドを扱っているのか良くわからずにちょっと時間を食ってしまいましたが、色々試した結果format_props()が下記の部分を処理していることがわかりました。

-------------------------------+-------------------------------------------- Reporter: hoge@example.com | Owner: somebody Type: 課題 | Status: new Priority: 普通 | Milestone: Component: その他 | Version: Resolution: | Keywords: Due_assign: | Due_close: Complete: | -------------------------------+-------------------------------------------- Condition: てすとてすとてすとてすと -------------------------------+--------------------------------------------

今回はTypeが"ほげ"の場合のときだけCondition:のブロックが表示されればよかったので、
かなり手抜きですがこんな感じで片付けてみました。

--- notification.py.org 2007-11-03 23:19:41.537673440 +0900 +++ notification.py 2007-11-03 23:19:41.101746897 +0900 @@ -164,7 +164,7 @@ i += 1 if i % 2: txt += CRLF - if big: + if tkt['type'] == 'ほげ' and big: txt += sep for name, value in big: txt += CRLF.join(['', name + ':', value, '', ''])

せっかくテンプレート使っているんだからこの辺りももうちょっとカスタマイズ可能なようにしてくれればいいのにとちょっと思ったり。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2261
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン