From 3d1bfcd1cc6c9ffba3a55af32c1869083f515a25 Mon Sep 17 00:00:00 2001 From: Shinwell Hu Date: Thu, 4 Jun 2020 03:29:14 +0000 Subject: [PATCH 1/4] improve tc_reminder --- tc_reminder.py | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/tc_reminder.py b/tc_reminder.py index bb651c29..a5a15e9f 100755 --- a/tc_reminder.py +++ b/tc_reminder.py @@ -16,7 +16,7 @@ from datetime import datetime class Advisor: def __init__(self): - self.secret = open(os.path.expanduser("~/.gitee_token.json"), "r") + self.secret = open(os.path.expanduser("~/.gitee_personal_token.json"), "r") self.token = json.load(self.secret) # self.req = urllib.request.Request('https://gitee.com/api/v5/repos/#{owner}/issues') self.header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"} @@ -48,12 +48,14 @@ class Advisor: return resp def get_prs(self): - list_url = "https://gitee.com/api/v5/repos/openeuler/community/pulls?access_token={token}&state=open&sort=created&direction=desc&page=1&per_page=100" + pulls_url = "https://gitee.com/api/v5/repos/openeuler/community/pulls" + list_url = pulls_url + "?access_token={token}&state=open&sort=created&direction=desc&page=1&per_page=100" url = list_url.format(token=self.token["access_token"]) return self.get_json(url) def get_pr_comments(self, number): - desc_url = "https://gitee.com/api/v5/repos/openeuler/community/pulls/{number}/comments?access_token={token}&page=1&per_page=100" + pulls_url = "https://gitee.com/api/v5/repos/openeuler/community/pulls" + desc_url = pulls_url + "/{number}/comments?access_token={token}&page=1&per_page=100" url = desc_url.format(number=number, token=self.token["access_token"]) return self.get_json(url) @@ -81,12 +83,28 @@ if __name__ == "__main__": last_update = pr["updated_at"] print("URL: https://gitee.com/openeuler/community/pulls/{number}".format(number=pr["number"])) print("Title: "+pr["title"]) - comm = adv.get_pr_comments(pr["number"]) - for c in comm: - #print("comment updated at:") - #pprint(datetime.strptime(c["updated_at"], adv.time_format)) - commenters.append(c["user"]["login"]) + comments = adv.get_pr_comments(pr["number"]) + last_update = datetime.strptime(comments[0]["updated_at"], adv.time_format) + comments.reverse() + current_lgtm = 0 + current_approve = False + for comment in comments: + commenters.append(comment["user"]["login"]) + if comment["body"].startswith("new changes are detected"): + last_update = datetime.strptime(comment["updated_at"], adv.time_format) + break # older comments are ignored + elif comment["body"].startswith("***lgtm*** is added in this pull request"): + current_lgtm = current_lgtm + 1 + elif comment["body"].startswith("***approved*** is added in this pull request"): + current_approve = True + tc = adv.filter_out_tc(commenters) - print("Currently involved TC members: " + ", ".join(tc) + "\n") + old = datetime.now() - last_update.replace(tzinfo=None) + print("Currently {num} days old".format(num=old.days)) + print("Currently involved TC members: " + ", ".join(tc)) + print("Currently has {num} /lgtm".format(num=current_lgtm)) + if current_approve: + print("Currently /approve") + print("") -- Gitee From ec00ce89d3a6e0be7e682a8bdd57a570158311f0 Mon Sep 17 00:00:00 2001 From: Shinwell Hu Date: Thu, 4 Jun 2020 05:32:25 +0000 Subject: [PATCH 2/4] reverse comments --- tc_reminder.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tc_reminder.py b/tc_reminder.py index a5a15e9f..91feef3d 100755 --- a/tc_reminder.py +++ b/tc_reminder.py @@ -77,6 +77,7 @@ if __name__ == "__main__": adv = Advisor() PRs = adv.get_prs() + PRs.reverse() for pr in PRs: commenters = [] commenters.append(pr["user"]["login"]) @@ -99,8 +100,9 @@ if __name__ == "__main__": current_approve = True tc = adv.filter_out_tc(commenters) - old = datetime.now() - last_update.replace(tzinfo=None) - print("Currently {num} days old".format(num=old.days)) + age = datetime.now() - last_update.replace(tzinfo=None) + age_days = max(age.days, 0) + print("Currently {num} days old".format(num=age_days)) print("Currently involved TC members: " + ", ".join(tc)) print("Currently has {num} /lgtm".format(num=current_lgtm)) if current_approve: -- Gitee From 5c84f0f4a9b22292d55f037e4c895c2da78956e6 Mon Sep 17 00:00:00 2001 From: Shinwell Hu Date: Wed, 10 Jun 2020 07:32:51 +0000 Subject: [PATCH 3/4] fix lint issue --- tc_reminder.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tc_reminder.py b/tc_reminder.py index 91feef3d..f5fd7f7e 100755 --- a/tc_reminder.py +++ b/tc_reminder.py @@ -14,17 +14,22 @@ import yaml from pprint import pprint from datetime import datetime -class Advisor: +class Advisor(object): + """ + This is a object abstract TC robot + """ def __init__(self): self.secret = open(os.path.expanduser("~/.gitee_personal_token.json"), "r") self.token = json.load(self.secret) -# self.req = urllib.request.Request('https://gitee.com/api/v5/repos/#{owner}/issues') self.header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"} self.tc_members = None self.time_format = "%Y-%m-%dT%H:%M:%S%z" def get_json(self, url): + """ + Return object parsed from remote json + """ headers = self.header.copy() headers["Content-Type"] = "application/json;charset=UTF-8" req = urllib.request.Request(url = url, @@ -37,6 +42,9 @@ class Advisor: def get_file(self, repo, path): + """ + Get remote raw file + """ url = "https://gitee.com/{repo}/raw/master/{path}".format(repo=repo, path=path) req = urllib.request.Request(url = url, headers = self.header, @@ -48,23 +56,35 @@ class Advisor: return resp def get_prs(self): + """ + Get list of PRs + """ pulls_url = "https://gitee.com/api/v5/repos/openeuler/community/pulls" list_url = pulls_url + "?access_token={token}&state=open&sort=created&direction=desc&page=1&per_page=100" url = list_url.format(token=self.token["access_token"]) return self.get_json(url) def get_pr_comments(self, number): + """ + Get Comments for a specific PR + """ pulls_url = "https://gitee.com/api/v5/repos/openeuler/community/pulls" desc_url = pulls_url + "/{number}/comments?access_token={token}&page=1&per_page=100" url = desc_url.format(number=number, token=self.token["access_token"]) return self.get_json(url) def get_tc_members(self): + """ + Get list of current TC members + """ m = yaml.load(adv.get_file("openeuler/community", "sig/TC/OWNERS"), Loader=yaml.Loader) self.tc_members = m["maintainers"] return m["maintainers"] def filter_out_tc(self, users): + """ + Pick TC members from users + """ if not self.tc_members: self.get_tc_members() return [x for x in self.tc_members if x in users] @@ -83,7 +103,7 @@ if __name__ == "__main__": commenters.append(pr["user"]["login"]) last_update = pr["updated_at"] print("URL: https://gitee.com/openeuler/community/pulls/{number}".format(number=pr["number"])) - print("Title: "+pr["title"]) + print("Title: " + pr["title"]) comments = adv.get_pr_comments(pr["number"]) last_update = datetime.strptime(comments[0]["updated_at"], adv.time_format) comments.reverse() -- Gitee From 44e9fe07649ce36e31105968844278cb7b7a4354 Mon Sep 17 00:00:00 2001 From: Shinwell Hu Date: Wed, 10 Jun 2020 07:41:20 +0000 Subject: [PATCH 4/4] fix lint issue --- tc_reminder.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tc_reminder.py b/tc_reminder.py index f5fd7f7e..1c76f68a 100755 --- a/tc_reminder.py +++ b/tc_reminder.py @@ -25,7 +25,6 @@ class Advisor(object): self.tc_members = None self.time_format = "%Y-%m-%dT%H:%M:%S%z" - def get_json(self, url): """ Return object parsed from remote json @@ -40,7 +39,6 @@ class Advisor(object): resp = json.loads(u.read().decode("utf-8")) return resp - def get_file(self, repo, path): """ Get remote raw file -- Gitee