Skip to content

Commit 590aa2f

Browse files
author
btskinner
committed
bug fixes to choice (2) to add students
1 parent b448a59 commit 590aa2f

File tree

3 files changed

+90
-53
lines changed

3 files changed

+90
-53
lines changed

grm/__info__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = '0.1.5'
1+
__version__ = '0.1.6'
22
__gh = 'https://github.com/btskinner/'
33
__nm = 'grm'
44
__rp = '{}{}'.format(__gh, __nm)

grm/api.py

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -342,56 +342,42 @@ def getRepos(self):
342342
# Org functions: post/put
343343
# ------------------------
344344

345-
def createRemoteRepo(self, repo_name):
345+
def createRemoteRepo(self, repo_name, private = False):
346346
url = gh_api + 'orgs/' + self.org.name + '/repos'
347-
json = {'name': repo_name, 'private':'true'}
348-
resp = self.postGR(url, json = json)
349-
if round(resp.status_code, -2) == 200:
350-
print('Successfully created remote {}'.format(repo_name))
347+
json = {'name': repo_name}
348+
if private == True:
349+
json['private'] = 'true'
350+
return self.postGR(url, json = json)
351351

352352
def addMember(self, member, role = 'member'):
353353
mid = str(self.roster.students[member].ghid)
354354
url = gh_api + 'orgs/' + self.org.name + '/memberships/' + mid
355355
params = {'role': role}
356-
resp = self.putGR(url, params = params)
357-
if round(resp.status_code, -2) == 200:
358-
print('Successfully added {} to {}.'.format(member,self.org.name))
359-
356+
return self.putGR(url, params = params)
357+
360358
def addAdmin(self, github_id):
361359
url = gh_api + 'orgs/' + self.org.name + '/memberships/' + github_id
362360
params = {'role': 'admin'}
363-
resp = self.putGR(url, params = params)
364-
if round(resp.status_code, -2) == 200:
365-
print('Successfully added {} to {} as admin.'.format(github_id,
366-
self.org.name))
367-
361+
return self.putGR(url, params = params)
362+
368363
def createTeam(self, team_name, permission = 'push'):
369364
url = gh_api + 'orgs/' + self.org.name + '/teams'
370365
json = {'name': team_name, 'permission': permission}
371-
resp = self.postGR(url, json = json)
372-
if round(resp.status_code, -2) == 200:
373-
print('Successfully created team: {}'.format(team_name))
374-
return resp.json()
366+
return self.postGR(url, json = json)
375367

376368
def addMemberToTeam(self, team_name, member, role = 'member'):
377369
mid = str(self.roster.students[member].ghid)
378370
tid = str(self.org.teams[team_name].team_id)
379371
url = gh_api + 'teams/' + tid + '/memberships/' + mid
380372
params = {'role': role}
381-
resp = self.putGR(url, params = params)
382-
if round(resp.status_code, -2) == 200:
383-
state = resp.json()['state']
384-
print('{}\'s membership on team {} is now {}.'.format(member,
385-
team_name,
386-
state))
373+
return self.putGR(url, params = params)
387374

388375
def addRepoToTeam(self, team_name, repo_name):
389376
tid = str(self.org.teams[team_name].team_id)
390377
url = gh_api + 'teams/' + tid + '/repos/' + self.org.name
391378
url += '/' + repo_name
392379
params = {'permission': 'push'}
393-
resp = self.putGR(url, params = params)
394-
if round(resp.status_code, -2) == 200:
395-
print('{} now has access to repo {}'.format(team_name, repo_name))
380+
return self.putGR(url, params = params)
381+
396382

397383

grm/gr.py

Lines changed: 76 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,9 @@ def __str__(self):
3030
def _storeGitRoomInfo(self):
3131

3232
while True:
33-
odir = input('Please give directory for saving: ').strip()
34-
35-
try:
36-
odir = os.path.expanduser(odir)
37-
38-
except AttributeError:
33+
prompt = 'Please give directory for saving: '
34+
odir = os.path.expanduser(input(prompt).strip())
35+
if not os.path.isdir(odir):
3936
errorMessage('Please input a directory path.')
4037
continue
4138

@@ -81,10 +78,6 @@ def _initGitRoom(self, github_login = None, token_file = None,
8178
if choice == 0:
8279
self._storeGitRoomInfo()
8380

84-
self.rgo.getMembers()
85-
self.rgo.getTeams()
86-
self.rgo.getRepos()
87-
8881
else:
8982
prompt = 'Would you like to try again?'
9083
choice = pickOpt(prompt, ['Yes','No'])
@@ -94,6 +87,10 @@ def _initGitRoom(self, github_login = None, token_file = None,
9487
master_repo = None, student_repo_dir = None)
9588
else:
9689
progExit()
90+
91+
self.rgo.getMembers()
92+
self.rgo.getTeams()
93+
self.rgo.getRepos()
9794

9895
def _readGitRoomInfo(self, init_file_path):
9996

@@ -147,10 +144,7 @@ def buildGR(self, from_scratch = False):
147144

148145
to_add = []
149146

150-
if from_scratch:
151-
for k,v in self.rgo.roster.students.items():
152-
to_add.append(k)
153-
else:
147+
if not from_scratch:
154148
# compare roster to remote
155149
current = []
156150
for k,v in self.rgo.org.members.items():
@@ -159,6 +153,13 @@ def buildGR(self, from_scratch = False):
159153
for k,v in self.rgo.roster.students.items():
160154
if v.ghid not in current:
161155
to_add.append(k)
156+
else:
157+
for k,v in self.rgo.roster.students.items():
158+
to_add.append(k)
159+
160+
if len(to_add) == 0:
161+
print('All local students on remote')
162+
return
162163

163164
m = 'Students to be added to {}'.format(self.rgo.org.name)
164165
promptMessage(m, char = '')
@@ -167,6 +168,13 @@ def buildGR(self, from_scratch = False):
167168
ln = self.rgo.roster.students[name].last_name
168169
print('{} {}'.format(fn, ln))
169170

171+
prompt = 'Should repos be private?'
172+
choice = pickOpt(prompt, ['Yes','No'])
173+
if choice == 0:
174+
priv_bool = True
175+
else:
176+
priv_bool = False
177+
170178
# STEPS
171179
# 1. [Remote] Add student as GitRoom member
172180
# 2. [Remote] Init remote repo
@@ -182,28 +190,65 @@ def buildGR(self, from_scratch = False):
182190
gh = self.rgo.roster.students[name].ghid
183191
rn = 'student_{}'.format(ln.lower())
184192
rp = os.path.join(self.lgo.student_repo_dir, rn)
193+
185194
# 1
186-
self.rgo.addMember(member = name)
195+
resp = self.rgo.addMember(member = name)
196+
197+
if round(resp.status_code, -2) == 400:
198+
print(resp.json()['message'])
199+
elif resp.json()['state'] == 'active':
200+
print('{} is already an active member.'.format(name))
201+
elif resp.json()['state'] == 'pending':
202+
print('{} has a pending membership.'.format(name))
203+
187204
# 2
188-
self.rgo.createRemoteRepo(repo_name = rn)
205+
resp = self.rgo.createRemoteRepo(repo_name = rn, private = priv_bool)
206+
207+
if resp.status_code == 422:
208+
text = '\nEither:\n\n'
209+
text += '(1) Remote already exists\n'
210+
text += '(2) Your organization plan doesn\'t allow for private repos \n'
211+
text += ' and you must change the setting to public \n'
212+
text += ' or upgrade your plan through GitHub.'
213+
errorMessage(text)
214+
elif round(resp.status_code, -2) == 200:
215+
print('Successfully created remote {}'.format(rn))
216+
189217
# 3
190218
resp = self.rgo.createTeam(team_name = rn)
191-
team = Team(team_id = resp['id'], name = resp['name'])
192-
if team.name:
219+
220+
if resp.status_code == 422:
221+
print('Team {} already exists!\n'.format(rn))
222+
elif round(resp.status_code, -2) == 200:
223+
print('Successfully created team: {}'.format(rn))
224+
resp = resp.json()
225+
team = Team(team_id = resp['id'], name = resp['name'])
193226
self.rgo.org.teams[team.name] = team
227+
194228
# 4
195-
self.rgo.addMemberToTeam(team_name = rn, member = name)
196-
mem = Member(ghid = gh)
197-
members = {}
198-
members[gh] = mem
199-
if team.name:
200-
self.rgo.org.teams[team.name].members = members
229+
resp = self.rgo.addMemberToTeam(team_name = rn, member = name)
230+
231+
if round(resp.status_code, -2) == 200:
232+
state = resp.json()['state']
233+
print('{}\'s membership on team {} is now {}.'.format(name,
234+
rn,
235+
state))
236+
mem = Member(ghid = gh)
237+
members = {}
238+
members[gh] = mem
239+
201240
# 5
202241
resp = self.rgo.addRepoToTeam(team_name = rn, repo_name = rn)
242+
243+
if round(resp.status_code, -2) == 200:
244+
print('{} now has access to repo {}'.format(rn, rn))
245+
203246
# 6
204247
self.lgo.createLocalRepo(student_repo = rn)
248+
205249
# 7
206250
self.lgo.masterToStudent(student_repo = rn)
251+
207252
# 8
208253
remote = '{}{}/{}.git'.format(__rb, self.rgo.org.name, rn)
209254
self.lgo.gitInit(repo = rp)
@@ -216,7 +261,13 @@ def addGRAdmin(self):
216261

217262
prompt = 'Please give new administrator\'s GitHub id: '
218263
ghid = input(prompt).strip()
219-
self.rgo.addAdmin(github_id = ghid)
264+
resp = self.rgo.addAdmin(github_id = ghid)
265+
266+
if round(resp.status_code, -2) == 400:
267+
errorMessage(resp.json()['message'])
268+
elif round(resp.status_code, -2) == 200:
269+
print('Successfully added {} to {} as admin.'.format(ghid,
270+
self.org.name))
220271

221272
def cloneGR(self):
222273
self.rgo.getRepos()

0 commit comments

Comments
 (0)