diff --git a/scripts/bootstrap_history.py b/scripts/bootstrap_history.py index 216595bc6ff..4440138f7b8 100644 --- a/scripts/bootstrap_history.py +++ b/scripts/bootstrap_history.py @@ -6,6 +6,7 @@ from __future__ import print_function import calendar import datetime import json +import logging import os import re import string @@ -18,12 +19,14 @@ try: except ImportError: requests = None try: - from pygithub3 import Github + from github import Github except ImportError: Github = None from six import string_types from six.moves.urllib.parse import urljoin +log = logging.getLogger(__name__) + PROJECT_DIRECTORY = os.path.join(os.path.dirname(__file__), os.pardir) GALAXY_VERSION_FILE = os.path.join(PROJECT_DIRECTORY, "lib", "galaxy", "version.py") PROJECT_OWNER = "galaxyproject" @@ -40,7 +43,7 @@ DEVTEAM = [ "tnabtaf", "natefoo", "jgoecks", "guerler", "jennaj", "nekrut", "jxtx", "VJalili", "WilliamHolden", "Nerdinacan", - "ic4f", + "ic4f", "mvdbeek" ] TEMPLATE = """ @@ -350,7 +353,7 @@ def do_release(argv): template = template.replace(".. enhancement", "%s\n\n.. enhancement" % enhancement_targets) template = template.replace(".. bug", "%s\n\n.. bug" % bug_targets) release_info = string.Template(template).safe_substitute(release=release_name) - open(release_file, "w").write(release_info.encode("utf-8")) + open(release_file, "w").write(release_info) month = int(release_name.split(".")[1]) month_name = calendar.month_name[month] year = release_name.split(".")[0] @@ -379,7 +382,7 @@ def do_release(argv): next_release_file = _release_file(next_version + "_announce.rst") next_announce = NEXT_TEMPLATE.substitute(**next_version_params) - open(next_release_file, "w").write(next_announce.encode("utf-8")) + open(next_release_file, "w").write(next_announce) releases_index = _release_file("index.rst") releases_index_contents = _read_file(releases_index) releases_index_contents = releases_index_contents.replace(".. announcements\n", ".. announcements\n " + next_version + "_announce\n") @@ -471,29 +474,30 @@ def _release_dates(version): return freeze_date, release_date -def _get_prs(release_name, state="closed"): +def _get_prs(release_name, state="closed", pr_cache=[]): github = _github_client() - pull_requests = github.pull_requests.list( + repo = github.get_repo("%s/%s" % (PROJECT_OWNER, PROJECT_NAME)) + add_to_cache = not pr_cache + pull_requests = pr_cache or repo.get_pulls( state=state, - user=PROJECT_OWNER, - repo=PROJECT_NAME, ) reached_old_prs = False - for page in pull_requests: + for pr in pull_requests: if reached_old_prs: break - for pr in page: - if pr.created_at < datetime.datetime(2016, 11, 1, 0, 0): - reached_old_prs = True - pass - merged_at = pr.merged_at - milestone = pr.milestone - proper_state = state != "closed" or merged_at - if not proper_state or not milestone or milestone['title'] != release_name: - continue - yield pr + if pr.created_at < datetime.datetime(2018, 11, 1, 0, 0): + reached_old_prs = True + pass + merged_at = pr.merged_at + milestone = pr.milestone + proper_state = state != "closed" or merged_at + if not proper_state or not milestone or milestone.title != release_name: + continue + if add_to_cache: + pr_cache.append(pr) + yield pr def main(argv): @@ -585,8 +589,8 @@ def main(argv): owner = None if ident.startswith("pr"): pull_request = ident[len("pr"):] - user = req["head"]["user"] - owner = user["login"] + user = req["head"].user + owner = user.login if owner in DEVTEAM: owner = None text = ".. _Pull Request {0}: {1}/pull/{0}".format(pull_request, PROJECT_URL) @@ -615,7 +619,7 @@ def main(argv): to_doc = wrap(to_doc) if text_target is not None: history = extend_target(text_target, to_doc, history) - if req and 'labels' in req: + if req and req['labels']: labels = req['labels'] if 'area/datatypes' in labels: user_announce = extend_target("datatypes", to_doc, user_announce) @@ -630,12 +634,12 @@ def main(argv): def _read_file(path): with open(path, "r") as f: - return f.read().decode("utf-8") + return f.read() def _write_file(path, contents): with open(path, "w") as f: - f.write(contents.encode("utf-8")) + f.write(contents) def _text_target(github, pull_request, labels=None): @@ -713,7 +717,7 @@ def _text_target(github, pull_request, labels=None): def _pr_to_labels(pr): - labels = [l["name"].lower() for l in pr.labels] + labels = [l.name.lower() for l in pr.labels] return labels @@ -740,6 +744,7 @@ def _github_client(): github_json = os.path.expanduser("~/.github.json") github = Github(**json.load(open(github_json, "r"))) except Exception: + log.exception() github = None return github