tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

get_issues.py (2323B)


      1 import json
      2 from pathlib import Path
      3 
      4 import requests
      5 
      6 
      7 issues_url = "https://api.github.com/repos/pytest-dev/pytest/issues"
      8 
      9 
     10 def get_issues():
     11    issues = []
     12    url = issues_url
     13    while 1:
     14        get_data = {"state": "all"}
     15        r = requests.get(url, params=get_data)
     16        data = r.json()
     17        if r.status_code == 403:
     18            # API request limit exceeded
     19            print(data["message"])
     20            exit(1)
     21        issues.extend(data)
     22 
     23        # Look for next page
     24        links = requests.utils.parse_header_links(r.headers["Link"])
     25        another_page = False
     26        for link in links:
     27            if link["rel"] == "next":
     28                url = link["url"]
     29                another_page = True
     30        if not another_page:
     31            return issues
     32 
     33 
     34 def main(args):
     35    cachefile = Path(args.cache)
     36    if not cachefile.exists() or args.refresh:
     37        issues = get_issues()
     38        cachefile.write_text(json.dumps(issues), "utf-8")
     39    else:
     40        issues = json.loads(cachefile.read_text("utf-8"))
     41 
     42    open_issues = [x for x in issues if x["state"] == "open"]
     43 
     44    open_issues.sort(key=lambda x: x["number"])
     45    report(open_issues)
     46 
     47 
     48 def _get_kind(issue):
     49    labels = [label["name"] for label in issue["labels"]]
     50    for key in ("bug", "enhancement", "proposal"):
     51        if key in labels:
     52            return key
     53    return "issue"
     54 
     55 
     56 def report(issues):
     57    for issue in issues:
     58        title = issue["title"]
     59        # body = issue["body"]
     60        kind = _get_kind(issue)
     61        status = issue["state"]
     62        number = issue["number"]
     63        link = "https://github.com/pytest-dev/pytest/issues/%s/" % number
     64        print("----")
     65        print(status, kind, link)
     66        print(title)
     67        # print()
     68        # lines = body.split("\n")
     69        # print("\n".join(lines[:3]))
     70        # if len(lines) > 3 or len(body) > 240:
     71        #    print("...")
     72    print("\n\nFound %s open issues" % len(issues))
     73 
     74 
     75 if __name__ == "__main__":
     76    import argparse
     77 
     78    parser = argparse.ArgumentParser("process bitbucket issues")
     79    parser.add_argument(
     80        "--refresh", action="store_true", help="invalidate cache, refresh issues"
     81    )
     82    parser.add_argument(
     83        "--cache", action="store", default="issues.json", help="cache file"
     84    )
     85    args = parser.parse_args()
     86    main(args)