@@ -133,8 +133,14 @@ def fn(**kwargs):
133133 del kwargs ['find_all' ]
134134 except KeyError :
135135 find_all = False
136+ try :
137+ query_data = {}
138+ query_data ['sudo' ] = kwargs ['sudo' ]
139+ del kwargs ['sudo' ]
140+ except KeyError :
141+ pass
136142 if not objects :
137- objects = _query_list (api , parent , {} )
143+ objects = _query_list (api , parent , query_data )
138144
139145 return _find_matches (objects , kwargs , find_all )
140146 setattr (parent , 'find_' + name , fn )
@@ -256,6 +262,8 @@ def _add_api(definition, parent):
256262 else :
257263 uq_url = parent ._uq_url
258264 uq_url += re .sub (r'/\:.*' , '' , url ) # "unqualify" the url
265+ # 'sudo' is an optional parameter for all functions
266+ definition .optional_params .append ('sudo' )
259267
260268 cls_attrs = {
261269 '_key_name' : definition .key_name ,
@@ -466,3 +474,14 @@ def login(self, login_or_email, password):
466474 headers = {'PRIVATE-TOKEN' : ret ['private_token' ]}
467475 setattr (_GitLabAPI , '_headers' , headers )
468476 return True
477+
478+ class sudo :
479+ """Alternative sudo usage. To be used with the 'with' statement"""
480+ def __init__ (self , username_or_id ):
481+ self .user = username_or_id
482+ def __enter__ (self ):
483+ headers = getattr (_GitLabAPI , '_headers' )
484+ headers ['SUDO' ] = self .user
485+ def __exit__ (self , type , value , traceback ):
486+ headers = getattr (_GitLabAPI , '_headers' )
487+ del headers ['SUDO' ]
0 commit comments