/
github.py
67 lines (56 loc) · 1.8 KB
/
github.py
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
import requests
import tag
import release
GITHUB_API_URL = "https://api.github.com/graphql"
QUERY = """
query($repository_owner:String!,
$repository_name: String!,
$tags_count: Int!,
$releases_count: Int!,) {
repository(owner: $repository_owner,
name: $repository_name) {
refs(last: $tags_count, refPrefix:"refs/tags/") {
nodes {
name
target {
commitUrl
}
}
}
releases(last: $releases_count) {
nodes {
tag {
name
prefix
}
}
}
}
}
"""
class Github:
def __authorization_header(self):
return "token " + self.token
def __request_headers(self):
return {
'authorization': self.__authorization_header(),
}
def __init__(self, token):
self.token = token
def __parse_tags_and_releases(self, response):
repository = response["data"]["repository"]
tags = [tag.Tag(i) for i in repository["refs"]["nodes"]]
releases = [release.Release(i["tag"]) for i in repository["releases"]["nodes"]]
return (tags, releases)
def get_tags_and_releases(self, repository_owner, repository_name, tags_count, releases_count):
payload = {"query": QUERY,
"variables": {
"repository_owner": repository_owner,
"repository_name": repository_name,
"tags_count": tags_count,
"releases_count": releases_count
}}
print "Requesting for", repository_name
response = requests.post(GITHUB_API_URL, json=payload, headers=self.__request_headers())
print "Got status code for", repository_name, response.status_code
return self.__parse_tags_and_releases(response.json())