2013-11-19 04:31:32 +08:00
|
|
|
import json
|
|
|
|
import py
|
|
|
|
import textwrap
|
|
|
|
|
|
|
|
issues_url = "http://bitbucket.org/api/1.0/repositories/hpk42/pytest/issues"
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
|
|
|
def get_issues():
|
|
|
|
chunksize = 50
|
|
|
|
start = 0
|
|
|
|
issues = []
|
|
|
|
while 1:
|
|
|
|
post_data = {"accountname": "hpk42",
|
|
|
|
"repo_slug": "pytest",
|
|
|
|
"start": start,
|
|
|
|
"limit": chunksize}
|
|
|
|
print ("getting from", start)
|
|
|
|
r = requests.get(issues_url, params=post_data)
|
|
|
|
data = r.json()
|
|
|
|
issues.extend(data["issues"])
|
|
|
|
if start + chunksize >= data["count"]:
|
|
|
|
return issues
|
|
|
|
start += chunksize
|
|
|
|
|
|
|
|
kind2num = "bug enhancement task proposal".split()
|
|
|
|
|
|
|
|
status2num = "new open resolved duplicate invalid wontfix".split()
|
|
|
|
|
|
|
|
def main(args):
|
|
|
|
cachefile = py.path.local(args.cache)
|
|
|
|
if not cachefile.exists() or args.refresh:
|
|
|
|
issues = get_issues()
|
|
|
|
cachefile.write(json.dumps(issues))
|
|
|
|
else:
|
|
|
|
issues = json.loads(cachefile.read())
|
|
|
|
|
|
|
|
open_issues = [x for x in issues
|
|
|
|
if x["status"] in ("new", "open")]
|
|
|
|
|
|
|
|
def kind_and_id(x):
|
|
|
|
kind = x["metadata"]["kind"]
|
|
|
|
return kind2num.index(kind), len(issues)-int(x["local_id"])
|
|
|
|
open_issues.sort(key=kind_and_id)
|
|
|
|
report(open_issues)
|
|
|
|
|
|
|
|
def report(issues):
|
|
|
|
for issue in issues:
|
|
|
|
metadata = issue["metadata"]
|
|
|
|
priority = issue["priority"]
|
|
|
|
title = issue["title"]
|
|
|
|
content = issue["content"]
|
|
|
|
kind = metadata["kind"]
|
|
|
|
status = issue["status"]
|
|
|
|
id = issue["local_id"]
|
2013-11-19 16:20:50 +08:00
|
|
|
link = "https://bitbucket.org/hpk42/pytest/issue/%s/" % id
|
2013-11-19 04:31:32 +08:00
|
|
|
print("----")
|
|
|
|
print(status, kind, link)
|
|
|
|
print(title)
|
|
|
|
#print()
|
|
|
|
#lines = content.split("\n")
|
|
|
|
#print ("\n".join(lines[:3]))
|
|
|
|
#if len(lines) > 3 or len(content) > 240:
|
|
|
|
# print ("...")
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser("process bitbucket issues")
|
2013-11-21 04:04:19 +08:00
|
|
|
parser.add_argument("--refresh", action="store_true",
|
|
|
|
help="invalidate cache, refresh issues")
|
2013-11-19 04:31:32 +08:00
|
|
|
parser.add_argument("--cache", action="store", default="issues.json",
|
|
|
|
help="cache file")
|
|
|
|
args = parser.parse_args()
|
|
|
|
main(args)
|