クライアント ソフトウェアのRequests ライブラリを使用して、REST API 経由で Redmine 3.3.0.stable インストールに時間エントリを作成しようとしています。次のコードを使用しています。
urlSuffix='/time_entries.json'
time_entry = {
'hours': 0.25,
'project_id': 1,
'comments': 'test',
'activity_id': 1,
}
params = {
'key': session.APIKey,
}
headers = {
'Content-Type': 'application/xml',
}
requestURL = "%s%s" % (session.redmineBaseUrl, urlSuffix)
response = requests.post(requestURL, json=time_entry, params=params)
response.status_code
は常に422
であり、応答には次のローカライズされたメッセージが含まれます。
{"errors":["stunden muss ausgefüllt werden"]}
に変換されます
時間を指定する必要があります
ただし、ご覧のとおり、「hours」フィールドは正しく指定されています。さらに、ログファイルは、パラメーターが Redmine に正しく到達したことを示しています。
Started POST "/PROJECTNAMEHERE/time_entries.json?key=APIKEYHERE" for 62.178.175.81 at 2016-11-15 00:19:47 +0100
Processing by TimelogController#create as JSON
Parameters: {"project_id"=>"1", "spent_on"=>"2016-11-15T00:19:24.513001", "comments"=>"lkj", "activity_id"=>"1", "hours"=>0.25, "key"=>"a009fdb7d15f174b31860cfa9d56fd648737d862"}
Current user: MichaelJaros (id=5)
Rendered common/error_messages.api.rsb (0.2ms)
Completed 422 Unprocessable Entity in 22ms (Views: 0.7ms | ActiveRecord: 5.1ms)
私は同じ結果で試しました:
- ローカライズされた小数点のすべての組み合わせ ( の
,
代わりに.
) - 時間を整数、浮動小数点、または文字列として渡す
- Redmine ボードで見つかったこの同様の問題で示唆されているように、XML に切り替えます(これにより、Redmine はプロジェクト ID の欠落や無効についても文句を言います)
- メソッドの代わりに
data=
パラメーターを使用する(これにより、時間の値がログ ファイルではなく文字列になります)json=
post()
"1.0"
1.0
私の最後の手段は、Python Redmine ライブラリの 1 つを試すことですが、この場合、それらが何をすべきかわかりません。
- 私は何か間違ったことをしていますか?
- 正確にはどういう意味ですか:
time_entry (必須): 以下を含む時間エントリ属性のハッシュ: [...]
時間エントリのドキュメントで?リクエストが XML 形式の場合、API は「ハッシュ」ではなく、time_entry にも XML データを必要とするはずです。でも、もしかしたらその部分が間違って書かれていたのではないでしょうか?