« プロジェクト間のリンク | トップページ | VBAのモジュールをSVNで管理するためにマクロでエクスポートする »

2009年5月20日 (水)

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で設定するってことしか無いようです.

|

« プロジェクト間のリンク | トップページ | VBAのモジュールをSVNで管理するためにマクロでエクスポートする »

Trac」カテゴリの記事

XMLRPC」カテゴリの記事

コメント

古い記事へのコメントすみません。


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分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: XMLRPCでticket.aueryの応答にarrayの件数が100件に制限されている(?)ことについて調査する:

« プロジェクト間のリンク | トップページ | VBAのモジュールをSVNで管理するためにマクロでエクスポートする »