How to update an issue in Jira v5.1 from Python script using REST API
jira, python, rest
Solution
If you're using Python 2.7.x, I recommend jira-python. It's a Python package that handles the entire REST communication with Jira:
http://jira-python.readthedocs.org/en/latest/
Problem
I would like to be able to update an issue in Jira v5.1 from a Python script using the REST api. I have the following piece of code to extract the information of an existing issue, which works perfectly: ``` import urllib2 import urllib import cookielib import json serverURL = 'http://jiraserver.com' # Get the authentication cookie using the REST API cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) authURL = serverURL + '/rest/auth/latest/session' creds = {'username' : jirauser, 'password' : passwd} req = urllib2.Request(authURL) req.add_data(json.dumps(creds)) req.add_header("Content-type", "application/json") req.add_header("Accept", "application/json") fp = opener.open(req) fp.close() queryURL = serverURL + '/rest/api/latest/issue/SANDBOX-150' req = urllib2.Request(queryURL) req.add_header("Content-type", "application/json") req.add_header("Accept", "application/json") fp = opener.open(req) data = json.load(fp) fp.close() ``` I would like to extend this to be able to update the same issue, and I have the following piece of code: ``` queryURL = serverURL + '/rest/api/latest/issue/SANDBOX-150' issueUpdate = { 'update': { 'comment': [ { 'add': { 'body': 'this is a comment' } } ] } } req = urllib2.Request(queryURL) req.add_data(json.dumps(issueUpdate)) req.add_header("Content-type", "application/json") req.add_header("Accept", "application/json") fp = opener.open(req) fp.close() ``` When I try to execute the code, I get the following error message: ``` File "/usr/lib64/python2.6/urllib2.py", line 397, in open response = meth(req, response) File "/usr/lib64/python2.6/urllib2.py", line 510, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib64/python2.6/urllib2.py", line 435, in error return self._call_chain(*args) File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain result = func(*args) File "/usr/lib64/python2.6/urllib2.py", line 518, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 405: Method Not Allowed ``` and the error points back to "fp = opener.open(req)" in my code. I have tried to search the web to see if I could find out a solution but without luck. Does anyone know what I'm doing wrong? Thanks and regards