import json import py import textwrap issues_url = "http://bitbucket.org/api/1.0/repositories/pytest-dev/pytest/issues" import requests def get_issues(): chunksize = 50 start = 0 issues = [] while 1: post_data = {"accountname": "pytest-dev", "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"] link = "https://bitbucket.org/pytest-dev/pytest/issue/%s/" % id 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") parser.add_argument("--refresh", action="store_true", help="invalidate cache, refresh issues") parser.add_argument("--cache", action="store", default="issues.json", help="cache file") args = parser.parse_args() main(args)