@@ -60,6 +60,7 @@ class Gitlab(object):
6060 url (str): The URL of the GitLab server.
6161 private_token (str): The user private token
6262 oauth_token (str): An oauth token
63+ job_token (str): A CI job token
6364 email (str): The user email or login.
6465 password (str): The user password (associated with email).
6566 ssl_verify (bool|str): Whether SSL certificates should be validated. If
@@ -76,6 +77,7 @@ def __init__(
7677 url ,
7778 private_token = None ,
7879 oauth_token = None ,
80+ job_token = None ,
7981 email = None ,
8082 password = None ,
8183 ssl_verify = True ,
@@ -107,6 +109,7 @@ def __init__(
107109 self .http_username = http_username
108110 self .http_password = http_password
109111 self .oauth_token = oauth_token
112+ self .job_token = job_token
110113 self ._set_auth_info ()
111114
112115 #: Create a session object for requests
@@ -195,6 +198,7 @@ def from_config(cls, gitlab_id=None, config_files=None):
195198 config .url ,
196199 private_token = config .private_token ,
197200 oauth_token = config .oauth_token ,
201+ job_token = config .job_token ,
198202 ssl_verify = config .ssl_verify ,
199203 timeout = config .timeout ,
200204 http_username = config .http_username ,
@@ -211,7 +215,7 @@ def auth(self):
211215 The `user` attribute will hold a `gitlab.objects.CurrentUser` object on
212216 success.
213217 """
214- if self .private_token or self .oauth_token :
218+ if self .private_token or self .oauth_token or self . job_token :
215219 self ._token_auth ()
216220 else :
217221 self ._credentials_auth ()
@@ -346,9 +350,16 @@ def _construct_url(self, id_, obj, parameters, action=None):
346350 return url
347351
348352 def _set_auth_info (self ):
349- if self .private_token and self .oauth_token :
353+ if (
354+ sum (
355+ bool (arg )
356+ for arg in [self .private_token , self .oauth_token , self .job_token ]
357+ )
358+ != 1
359+ ):
350360 raise ValueError (
351- "Only one of private_token or oauth_token should " "be defined"
361+ "Only one of private_token, oauth_token or job_token should "
362+ "be defined"
352363 )
353364 if (self .http_username and not self .http_password ) or (
354365 not self .http_username and self .http_password
@@ -364,12 +375,19 @@ def _set_auth_info(self):
364375
365376 self ._http_auth = None
366377 if self .private_token :
367- self .headers ["PRIVATE-TOKEN" ] = self .private_token
368378 self .headers .pop ("Authorization" , None )
379+ self .headers ["PRIVATE-TOKEN" ] = self .private_token
380+ self .headers .pop ("JOB-TOKEN" , None )
369381
370382 if self .oauth_token :
371383 self .headers ["Authorization" ] = "Bearer %s" % self .oauth_token
372384 self .headers .pop ("PRIVATE-TOKEN" , None )
385+ self .headers .pop ("JOB-TOKEN" , None )
386+
387+ if self .job_token :
388+ self .headers .pop ("Authorization" , None )
389+ self .headers .pop ("PRIVATE-TOKEN" , None )
390+ self .headers ["JOB-TOKEN" ] = self .job_token
373391
374392 if self .http_username :
375393 self ._http_auth = requests .auth .HTTPBasicAuth (
0 commit comments