/
github.py
124 lines (93 loc) · 3.74 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
try:
import simplejson as json
except:
import json
import base64
import requests
from githubcollective.config import BASE_URL
class Github(object):
"""
"""
_cache = {}
_request_count = 0
_request_limit = 5000
_request_remaining = 5000
def __init__(self, organization, username, password, verbose, pretend):
self.org = organization
self.verbose = verbose
self.pretend = pretend
self.headers = {
'Authorization': 'Basic %s' % base64.encodestring(
'%s:%s' % (username, password)).replace('\n', '')
}
#
# requests library helpers
def _request(self, method, url, data=None):
if self.pretend:
return
kw = {'url': BASE_URL+url+'?per_page=10000',
'headers': self.headers}
if data:
kw['data'] = data
response = method(**kw)
self._request_count += 1
self._request_limit = response.headers['x-ratelimit-limit']
self._request_remaining = response.headers['x-ratelimit-remaining']
response.raise_for_status()
if self.verbose:
print '%s - %s/%s - %s - %s' % (
self._request_count,
self._request_remaining,
self._request_limit,
method.__name__.upper(),
kw['url'],
)
return response
def _get_request(self, url):
return json.load(self._request(requests.get, url))
def _delete_request(self, url):
return self._request(requests.delete, url)
def _post_request(self, url, data):
return json.load(self._request(requests.post, url, data))
def _put_request(self, url):
return self._request(requests.put, url)
def _patch_request(self, url, data):
return self._request(requests.patch, url, data)
#
# github api helpers
def _gh_org_teams(self):
return self._get_request('/orgs/%s/teams' % self.org)
def _gh_team(self, team_id):
return self._get_request('/teams/%s' % team_id)
def _gh_team_members(self, team_id):
return self._get_request('/teams/%s/members' % team_id)
def _gh_team_repos(self, team_id):
return self._get_request('/teams/%s/repos' % team_id)
def _gh_org_repos(self):
return self._get_request('/orgs/%s/repos' % self.org)
def _gh_org_fork_repo(self, fork_url):
return self._post_request('/repos/%s/forks' % fork_url, {'org': self.org})
def _gh_org_create_repo(self, name):
return self._post_request('/orgs/%s/repos' % self.org, {'name': name})
def _gh_org_create_team(self, name, permission='pull'):
assert permission in ['pull', 'push', 'admin']
return self._post_request('/orgs/%s/teams' % self.org, json.dumps({
'name': name,
'permission': permission,
}))
def _gh_org_edit_team(self, id, name, permission=None):
data = {'name': name}
if permission is not None:
data['permission'] = permission
assert permission in ['pull', 'push', 'admin']
return self._patch_request('/teams/%s' % id, json.dumps(data))
def _gh_org_delete_team(self, id):
return self._delete_request('/teams/%s' % id)
def _gh_org_add_team_member(self, id, member):
return self._put_request('/teams/%s/members/%s' % (id, member))
def _gh_org_remove_team_member(self, id, member):
return self._delete_request('/teams/%s/members/%s' % (id, member))
def _gh_org_add_team_repo(self, id, repo):
return self._put_request('/teams/%s/repos/%s/%s' % (id, self.org, repo))
def _gh_org_remove_team_repo(self, id, repo):
return self._delete_request('/teams/%s/repos/%s/%s' % (id, self.org, repo))