チケットの更新
チケットの更新は 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
という変数に代入して、チケットの登録に使用しています。