-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathquery_releases.py
executable file
·91 lines (69 loc) · 2.29 KB
/
query_releases.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/env python
"""
Helper script for querying github API for release info.
"""
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import
from future import standard_library
standard_library.install_aliases()
import os, sys, re, requests, json, logging, argparse
try:
from urllib.parse import urlparse # Python3
except ImportError:
from urlparse import urlparse # Python2
log_format = "[%(asctime)s: %(levelname)s/%(funcName)s] %(message)s"
logging.basicConfig(format=log_format, level=logging.INFO)
TOKEN_RE = re.compile(r"^(.+://)(?:.+@)?(.+)$")
def mask_token(url):
return TOKEN_RE.sub(r"\1xxxxxxxx@\2", url)
def get_releases(url, token):
"""Query releases."""
if token is not None:
headers = {"Authorization": "token %s" % token}
else:
headers = {}
r = requests.get(url, headers=headers)
r.raise_for_status()
return r.json()
def get_assets(url, token, release):
"""Query releases."""
releases = get_releases(url, token)
for rel in releases:
if rel["tag_name"] == release:
return rel["assets"]
return []
def parse_url(url):
"""Return oauth token and url."""
u = urlparse(url)
if "@" in u.netloc:
token, host = u.netloc.split("@")
else:
token = None
host = u.netloc
return token, "{}://{}{}".format(u.scheme, host, u.path)
def main(url, release):
"""Route request."""
token, api_url = parse_url(url)
logging.info("Github repo URL: %s" % mask_token(url))
if release is None:
for i in get_releases(url, token):
# print(json.dumps(i, indent=2))
print(("{}|{}".format(i["id"], i["tag_name"])))
else:
for i in get_assets(url, token, release):
# print(json.dumps(i, indent=2))
print(("{}|{}".format(i["name"], i["url"])))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"-r",
"--release",
help="Get assets for a specific release",
required=False,
default=None,
)
parser.add_argument("repo_api_url", help="Github API url for repo")
args = parser.parse_args()
main(args.repo_api_url, args.release)