In [42]:
import requests
import sys
from itertools import groupby
JIRA_URL = "https://jira.chemaxon.com/rest/api/2"
In [35]:
jql = """project = IJC
AND type in (Bug, Improvement)
AND updated > 2014-08-11
AND status IN ("Testing Complete", "Testing Required", Closed)
ORDER BY updated DESC"""
params = { "jql": jql, "fields": "priority,issuetype", "expand": "changelog" }
resp = requests.get(JIRA_URL + "/search", auth=('fsedlak', '???'), params=params)
In [36]:
if resp.status_code != 200:
print >> sys.stderr, "Failed request (%s): %s" % (resp, resp.text)
In [15]:
issues = resp.json()["issues"]
In [59]:
TESTING_REQUIRED = 10002
TESTING_COMPLETE = 10001
CLOSED = 6
def put_to_testing_required(item):
return (item["field"] == u'status' and int(item["to"]) == TESTING_REQUIRED)
def put_backwards(item):
return (item["field"] == 'status' and int(item["to"]) not in (TESTING_REQUIRED, TESTING_COMPLETE, CLOSED))
def issue_put_to_test_by(issue):
updates = issue["changelog"]["histories"]
advanced = None
for update in updates:
for item in update["items"]:
if put_to_testing_required(item):
advanced = {k : update[k] for k in ("author", "created")}
if issue["key"] == "IJC-7132":
print "advanced %s" % issue["key"]
elif put_backwards(item):
if issue["key"] == "IJC-7132":
print "backed %s: %s" % (issue["key"], item["to"])
advanced = None
return (issue["key"], advanced)
advancers = filter(lambda item: item[1] is not None, map(issue_put_to_test_by, issues))
In [71]:
#print advancers
def author_name(item):
return item[1]["author"]["name"]
users = {author_name(i): i[1]["author"] for i in advancers}
In [74]:
d = {}
for user, updates in groupby(sorted(advancers, key=author_name), key=author_name):
d[user] = [(u[0], u[1]["created"]) for u in updates]
In [74]:
In [ ]: