-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgithub.py
More file actions
88 lines (65 loc) · 2.29 KB
/
Copy pathgithub.py
File metadata and controls
88 lines (65 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import os
import requests
class GitHub:
def __init__(self, owner, repos, resources):
self.owner = owner
self.repos = repos
self.resources = resources
self.page = 1
self.headers = self._build_headers()
def _build_headers(self):
token = os.environ.get("GITHUB_TOKEN")
if token:
return {
"Authorization": f"Bearer {token}",
"Accept": "application/vnd.github+json",
}
return {
"Accept": "application/vnd.github+json",
}
def _get(self, url):
response = requests.get(url, headers=self.headers, timeout=10)
if response.status_code != 200:
return None
data = response.json()
if not data:
return None
return data
def get_commit_messages(self, repo, commits):
commit_messages = {}
for commit in commits:
sha = commit.get("sha")
message = commit.get("commit", {}).get("message")
if sha and message:
commit_url = (
f"https://api.github.com/repos/"
f"{self.owner}/{repo}/commits/{sha}"
)
commit_messages[commit_url] = message
return commit_messages
def read(self):
bucket = {}
for repo in self.repos:
resource_data = {}
for resource in self.resources:
url = (
f"https://api.github.com/repos/"
f"{self.owner}/{repo}/{resource}?page={self.page}"
)
data = self._get(url)
if not data:
continue
if resource == "commits":
resource_data[resource] = {
"url": url,
"data": self.get_commit_messages(repo, data),
}
else:
resource_data[resource] = {
"url": url,
"data": data,
}
if resource_data:
bucket[repo] = resource_data
self.page += 1
return bucket if bucket else None