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
This widget could not be displayed.
This widget could not be displayed.
Community showcase
Posted 2 hours ago in United States

Request a Demo

Questions? Want to see a demo of the Atlassian tools? Add a comment below or Send us an email

38 views 2 1
View post

Atlassian User Groups

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

Find a group

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

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you