@@ -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 = '\n Either:\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