TracのXMLRPCを拡張してみる
レポートの登録までできるようになったので,いろいろなレポートをつくろうということで,ガントチャートの作成時の効率化や,バーンダウンチャートを作成するためにTracを拡張してみました.そのメモです.
やるべきことは
1. IXMLRPCHandlerをインプリしたクラスを作る
XMLRPCプラグインのticket.pyとWorklogプラグインのxmlrpc.pyを参照
2. xmlrpc_methodsにメソッドを追加と必要なメソッド追加
(マップ型の)リストを返す,引数がチケット番号(int)のgetWorkHoursメソッドを追加するために次のようにしてメソッドを追加する.
def __init__(self):
passdef xmlrpc_namespace(self):
return 'dependency'def xmlrpc_methods(self):
yield ('TICKET_VIEW', ((list, int),), self.getWorkHours)
3. 実際のメソッドを追加
時間関連のカスタムフィールドを変更時間が一致したものを1レコードにまとめて返すようにする.
ticket.pyのgetRecentChangesを参考にすると,ふつうにSQLは実行できそう.今回は権限はTICKET_VIEWなのでSELECTだけなら問題ないでしょう.問題となるのはNoneがあるとエラーになるので,JOINを使う場合は要注意.Excelで使うことしか考えていないので,””を返すようにしました.
def getWorkHours(self, req, id):
"""Returns a table of changetime records"""
#
db = self.env.get_db_cnx()
cursor = db.cursor()
sql="SELECT DISTINCT t.time, t1.newvalue, t2.newvalue, t3.newvalue FROM ticket_change t"
sql = sql + " LEFT JOIN ticket_change t1 ON t1.time = t.time AND t1.field='totalhours'"
sql = sql + " LEFT JOIN ticket_change t2 ON t2.time = t.time AND t2.field='estimatedhours'"
sql = sql + " LEFT JOIN ticket_change t3 ON t3.time = t.time AND t3.field='baseline_cost'"
sql = sql + " WHERE t.ticket='%s'" % id
sql = sql + " AND (t.field='totalhours' OR t.field='estimatedhours' OR t.field='baseline_cost')"
#sql = sql + " GROUP BY t.time"
cursor.execute(sql)
result = []
totalhours=""
estimatedhours=""
baseline_cost=""
for row in cursor:
d={}
d['time']=row[0]
d['time_iso']=xmlrpclib.DateTime(datetime.datetime.fromtimestamp(row[0]))
if row[1] == None:
d['totalhours']=totalhours
else:
d['totalhours']=row[1]
totalhours=row[1]
if row[2] == None:
d['estimatedhours']=estimatedhours
else:
d['estimatedhours']=row[2]
estimatedhours=row[2]
if row[3] == None:
d['baseline_cost']=baseline_cost
else:
d['baseline_cost']=row[3]
baseline_cost=row[3]
if totalhours != "":
result.append(d)
return result
その他の参照ページ
XMLRPCの拡張はすごく簡単.できるだけいらないデータ流さないようにとか考えると,積極的に拡張していってもいいのかなと思います.
| 固定リンク
« Tracの情報をもとにExcelで作ったレポートをPDF化し,Tracのチケットに添付してしまうところまでを自動化したい. | トップページ | TracのデータからバーンダウンチャートをExcelで作る »
「Trac」カテゴリの記事
- Dockerでkanon(Trac)を動かしてみた2 - イメージの作成(2017.08.27)
- Dockerでkanon(Trac)を動かしてみた(2017.08.27)
- TracLightningにコバンザメしてKanonと同様にPluginをインストールする(2014.04.13)
- kanonをTrac1.0.1+MySQL対応に変更してみた(2013.11.24)
- kanonをTrac1.0.1対応に変更してみた(2013.11.11)
「XMLRPC」カテゴリの記事
- TracのXMLRPCを使ったExcelのマクロでmilestoneなどの設定を取得/更新する(2011.10.31)
- VBAでXMLRPCを汎用的に修正してTrac連携をそれに合わせて修正した(2011.10.24)
- TracのチケットをOutlookに取り込んで表示する.(2010.02.12)
- ユーザ名を漢字で表示するために,Tracユーザの一覧をXMLRPCで取得する(2009.10.18)
- TracのデータからバーンダウンチャートをExcelで作る(2009.10.13)
この記事へのコメントは終了しました。
コメント