徒然なるままな想い書き

何気なく見たり聞いたりした時に得られる『思わぬ発見、気付き』を読者の皆さまに届けています。

pythonでRedmineのチケットを自動でつくる!

最近Redmineのチケットを生成するpythonのスクリプトをつくっていたのですが、残念ながら公式のサイトなどのサンプルがあまり充実していませんでした。
ということで、せっかくなのでサンプルとして私の作ったスクリプトを載せておきます。公式のREST APIを使って、XMLをPOSTしています。

チケットをpythonのスクリプトでつくれるようになると、例えばリポジトリへのコミット時にフックして付随するチケットを生成するなど、チケットをイベントに対して自動で生成することができるようになり、とても便利です。

# -*- coding:utf-8 -*-
from xml.etree.ElementTree import Element, SubElement, Comment
import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom
import urllib2

if __name__ == '__main__':
    issue = Element('issue')

    project_id = SubElement(issue, 'project_id')
    project_id.text = '5'

    subject = SubElement(issue, 'subject')
    subject.text = 'TEST TICKET'

    tracker_id = SubElement(issue, 'tracker_id')
    tracker_id.text = '2'

    priority = SubElement(issue, 'priority')
    priority.text = '4'

    priority = SubElement(issue, 'assigned_to_id')
    priority.text = '3'

    custom_fields = SubElement(issue, 'custom_fields', {'type':'array'})
    custom_field_1 = SubElement(custom_fields, 'custom_field', {'id':'1'})
    custom_field_value_1 = SubElement(custom_field_1, 'value')
    custom_field_value_1.text = 'A'

    watcher_user_ids = SubElement(issue, 'watcher_user_ids', {'type':'array'})
    watcher_user_id_1 = SubElement(watcher_user_ids, 'watcher_user_id')
    watcher_user_id_1.text = '4'
    watcher_user_id_2 = SubElement(watcher_user_ids, 'watcher_user_id')
    watcher_user_id_2.text = '3'

    string = ET.tostring(issue, 'utf-8')
    pretty_string = minidom.parseString(string).toprettyxml(indent='  ', encoding="utf-8")

    # API key
    api_key = '***'

    # Redmine URL
    url = 'http://localhost/redmine/issues.xml'

    # POST
    request = urllib2.Request(url, data=pretty_string)
    request.add_header('Content-Type', 'text/xml')
    request.add_header('X-Redmine-API-Key', api_key)
    request.get_method = lambda: 'POST'
    response = urllib2.urlopen(request)
    ret = response.read()
    #print(ret)

(API Reference)
www.redmine.org



ではでは。

広告を非表示にする