Skip to content

Commit 8351c3c

Browse files
committed
Move authentication token to make Repository a reusable library
Now `Repository` requires a `token` parameter for authentication instead of using the `config` module to get it directly. This means the cli program itself is now passing the token in. The benefit of this is that the `Repository` library can be reused in other applications.
1 parent 4cd0826 commit 8351c3c

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

gitconsensus/gitconsensus.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import github3
33
import os
44
import random
5+
from gitconsensus import config
56
from gitconsensus.repository import Repository
67
import string
78

@@ -34,7 +35,7 @@ def twofacallback(*args):
3435
@click.argument('username')
3536
@click.argument('repository_name')
3637
def list(username, repository_name):
37-
repo = Repository(username, repository_name)
38+
repo = get_repository(username, repository_name)
3839
requests = repo.getPullRequests()
3940
for request in requests:
4041
click.echo("PR#%s: %s" % (request.number, request.validate()))
@@ -45,7 +46,7 @@ def list(username, repository_name):
4546
@click.argument('repository_name')
4647
@click.argument('pull_request')
4748
def info(username, repository_name, pull_request):
48-
repo = Repository(username, repository_name)
49+
repo = get_repository(username, repository_name)
4950
request = repo.getPullRequest(pull_request)
5051
click.echo("PR#%s: %s" % (request.number, request.pr.title))
5152
consensus = repo.getConsensus()
@@ -64,7 +65,7 @@ def info(username, repository_name, pull_request):
6465
@click.argument('repository_name')
6566
@click.argument('pull_request')
6667
def forcemerge(username, repository_name, pull_request):
67-
repo = Repository(username, repository_name)
68+
repo = get_repository(username, repository_name)
6869
request = repo.getPullRequest(pull_request)
6970
click.echo("PR#%s: %s" % (request.number, request.pr.title))
7071
request.vote_merge()
@@ -75,7 +76,7 @@ def forcemerge(username, repository_name, pull_request):
7576
@click.argument('repository_name')
7677
@click.argument('pull_request')
7778
def forceclose(username, repository_name, pull_request):
78-
repo = Repository(username, repository_name)
79+
repo = get_repository(username, repository_name)
7980
request = repo.getPullRequest(pull_request)
8081
click.echo("PR#%s: %s" % (request.number, request.pr.title))
8182
request.close()
@@ -85,7 +86,7 @@ def forceclose(username, repository_name, pull_request):
8586
@click.argument('username')
8687
@click.argument('repository_name')
8788
def merge(username, repository_name):
88-
repo = Repository(username, repository_name)
89+
repo = get_repository(username, repository_name)
8990
requests = repo.getPullRequests()
9091
for request in requests:
9192
if request.validate():
@@ -99,7 +100,7 @@ def merge(username, repository_name):
99100
@click.argument('username')
100101
@click.argument('repository_name')
101102
def close(username, repository_name):
102-
repo = Repository(username, repository_name)
103+
repo = get_repository(username, repository_name)
103104
requests = repo.getPullRequests()
104105
for request in requests:
105106
if request.isBlocked():
@@ -117,7 +118,7 @@ def close(username, repository_name):
117118
@click.option('--color-positive', default='#0052cc')
118119
@click.option('--color-notice', default='#fbf904')
119120
def createlabels(username, repository_name, color_negative, color_positive, color_notice):
120-
repo = Repository(username, repository_name)
121+
repo = get_repository(username, repository_name)
121122
repo.setLabelColor('License Change', color_notice)
122123
repo.setLabelColor('Consensus Change', color_notice)
123124
repo.setLabelColor('Has Quorum', color_positive)
@@ -128,5 +129,9 @@ def createlabels(username, repository_name, color_negative, color_positive, colo
128129
repo.setLabelColor('gc-closed', color_negative)
129130

130131

132+
def get_repository(username, repository_name):
133+
credentials = config.getGitToken()
134+
return Repository(username, repository_name, credentials['token'])
135+
131136
if __name__ == '__main__':
132137
cli()

gitconsensus/repository.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from gitconsensus import config
21
import datetime
32
import github3
43
import json
@@ -29,30 +28,31 @@
2928
3029
"""
3130

31+
consensus_url_template = "https://raw.githubusercontent.com/%s/%s/master/.gitconsensus.yaml"
3232

33-
def githubApiRequest(url):
34-
auth = config.getGitToken()
33+
34+
def githubApiRequest(url, token):
3535
headers = {
3636
'Accept': 'application/vnd.github.squirrel-girl-preview',
3737
'user-agent': 'gitconsensus',
38-
'Authorization': "token %s" % (auth['token'],)
38+
'Authorization': "token %s" % (token,)
3939
}
4040
return requests.get(url, headers=headers)
4141

4242

4343
class Repository:
4444

45-
def __init__(self, user, repository):
45+
def __init__(self, user, repository, token=False):
4646
self.user = user
4747
self.name = repository
4848
self.contributors = False
4949
self.collaborators = {}
50-
auth = config.getGitToken()
51-
self.client = github3.login(token=auth['token'])
50+
self.token = token
51+
self.client = github3.login(token=token)
5252
self.client.set_user_agent('gitconsensus')
5353
self.repository = self.client.repository(self.user, self.name)
54-
consensusurl = "https://raw.githubusercontent.com/%s/%s/master/.gitconsensus.yaml" % (self.user, self.name)
55-
res = githubApiRequest(consensusurl)
54+
consensusurl = consensus_url_template % (self.user, self.name)
55+
res = githubApiRequest(consensusurl, self.token)
5656
self.rules = False
5757
if res.status_code == 200:
5858
self.rules = yaml.load(res.text)
@@ -81,7 +81,7 @@ def isContributor(self, username):
8181
self.contributors = [str(contributor) for contributor in contributor_list]
8282
return username in self.contributors
8383

84-
def isCollaborator(username):
84+
def isCollaborator(self, username):
8585
if username not in self.collaborators:
8686
self.collaborators[username] = self.repository.is_collaborator(username)
8787
return self.repository.is_collaborator(username)
@@ -106,7 +106,7 @@ def __init__(self, repository, number):
106106

107107
# https://api.github.com/repos/OWNER/REPO/issues/1/reactions
108108
reacturl = "https://api.github.com/repos/%s/%s/issues/%s/reactions" % (self.repository.user, self.repository.name, self.number)
109-
res = githubApiRequest(reacturl)
109+
res = githubApiRequest(reacturl, self.repository.token)
110110
reactions = json.loads(res.text)
111111

112112
self.yes = []

0 commit comments

Comments
 (0)