チケットの更新
チケットの更新は PUT メソッドで実施できます。ここでは、subject の変更と notes(コメント)の追記を行ってみます。更新用ファイルcurl_put.jsonの内容は、次のとおりとします。
{
"issue": {
"subject": "cURL からのテストチケット",
"notes": "Changing the subject"
}
}
実行コマンドは次のとおりです。宛先URLは新規作成のときとは異なり、更新対象チケットのID 6番を含む記述になっています。
$ curl -v -H "Content-Type: application/json" -X PUT \ -H "X-Redmine-API-Key: $API_KEY" --data "@curl_put.json" \ http://redmine-server/issues/6.json
チケットの削除
チケットの削除は、DELETE メソッドで行います。なお、削除では追加・変更するデータはないため --data オプションは使いません。
$ curl -v -H "Content-Type: application/json" -X DELETE \ -H "X-Redmine-API-Key: $API_KEY" http://redmine-server/issues/6.json
Pythonからのチケット操作
次はPythonのコードで、Redmineのチケットを操作してみましょう。まずは、コマンドラインの対話モードで確認してみます。
以下で紹介するメソッドについては、Webサイト「Issues - Python Redmine」(英語)に詳しい解説があります。
チケットの作成
project_id を「biz」、subject を「Python からの書き込み」とするチケットを作成します。
>>> from redmine import Redmine
>>> redmine = Redmine('http://redmine-server', key='API_KEY')
>>> issue = redmine.issue.create(project_id='biz', subject=u'Python からの書き込み')
>>> issue.id
11
チケットの変更
対象チケットを get メソッドで呼び出し、適宜プロパティに変更を加えます。最後に、save メソッドを呼び出して変更を反映させます。
>>> issue = redmine.issue.get(11) >>> issue.notes = u'変更のテスト' >>> issue.save() True
チケットの削除
チケットの削除は、対象のチケットのIDを引数に、delete メソッドを呼び出すだけです。
>>> redmine.issue.delete(10) True
チケット作成スクリプトの作成
今度は、コマンドラインからチケット作成を行うスクリプトを作成してみます。次に示すのがそのソースコードです。筆者のGitHubからダウンロードできます。
import sys
from redmine import Redmine
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-u', '--url', dest='url', help='Endpoint url of a redmine')
parser.add_option('-k', '--key', dest='key', help='API Access Key')
parser.add_option('-s', '--subject', dest='subject', help='Subject of a reporting issue')
parser.add_option('-p', '--project_id', dest='project_id', help='Project ID of the issue')
parser.add_option('-d', '--description', dest='description', help='Description of the issue')
(options, args) = parser.parse_args()
redmine = Redmine(options.url, key=options.key)
issue = redmine.issue.create(project_id=options.project_id,
subject=options.subject)
if options.description is None:
issue.description = u"This ticket was created by issue_reporter.py"
else:
issue.description = options.description
issue.notes = u"""
このチケットは自動登録されました。
確認、対応をお願いします。
"""
issue.save()
url、key、project_id、sucject、description という属性の値は、コマンドライン引数で指定します(たとえば url は -u や --url オプションで指定)。
コマンドライン引数は、optparse モジュール(コマンドラインオプション解析器) を利用して読み込みます。それを parse_args メソッドにより options という変数に代入して、チケットの登録に使用しています。
