It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

How to update Issue from Python script using REST api

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

0 votes
Answer accepted

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/

Suggest an answer

Log in or Sign up to answer
Community showcase
Posted in United States

Welcome new members!

Wow, I got swamped and now that I've finally gotten my head back above water, I find we have several new members! Welcome @Darren Keith lowman , @Amanda Babb , @Luis Zapata , @Joli Holmes , and @bh...

29 views 0 2
View post

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you