3

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

3
  • call me crazy but maybe it's something to do with the 405 error? Commented Dec 7, 2012 at 12:09
  • I'll second Ben Speakmon's jira-python lib. Having done Python REST at least three ways in the last two years I've settled on his library. Seems to work fine in Python 2.6 and 2.7 for me. Commented Dec 7, 2012 at 17:52
  • Thanks for the answers. jira-python seems to be the way to go. Commented Dec 10, 2012 at 7:10

1 Answer 1

4

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/

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for the feedback. Unfortunately I'm currently stuck to Python 2.6. Does this mean I need Python 2.7.x to get around my problems?
I would look at the jira-python source code and see how they implemented issue updating, maybe that'll give you an idea on what you're doing wrong.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.