smooth-operator/pullrequest.py
2017-06-01 12:17:15 +02:00

84 lines
2.7 KiB
Python

import requests
class PullRequest:
seen_prs_file = "seen_prs"
repos = [
{
"channel": "#pelux",
"name": "meta-bistro",
"uri": "https://api.github.com/repos/pelagicore/meta-bistro/pulls"
},
{
"channel": "#pelux",
"name": "meta-pelux",
"uri": "https://api.github.com/repos/pelagicore/meta-pelux/pulls"
},
{
"channel": "#pelux",
"name": "meta-bistro",
"uri": "https://api.github.com/repos/pelagicore/meta-bistro/pulls"
},
{
"channel": "#pelux",
"name": "meta-pelux-bsp-intel",
"uri": "https://api.github.com/repos/pelagicore/meta-pelux-bsp-intel/pulls"
},
{
"channel": "#pelux",
"name": "meta-pelux-bsp-rpi",
"uri": "https://api.github.com/repos/pelagicore/meta-pelux-bsp-rpi/pulls"
},
{
"channel": "#pelux",
"name": "pelux-manifests",
"uri": "https://api.github.com/repos/pelagicore/pelux-manifests/pulls"
},
{
"channel": "#pelux",
"name": "software-factory",
"uri": "https://api.github.com/repos/pelagicore/software-factory/pulls"
}
]
def has_seen_before(self, obj):
try:
with open(self.seen_prs_file, "r") as f:
for line in f.readlines():
if line.strip() == obj["merge_commit_sha"]:
return True
except IOError:
pass
return False
def mark_pr_as_seen(self, obj):
with open(self.seen_prs_file, "a") as f:
f.write(obj["merge_commit_sha"] + "\n")
def prettyprint(self, repo_name, obj):
return "New PR in " + repo_name \
+ ": '" + obj["title"] \
+ "' by " \
+ obj["user"]["login"]
def check_all(self):
for repo in self.repos:
r = requests.get(repo["uri"])
if r.status_code != 200:
print "Error fetching %s", repo["name"]
break
prs = r.json()
for pr in prs:
if not self.has_seen_before(pr):
self.mark_pr_as_seen(pr)
yield {"channel": repo["channel"],
"message": self.prettyprint(repo["name"], pr)}
# Test
if __name__ == "__main__":
p = PullRequest()
for line in p.check_all():
print line["message"]