Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

How to update Issue from Python script using REST api

Jon Helt-Hansen December 5, 2012

Hi,

I would like to be able to update an issue in Jira from a Python script using the REST api. I have the following piece of code, which enables me to extract the information of an existing issue, which works perfect:

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

1 answer

1 accepted

Comments for this post are closed

Community moderators have prevented the ability to post new answers.

Post a new question

0 votes
Answer accepted
twong_atlassian
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
December 7, 2012

Caveat: I didn't spend all that much time staring at things.

My thought is that opener.open is doing a GET rather than a POST, though I just looked at the impl of urllib and it says it does POST if you give a data thing to it... so I'm not sure.

Thoughts:

https://marketplace.atlassian.com/plugins/com.atlassian.jira.jira-python-rest Someone implemented a easy peesy(sp?) thing for doing all things rest against JIRA. It's actaully pretty sweet.

Also, I hated trying to use urllib. Requests made my life easier.

http://docs.python-requests.org/en/latest/

TAGS
AUG Leaders

Atlassian Community Events