@@ -43,30 +43,43 @@ def __init__(self, url, private_token=None, email=None, password=None):
4343 self .email = email
4444 self .password = password
4545
46- if not self .private_token :
47- self .authenticate
46+ def auth (self ):
47+ r = False
48+ if self .private_token :
49+ r = self .token_auth ()
4850
49- def authenticate (self , email = None , password = None ):
50- self .email = self .email or email
51- self .password = self .password or password
51+ if not r :
52+ self .credentials_auth ()
5253
54+ def credentials_auth (self ):
5355 if not self .email or not self .password :
5456 raise GitlabAuthenticationError ("Missing email/password" )
5557
56- r = self .rawPost ('/session' , {'email' : email , 'password' : password })
58+ r = self .rawPost ('/session' , {'email' : self . email , 'password' : self . password })
5759 if r .status_code == 201 :
5860 self .user = CurrentUser (self , r .json )
5961 else :
6062 raise GitlabAuthenticationError (r .json ['message' ])
6163
6264 self .private_token = self .user .private_token
6365
66+ def token_auth (self ):
67+ try :
68+ self .user = self .get (CurrentUser )
69+ return True
70+ except :
71+ return False
72+
6473 def setUrl (self , url ):
6574 self .url = '%s/api/v3' % url
6675
6776 def setToken (self , token ):
6877 self .private_token = token
6978
79+ def setCredentials (self , email , password ):
80+ self .email = email
81+ self .password = password
82+
7083 def rawPost (self , path , data ):
7184 url = '%s%s' % (self .url , path )
7285 try :
@@ -104,11 +117,14 @@ def list(self, objClass, **kwargs):
104117 else :
105118 raise GitlabGetError ('%d: %s' % (r .status_code , r .text ))
106119
107- def get (self , objClass , id , ** kwargs ):
120+ def get (self , objClass , id = None , ** kwargs ):
108121 url = objClass .url
109122 if kwargs :
110123 url = objClass .url % kwargs
111- url = '%s%s/%d?private_token=%s' % (self .url , url , id , self .private_token )
124+ if id != None :
125+ url = '%s%s/%d?private_token=%s' % (self .url , url , id , self .private_token )
126+ else :
127+ url = '%s%s?private_token=%s' % (self .url , url , self .private_token )
112128
113129 try :
114130 r = requests .get (url )
@@ -273,10 +289,10 @@ def delete(self):
273289
274290 return self .gitlab .delete (self )
275291
276- def __init__ (self , gl , data , ** kwargs ):
292+ def __init__ (self , gl , data = None , ** kwargs ):
277293 self .gitlab = gl
278294
279- if isinstance (data , int ):
295+ if data is None or isinstance (data , int ):
280296 data = self .gitlab .get (self .__class__ , data , ** kwargs )
281297
282298 self .setFromDict (data )
@@ -442,14 +458,16 @@ def Tag(self, id=None):
442458 return self .getListOrObject (ProjectTag , id , project_id = self .id )
443459
444460if __name__ == '__main__' :
445- # quick "doc"
461+ # Quick "doc"
446462 #
447463 # See https://github.com/gitlabhq/gitlabhq/tree/master/doc/api for the
448464 # source
449465
450- # register a connection to a gitlab instance, using its URL and a user
466+ # Register a connection to a gitlab instance, using its URL and a user
451467 # private token
452468 gl = Gitlab ('http://192.168.123.107:8080' , 'JVNSESs8EwWRx5yDxM5q' )
469+ # Connect to get the current user (as gl.user)
470+ gl .auth ()
453471
454472 # get a list of projects
455473 for p in gl .Project ():
0 commit comments