ひよっこ。

I want to…

TicketBox導入メモ

Posted by hikaruworld : 2009 9月 18

Topページに特定条件のチケット一覧を表示したく、何かいいものがないかなぁと探していると、
TicketBox.pyというマクロがいいよと@Ryuzeeさんのところで紹介されていたので、
ちょっくら試してみることにしました。

インストールの過程で少しはまったのでメモしておきます。

とりあえず、MacroなのでTrac-HacksTicketBoxMacro
最新リビジョン(rev:5658)を落としてきてTRAC_ROOT/plugins以下に配備しました。
ちなみにtracのバージョンはTrac-0.11.1.ja1になります。

その後、お決まりのごとくApacheを再起動します。
ところがなぜか、Adminの管理画面でもマクロが有効化されておらず、設定も反映されていないようです。
というわけで、とりあえずログを覗いてみると、こんなエラーが出ていました。

2009-09-17 10:58:43,806 Trac[loader] ERROR: Failed to load plugin from /hoge/hoge/trac/plugins/TicketBox.py
Traceback (most recent call last):
File “/usr/local/python252/lib/python2.5/site-packages/Trac-0.11.1.ja1-py2.5.egg/trac/loader.py”, line 89, in _load_py_files
module = imp.load_source(plugin_name, plugin_file)
File “/mnt/raid/source/data/trac/pma-opration/plugins/TicketBox.py”, line 65, in
ver = [int(x) for x in verstr.split(“.”)]
ValueError: invalid literal for int() with base 10: ”

イテレータをまわしているところで落ちているようです。
ちょっとソースを覗いて見ます(こういうときマクロだと確認しやすくて楽でよいですね)。

63行目辺りは以下のようになっていました。

# get trac version
verstr = re.compile('([0-9.]+).*').match(version).group(1)
ver = [int(x) for x in verstr.split(".")]
[/soureccode]
65行目は以下の通りです。
[soureccode language="python"]
ver = [int(x) for x in verstr.split(".")]

おそらくint()へのキャストの部分で落ちていることが推測されます。
63行目で渡されるversionの値を確認してみると、

– 0.11.1.ja1

になっていました。

…いや、まぁね。
re.compileでマッチングさせてその後にsplitで分割させているようですが、これが原因で落ちているようです。
この正規表現コンパイルだと最後に空白値が渡されて、その空白値をintでキャストしようとしていますね…
日本語ローカライズされているtracはバージョンの振り方が公式のものに対して、最後のjaXが付与されているのが問題になっているようです。

ためしに、英語版のtrac0.11.5に対して実行してみたところ問題なく実行されることが確認できました。

というわけで、対処療法として、キャストする前にチェックするようにソースを修正しておきました。
(正規表現を直せといわれそうですが…)

ver = [int(0 if x == "" else x) for x in verstr.split(".")]

OK-。
なんというか、Pythonの三項演算子は気持ち悪いですね。。。。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。