@@ -330,6 +330,71 @@ def request_fetch(self, user, repo, request, pull=False, force=False):
330
330
raise ResourceNotFoundError ('Could not find opened request #{}' .format (request )) from err
331
331
raise err
332
332
333
+ def _get_key (self , key_id , user = None ):
334
+ try :
335
+ id_num = int (key_id )
336
+ except ValueError :
337
+ raise ResourceError ('Key id shall be an integer' )
338
+ if not user :
339
+ key = self .get_key (key_id )
340
+ if key :
341
+ return key
342
+ user = self .gh .user (user )
343
+ if not user :
344
+ raise ResourceNotFoundError ('Could not find user {}' .format (user ))
345
+ for key in user .iter_keys ():
346
+ if key .id == id_num :
347
+ return key
348
+ raise ResourceNotFoundError ('Key {} not found.' .format (key_id ))
349
+
350
+ def key_create (self , pubkey_file , name = None ):
351
+ with open (os .path .join (pubkey_file , pubkey_file ), 'r' ) as f :
352
+ key_content = f .read ()
353
+ if self ._check_ssh_key (key_content ):
354
+ key = self .gh .create_key (name , key_content )
355
+ if key :
356
+ return key .title , key .id
357
+ raise ResourceError ('Error creating key {}' .format (name ))
358
+
359
+ def key_list (self , user = None ):
360
+ current_user = not user or user == self .user
361
+ user = self .gh .user (user )
362
+ if not user :
363
+ raise ResourceNotFoundError ('Could not find user {}' .format (user ))
364
+ if current_user :
365
+ yield "{:>9} {:<12} {}"
366
+ yield ('key id' , 'Modified' , 'Key title' )
367
+ for key in user .iter_keys ():
368
+ key = self .gh .key (key .id )
369
+ keydate = datetime .strptime (
370
+ key .last_modified ,
371
+ '%a, %d %b %Y %H:%M:%S GMT'
372
+ )
373
+ if keydate .year < datetime .now ().year :
374
+ date_fmt = "%b %d %Y"
375
+ else :
376
+ date_fmt = "%b %d %H:%M"
377
+
378
+ yield (key .id , keydate .strftime (date_fmt ), key .title )
379
+ else :
380
+ yield "{:>8} {:<60}"
381
+ yield ('key id' , 'contents' )
382
+ for key in user .iter_keys ():
383
+ yield (key .id , key .key [:59 ]+ '…' )
384
+
385
+ def key_fetch (self , key_id , user = None ):
386
+ return self ._get_key (key_id , user ).key
387
+
388
+ def key_delete (self , pubkey ):
389
+ try :
390
+ key = self .gh .key (int (pubkey ))
391
+ except ValueError :
392
+ raise ResourceError ('Key id shall be an integer' )
393
+ if key :
394
+ if key .delete ():
395
+ return
396
+ raise ResourceNotFoundError ('Could not find key {}' .format (pubkey ))
397
+
333
398
@classmethod
334
399
def get_auth_token (cls , login , password , prompt = None ):
335
400
import platform
0 commit comments