Skip to content

Instantly share code, notes, and snippets.

@caffeinatedMike
Created February 21, 2018 16:23
Show Gist options
  • Save caffeinatedMike/e0171efbd207afd90f5b82f54b83d8ae to your computer and use it in GitHub Desktop.
Save caffeinatedMike/e0171efbd207afd90f5b82f54b83d8ae to your computer and use it in GitHub Desktop.
Simple Jira Api Class
import requests
import json
class JiraAPI():
def __init__(self, root, username, password):
#Initialize Data Variables
self.root = root
self.username = username
self.password = password
self.credentials = {'username': self.username,
'password': self.password}
#Initialize Url Variables
self.auth = self.root + '/rest/auth/1/session'
self.search_jql = self.root + '/rest/api/2/search?jql='
#Initialize Requests Session
self.JiraSess = requests.Session()
self.JiraSess.headers.update({'Content-Type': 'application/json',
'Accept': 'application/json'})
self.JiraSess.headers.update({'Cookie': 'JSESSIONID=' + self.getCookie()})
def getCookie(self):
resp = self.JiraSess.post(self.auth, data=json.dumps(self.credentials))
j = json.loads(resp.text)
token = j['session']['value']
return token
def getQuery(self, jql):
query_results = self.JiraSess.get(self.search_jql + jql)
j = json.loads(query_results.text)['issues']
return j
def updateStatus(self, issue, new_status):
resp = self.JiraSess.get(issue['self']+'/transitions')
possible_transitions = json.loads(resp.text)['transitions']
update = {}
update['update'] = {}
update['transition']['id'] = ''
for transition in possible_transitions:
if new_status in transition['name']:
update['transition']['id'] = transition['id']
break
if update['transition']['id'] == '':
return 'Transition/Status Invalid for selected issue'
resp = self.JiraSess.post(issue['self']+'/transitions', data=json.dumps(update))
if resp.status_code == requests.codes.ok:
return 'Issue successfully updated'
else:
return str(json.loads(resp.text)['errorMessages'])
jira = JiraAPI('http://jira.pdev.asinetwork.local:8080',
'USERNAME', 'PASSWORD')
issues = jira.getQuery('project+in+(EIT,+EXCIT,+VELO,+VNE,+VNI)'+
'+AND+status+in+(Open,+%22In+Progress%22,'+
'+Reopened,+Resolved,+%22On+Hold%22,+Problem)'+
'+AND+assignee+in+(amcgee,+mhill)+ORDER+BY+due+ASC,'+
'+status+DESC,+assignee+DESC&&fields=key,priority,'+
'customfield_10305,summary,customfield_10819,duedate,status,assignee')
result = jira.updateStatus(issues[1], 'Start Progress')
print result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment