Forums: Help (Thread #32419)

xmlrpc(JSON-rpc)でのdatetime.iso8601の指定方法 (2012-07-01 22:00 by ichirom #64427)

ichiromと申します。
かねてからTrac Lightningを利用させて頂いています。

知識があまり無いながらも、xmlrpc(JSON-rpc)を利用して、チケットの状況確認を行うjava scriptを作成しているのですが、ticket.getRecentChanges()のdateTime.iso8601 sinceの指定方法がよく分からないので、ご教授頂けないでしょうか。

現状は、下記のような要求本文をPOSTしているのですが、
{"method":"ticket.getRecentChanges","params":["20120101T10:00:00"],"id":[99]}

下記のような応答本文が返ってきてしまいます。
{"error": {"message": "ServiceException details : unsupported operand type(s) for -: 'unicode' and 'datetime.datetime'", "code": -32603, "name": "JSONRPCError"}, "result": null, "id": [99]}

pythonが読めないので推測ですが、どうもsinceの指定がdatetime型として認識されず、"datefmt.py"のto_utimestamp()でエラーになっているようなのですが。
色々調べてみましたが、解答にたどり着けずにいます(もし、既出のヘルプ内容でしたら申し訳ありません)。
試しに、sinceを空にしてみると、すべてのチケット番号が返ってきたので、sinceの指定方法の誤りだと考えています。

よろしくお願いいたします。

RE: xmlrpc(JSON-rpc)でのdatetime.iso8601の指定方法 (2012-07-01 22:56 by jun66j5 #64429)

> 現状は、下記のような要求本文をPOSTしているのですが、
> {"method":"ticket.getRecentChanges","params":["20120101T10:00:00"],"id":[99]}
この渡し方の場合、受け取るほうはもらったパラメータが string であると判断します。JSON-RPC として datetime だと判らせる必要があります。

具体的には以下のようにしてください。

{
"method":"ticket.getRecentChanges",
"params":[
{"__jsonclass__": ["datetime", "2012-01-01T10:00:00"]}
],
"id": 42
}

この datetime に対する指定方法は http://localhost/trac/SampleProject/jsonrpc#JSON-RPC
> Implementation details:
> JSON-RPC has no formalized type system, so a class-hint system is used for input and output of non-standard types
というところに書かれています。

また id の値は配列ではなく単に数値を指定します。
Reply to #64427

RE: xmlrpc(JSON-rpc)でのdatetime.iso8601の指定方法 (2012-07-03 21:42 by ichirom #64457)

Jun Omae様

ichiromです。

迅速な対応ありがとうございます。
教えて頂いた通りの指定でうまくいきました!!

JSON-RPCのImplemetation detailsを見逃していた上に、
よく考えると、既にticket.getで同様の応答文を処理していました。

ただ、自分ではそこに気が付けなかった&よく理解できていなかったので、
質問させて頂いて&ご回答頂けて非常に助かりました。

これでまた、楽しくTracが利用できそうです。
ありがとうございました。
Reply to #64427