75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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)
 |