smooth-operator/pullrequest.py
Viktor Sjölind 96e6da2752 Refactor to run in both Python 2.7 and Python 3.6
Refactor to run in both Python 2.7 and Python 3.6. This is important as
python 2.7 is end of life.

I tried to edit as few things as possible in this commit to minimize
conflicts which means the code could be prettier.

Signed-off-by: Viktor Sjölind <viktor@sjolind.se>
2017-06-10 11:59:11 +02:00

86 lines
2.8 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() == str(obj["id"]):
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(str(obj["id"]) + "\n")
def prettyprint(self, repo_name, obj):
return "New PR in " + repo_name \
+ ": '" + obj["title"] \
+ "' by " \
+ obj["user"]["login"] \
+ " - " \
+ obj["html_url"]
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"])