@@ -58,6 +58,7 @@ class Gitlab(object):
5858 Args:
5959 url (str): The URL of the GitLab server.
6060 private_token (str): The user private token
61+ oauth_token (str): An oauth token
6162 email (str): The user email or login.
6263 password (str): The user password (associated with email).
6364 ssl_verify (bool): Whether SSL certificates should be validated.
@@ -146,16 +147,16 @@ class Gitlab(object):
146147 todos (TodoManager): Manager for user todos
147148 """
148149
149- def __init__ (self , url , private_token = None , email = None , password = None ,
150- ssl_verify = True , http_username = None , http_password = None ,
151- timeout = None ):
150+ def __init__ (self , url , private_token = None , oauth_token = None , email = None ,
151+ password = None , ssl_verify = True , http_username = None ,
152+ http_password = None , timeout = None ):
152153
153154 self ._url = '%s/api/v3' % url
154155 #: Timeout to use for requests to gitlab server
155156 self .timeout = timeout
156157 #: Headers that will be used in request to GitLab
157158 self .headers = {}
158- self .set_token (private_token )
159+ self .set_token (private_token , oauth_token )
159160 #: The user email
160161 self .email = email
161162 #: The user password (associated with email)
@@ -239,7 +240,7 @@ def from_config(gitlab_id=None, config_files=None):
239240 """
240241 config = gitlab .config .GitlabConfigParser (gitlab_id = gitlab_id ,
241242 config_files = config_files )
242- return Gitlab (config .url , private_token = config .token ,
243+ return Gitlab (config .url , private_token = config .token , oauth_token = None ,
243244 ssl_verify = config .ssl_verify , timeout = config .timeout ,
244245 http_username = config .http_username ,
245246 http_password = config .http_password )
@@ -252,7 +253,7 @@ def auth(self):
252253 The `user` attribute will hold a `gitlab.objects.CurrentUser` object on
253254 success.
254255 """
255- if self .private_token :
256+ if self .oauth_token or self . private_token :
256257 self .token_auth ()
257258 else :
258259 self .credentials_auth ()
@@ -335,17 +336,35 @@ def _create_headers(self, content_type=None, headers={}):
335336 request_headers ['Content-type' ] = content_type
336337 return request_headers
337338
338- def set_token (self , token ):
339+ def set_token (self , token = None , oauth_token = None ):
339340 """Sets the private token for authentication.
340341
342+ Only one of ``token`` and ``oauth_token`` should be provided.
343+
344+ Raises:
345+ GitlabAuthenticationError: When both ``token`` and ``oauth_token``
346+ are provided.
347+
341348 Args:
342- token (str): The private token.
349+ token (str): A private token.
350+ oauth_token (str): An oauth token.
343351 """
344352 self .private_token = token if token else None
345- if token :
353+ self .oauth_token = oauth_token if oauth_token else None
354+
355+ if token is not None and oauth_token is not None :
356+ raise GitlabAuthenticationError ("Private and OAuth token both "
357+ "provided: define only one" )
358+
359+ if oauth_token :
360+ self .headers .pop ("PRIVATE-TOKEN" , None )
361+ self .headers ["Authorization" ] = "Bearer: %s" % oauth_token
362+ elif token :
363+ self .headers .pop ("Authorization" , None )
346364 self .headers ["PRIVATE-TOKEN" ] = token
347- elif "PRIVATE-TOKEN" in self .headers :
348- del self .headers ["PRIVATE-TOKEN" ]
365+ else :
366+ self .headers .pop ("PRIVATE-TOKEN" , None )
367+ self .headers .pop ("Authorization" , None )
349368
350369 def set_credentials (self , email , password ):
351370 """Sets the email/login and password for authentication.
0 commit comments