Adding gerrit request file with request methods

- These methods help facilitate querying gerrit for different statistics
  such as earliest merged commit date and number of merged commits
- Next step will be to incorporate these methods into a few IRC bots

Change-Id: Ic370d48c7d079a40d012bcaa6ae0cda78454e407
This commit is contained in:
Matt Smith 2017-11-07 15:33:28 +11:00
parent 4316cbfadd
commit a085b5dc52
1 changed files with 67 additions and 0 deletions

View File

@ -0,0 +1,67 @@
#!/usr/bin/env python
from __future__ import print_function, unicode_literals
import json
import requests
from dateutil.parser import parse as dparse
BASE_URL = "https://review.openstack.org/changes/?q=%s"
def greq(**kwargs):
gfilter = []
for k, v in kwargs.items():
gfilter.append('%s:%s' % (k, v))
resp = requests.get(BASE_URL % ' AND '.join(gfilter))
return json.loads(resp.text[4:])
def get_merged(author):
return greq(owner="{%s}" % author, status='merged')
def get_abandoned(author):
return greq(owner="{%s}" % author, status='abandoned')
def earliest_merged(merged):
return merged[-1]['submitted'].split()[0]
def open_review(merged):
longest = None
for review in merged:
d1 = dparse(review['created'])
d2 = dparse(review['submitted'])
dt = d2 - d1
if not longest or dt > longest:
longest = dt
return longest.days
def lines_added(merged):
return sum(map(lambda x: x['insertions'], merged))
def lines_deleted(merged):
return sum(map(lambda x: x['deletions'], merged))
def projects(merged):
found = set()
map(lambda x: found.add(x['project']), merged)
return "\n\t".join(list(sorted(found)))
def stats(author):
merged = get_merged(author)
abandoned = get_abandoned(author)
return "\n".join(["Cake Day: %s" % earliest_merged(merged),
"Num Merged: %s" % len(merged),
"Num Abandoned: %s" % len(abandoned),
"Longest Open Merged Review: %s" % open_review(merged),
"Lines Added: %s" % lines_added(merged),
"Lines Deleted: %s" % lines_deleted(merged),
"Projects: %s" % projects(merged)])