TracHack その1

本日はTracをごにょごにょしていました。目標はTracにチケット番号検索ボックスを追加すること。テキストボックスにチケット番号を入れて横の検索ボタンを押すとその番号のチケットが表示されるというお手軽プログラミング。でも単純にWikiにHTMLは書けないので今回はTracMacroに挑戦。

下記のコードを適当な名前でTracのprojenv/wiki-macrosに保存してください。
保存したファイル名がマクロ名になります。僕の手元ではTicketSearchとしました。

# -*- coding: UTF-8 -*-
"""
チケット検索用のボックスを表示します。

例:
[[TicketSearch]]
"""

from StringIO import StringIO
import socket
import string
import trac

def execute(hdf, args, env):
    
    rs  = "見たいチケット番号を入力してください。"
    rs += ":<BR>"
    rs += "<input type='text' id='ticketBox'/>"
    rs += "<input type='button' id='ticketButton' value='検索開始' onClick='"
    rs += "window.location=\""
    rs += env.abs_href.base
    rs += "/ticket/\" + document.getElementById(\"ticketBox\").value"
    rs += "' />"
    return rs

JavaScriptでロケーション変えているだけなので、テキストボックスの入力文字はサニタイズしていません。URL的にまずい文字ってどんなのがあったっけ?

こんな単純なプログラムですが、env.abs_href.baseというTracのURLルートを出力するのにえらい苦労していました。

で、Pythonについておもうこと。

  • 引数の型が分かんないのは開発しづらい。
  • カッコの代わりにインデントでブロックを表現するのはいい。
  • でもブロック表現時に「:」がいるのはちょっといけてない気が。

あくまで主観ですが。