XMLRPCでticket.aueryの応答にarrayの件数が100件に制限されている(?)ことについて調査する
追記(2011/04/17):ひまわりさんにご指摘いただきました。m(_ _)m
この記事でいろいろなことやっていますが、XMLRPCでやる場合は”status!=close&max=1000”(’&’は’^amp;’にエンコード)のようにクエリーにmaxを指定することでOkになることを実際に確認しました。
XMLRPCの仕様をよく見ていなかったので
http://www.futomi.com/lecture/japanese/xml_rpc.html
で確認するが,返す情報の上限とかって話は載っていない.
まずはそれっぽいところをTracHacksのソースから探す.
XMLRPCのtracrpc/ticket.py(45)
def query(self, req, qstr='status!=closed'):
""" Perform a ticket query, returning a list of ticket ID's. """
q = query.Query.from_string(self.env, qstr)
out = []
for t in q.execute(req):
out.append(t['id'])
return out
この件とは関係ないが,ticket.queryで何も指定しない場合は,全チケットが出てくるのだと思っていたが,
openの物が出てくることがこの前わかった.そういうものかと思っていたが,ここに'status!=closed'とかいてあったんだ.
TLのソースから検索しtrac/ticket/query.py(121)
def from_string(cls, env, string, **kw):
filters = string.split('&')
kw_strs = ['order', 'group', 'page', 'max']
'max'って,なんかあたりっぽい
maxに何が入るか探す.
trac/ticket/query.py(82)
if max is None: # meaning unspecified
max = self.items_per_page
結局は次の場所で値を入れていた.100件って件数もticket.queryの件数と合う.
trac/ticket/query.py(708)
items_per_page = IntOption('query', 'items_per_page', 100,
"""カスタムクエリの検索結果で 1 ページあたり表示するチケット数の
デフォルト値 (''0.11 以降'')""")
どうやって設定するのかを検索してみると
trac.ini.sampleに
[query]
default_anonymous_query = status!=closed&cc~=$USER
default_query = status!=closed&owner=$USER
items_per_page = 100
こう書いてあった.XMLRPCからQueryの最大を設定するのは無理なようなので,
trac.iniで設定するってことしか無いようです.
| 固定リンク
「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)
この記事へのコメントは終了しました。
コメント
古い記事へのコメントすみません。
XML-RPCのqueryについて調べていると
このページが検索でひっかかるのでコメントしました。
TracのXML-RPCのページの説明文を見る限り指定できるのでは?
と思っていたので出来ない、という結論に疑問を感じてソースを見てみました。
>kw_strs = ['order', 'group', 'page', 'max']
の使われ方を見ると
if field in kw_strs:
kw[field] = processed_values[0]
フィルターに指定したものの中にkw_stsに該当するものがあれば、
その値(=xxx)を格納しています。
なので、queryの引数に&でmaxのフィルターを追加すれば良いだけのように思います。
pythonですが、下記のようにして実際に件数を調整できています。
--
server = xml_rpc.XmlRpcServer(url, user, password)
print server.ticket.query("status!=closed&max=1000")
--
投稿: ひまわり | 2011年4月 3日 (日) 13時38分
ひまわりさん、ありがとうございます。
しばらく時間がないのですが、確認して記事を修正します。
投稿: u-z | 2011年4月 6日 (水) 08時04分
ひまわりさん
ありがとうございます。実際にクエリーの文字列に指定することで100件以上のIDが取得できることを確認しました
投稿: u-z | 2011年4月17日 (日) 23時33分