« ユーザ毎の初期ページ設定プラグイン | Main | NoteBoxPlugin »

2008.11.06

カスタムクエリ画面で更新日を条件に抽出したい(2)

 カスタムクエリ画面で更新日を条件に抽出したいで、無理矢理更新日を条件に検索する機能を追加してみました。まぁ、自分も書いていますが、予想通り「範囲指定ができた方がいい」という要望がありました。

 すがるのダイアリー 最近一週間でクローズしたチケットを抽出するTracのカスタムレポートによると、Trac0.12において、日付指定によるクエリを実行できるようになるようです。#2288 Date/time based ticket queriesで、対応されたのはr7588

 ってことで、0.12devのソースを元に、0.11.1を改造してみました。
  ⇒query.py (2.1K)

 get_constraint_sql関数(というか、上記のquery.pyにはこの関数しか含まれていません)を置き換えて使います。上記の関数に加えて、それを呼び出している場所(2ヶ所)の周辺の書き換えを行います。

constraint_sql = filter(None,
  [get_constraint_sql(k, val, mode, neg)
  for val in v])
if not constraint_sql:
  continue
if neg:
  clauses.append("(" + " AND ".join(
    [item[0] for item in constraint_sql]) + ")")
else:
  clauses.append("(" + " OR ".join(
    [item[0] for item in constraint_sql]) + ")")
args += [item[1] for item in constraint_sql]

の部分の最後のargs += ~をコメントアウトし、そのすぐ下の
constraint_sql = get_constraint_sql(k, v[0], mode, neg)
if constraint_sql:
  clauses.append(constraint_sql[0])
  args.append(constraint_sql[1])

args.appendの部分をargs.extendに書き換えます。

 前提として 前回のカスタマイズが適用されている必要があります(なお、今回のカスタマイズは更新日のみ対応しています)。
 また、r7588の場合、例えば終了日に2008/11/05と指定した場合は不等号の関係で2008/11/4までのチケットしか抽出されませんが、内部で+1日して2008/11/05のチケットも抽出対象となるようにしています。

日付指定方法は
yyyy/MM/dd ⇒ 更新日が指定日以降のチケットが抽出対象
;yyyy/MM/dd ⇒ 更新日が指定日以前のチケットが抽出対象
yyyy/MM/dd;yyyy/MM/dd ⇒ 更新日が指定日の範囲内のチケットが抽出対象
といった感じで、セミコロンで区切ります。また、「に次が含まれる」「が次で始まる」「が次で終わる」「は次と等しい」は同じ挙動を、「に次は含まれない」「は次と等しくない」は同じ挙動を示します(後者は、反対の条件での抽出となります)。

#タイムゾーンの取り扱いでミスっているかも知れません・・・。

【補足】

if ';' in value:
  (start, end) = [each.strip() for each in
    value.split(';', 1)]
else:
  (start, end) = (value.strip(), '')

の else: 節の内容を(start, end) = (value.strip(), value.strip())にすると、セミコロンがない場合は入力された日付のみが抽出対象となります。

2008/11/07追記
 日付ではなく、システム日付からのオフセット値でも抽出できるようにしてみました。
 ダウンロード: query.py.2 (2.6K)
これを使えば、例えば、過去1週間以上更新されていないチケットなんていうのも、;-7という条件で抽出することができるようになります。なお、オフセット値かどうかは、引数の値がintに変換できるかどうかでチェックしています。

2008/11/08追記
 query.pyのimportのところで、from datetime import datetime, timedeltaの部分でtimeの追加が必要となります(記述が漏れていました)。

2008/11/22追記
query.pyのimport宣言において、from trac.util.datefmt import to_timestamp, utcの部分にparse_dateの追加が必要となります(記述が漏れていました)。

|

« ユーザ毎の初期ページ設定プラグイン | Main | NoteBoxPlugin »

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/43022014

Listed below are links to weblogs that reference カスタムクエリ画面で更新日を条件に抽出したい(2):

» カスタムクエリ抽出結果画面の更新日の表示 [気の向くままに・・・]
 カスタムクエリの抽出結果画面において更新日の列を結果に追加した場合、デフォルト [Read More]

Tracked on 2008.11.14 at 23:29

« ユーザ毎の初期ページ設定プラグイン | Main | NoteBoxPlugin »