@@ -639,7 +639,7 @@ def _check_redirects(result: requests.Response) -> None:
639639 )
640640 )
641641
642- def http_request (
642+ def backend_request (
643643self ,
644644verb :str ,
645645path :str ,
@@ -653,7 +653,7 @@ def http_request(
653653retry_transient_errors :Optional [bool ]= None ,
654654max_retries :int = 10 ,
655655** kwargs :Any ,
656- )-> requests . Response :
656+ )-> _backends . DefaultResponse :
657657"""Make an HTTP request to the Gitlab server.
658658
659659 Args:
@@ -724,7 +724,7 @@ def http_request(
724724cur_retries = 0
725725while True :
726726try :
727- result = self ._backend .http_request (
727+ backend_response = self ._backend .http_request (
728728method = verb ,
729729url = url ,
730730json = json ,
@@ -746,20 +746,26 @@ def http_request(
746746
747747raise
748748
749- self ._check_redirects (result .response )
749+ self ._check_redirects (backend_response .response )
750750
751- if 200 <= result .status_code < 300 :
752- return result . response
751+ if 200 <= backend_response .status_code < 300 :
752+ return backend_response
753753
754754def should_retry ()-> bool :
755- if result .status_code == 429 and obey_rate_limit :
755+ if backend_response .status_code == 429 and obey_rate_limit :
756756return True
757757
758758if not retry_transient_errors :
759759return False
760- if result .status_code in gitlab .const .RETRYABLE_TRANSIENT_ERROR_CODES :
760+ if (
761+ backend_response .status_code
762+ in gitlab .const .RETRYABLE_TRANSIENT_ERROR_CODES
763+ ):
761764return True
762- if result .status_code == 409 and "Resource lock" in result .reason :
765+ if (
766+ backend_response .status_code == 409
767+ and "Resource lock" in backend_response .reason
768+ ):
763769return True
764770
765771return False
@@ -769,36 +775,74 @@ def should_retry() -> bool:
769775# https://docs.gitlab.com/ee/user/admin_area/settings/user_and_ip_rate_limits.html#response-headers
770776if max_retries == - 1 or cur_retries < max_retries :
771777wait_time = 2 ** cur_retries * 0.1
772- if "Retry-After" in result .headers :
773- wait_time = int (result .headers ["Retry-After" ])
774- elif "RateLimit-Reset" in result .headers :
775- wait_time = int (result .headers ["RateLimit-Reset" ])- time .time ()
778+ if "Retry-After" in backend_response .headers :
779+ wait_time = int (backend_response .headers ["Retry-After" ])
780+ elif "RateLimit-Reset" in backend_response .headers :
781+ wait_time = (
782+ int (backend_response .headers ["RateLimit-Reset" ])
783+ - time .time ()
784+ )
776785cur_retries += 1
777786time .sleep (wait_time )
778787continue
779788
780- error_message = result .content
789+ error_message = backend_response .content
781790try :
782- error_json = result .json ()
791+ error_json = backend_response .json ()
783792for k in ("message" ,"error" ):
784793if k in error_json :
785794error_message = error_json [k ]
786795except (KeyError ,ValueError ,TypeError ):
787796pass
788797
789- if result .status_code == 401 :
798+ if backend_response .status_code == 401 :
790799raise gitlab .exceptions .GitlabAuthenticationError (
791- response_code = result .status_code ,
800+ response_code = backend_response .status_code ,
792801error_message = error_message ,
793- response_body = result .content ,
802+ response_body = backend_response .content ,
794803 )
795804
796805raise gitlab .exceptions .GitlabHttpError (
797- response_code = result .status_code ,
806+ response_code = backend_response .status_code ,
798807error_message = error_message ,
799- response_body = result .content ,
808+ response_body = backend_response .content ,
800809 )
801810
811+ def http_request (
812+ self ,
813+ verb :str ,
814+ path :str ,
815+ query_data :Optional [Dict [str ,Any ]]= None ,
816+ post_data :Optional [Union [Dict [str ,Any ],bytes ]]= None ,
817+ raw :bool = False ,
818+ streamed :bool = False ,
819+ files :Optional [Dict [str ,Any ]]= None ,
820+ timeout :Optional [float ]= None ,
821+ obey_rate_limit :bool = True ,
822+ retry_transient_errors :Optional [bool ]= None ,
823+ max_retries :int = 10 ,
824+ ** kwargs :Any ,
825+ )-> requests .Response :
826+ utils .warn (
827+ "`http_request()` is deprecated and will be removed in a future version.\n "
828+ "Please use `backend_request()` instead." ,
829+ category = DeprecationWarning ,
830+ )
831+ return self .backend_request (
832+ verb ,
833+ path ,
834+ query_data ,
835+ post_data ,
836+ raw ,
837+ streamed ,
838+ files ,
839+ timeout ,
840+ obey_rate_limit ,
841+ retry_transient_errors ,
842+ max_retries ,
843+ ** kwargs ,
844+ ).response
845+
802846def http_get (
803847self ,
804848path :str ,
@@ -827,9 +871,10 @@ def http_get(
827871 GitlabParsingError: If the json data could not be parsed
828872 """
829873query_data = query_data or {}
830- result = self .http_request (
874+ backend_response = self .backend_request (
831875"get" ,path ,query_data = query_data ,streamed = streamed ,** kwargs
832876 )
877+ result = backend_response .response
833878
834879if (
835880result .headers ["Content-Type" ]== "application/json"
@@ -866,8 +911,10 @@ def http_head(
866911 """
867912
868913query_data = query_data or {}
869- result = self .http_request ("head" ,path ,query_data = query_data ,** kwargs )
870- return result .headers
914+ backend_response = self .http_request (
915+ "head" ,path ,query_data = query_data ,** kwargs
916+ )
917+ return backend_response .headers
871918
872919def http_list (
873920self ,
@@ -1023,7 +1070,7 @@ def http_post(
10231070query_data = query_data or {}
10241071post_data = post_data or {}
10251072
1026- result = self .http_request (
1073+ backend_response = self .backend_request (
10271074"post" ,
10281075path ,
10291076query_data = query_data ,
@@ -1032,6 +1079,8 @@ def http_post(
10321079raw = raw ,
10331080** kwargs ,
10341081 )
1082+ result = backend_response .response
1083+
10351084try :
10361085if result .headers .get ("Content-Type" ,None )== "application/json" :
10371086json_result = result .json ()
@@ -1075,7 +1124,7 @@ def http_put(
10751124query_data = query_data or {}
10761125post_data = post_data or {}
10771126
1078- result = self .http_request (
1127+ backend_response = self .http_request (
10791128"put" ,
10801129path ,
10811130query_data = query_data ,
@@ -1085,7 +1134,7 @@ def http_put(
10851134** kwargs ,
10861135 )
10871136try :
1088- json_result = result .json ()
1137+ json_result = backend_response .json ()
10891138if TYPE_CHECKING :
10901139assert isinstance (json_result ,dict )
10911140return json_result
@@ -1124,7 +1173,7 @@ def http_patch(
11241173query_data = query_data or {}
11251174post_data = post_data or {}
11261175
1127- result = self .http_request (
1176+ backend_response = self .http_request (
11281177"patch" ,
11291178path ,
11301179query_data = query_data ,
@@ -1133,7 +1182,7 @@ def http_patch(
11331182** kwargs ,
11341183 )
11351184try :
1136- json_result = result .json ()
1185+ json_result = backend_response .json ()
11371186if TYPE_CHECKING :
11381187assert isinstance (json_result ,dict )
11391188return json_result
@@ -1156,7 +1205,8 @@ def http_delete(self, path: str, **kwargs: Any) -> requests.Response:
11561205 Raises:
11571206 GitlabHttpError: When the return code is not 2xx
11581207 """
1159- return self .http_request ("delete" ,path ,** kwargs )
1208+ backend_response = self .backend_request ("delete" ,path ,** kwargs )
1209+ return backend_response .response
11601210
11611211@gitlab .exceptions .on_http_error (gitlab .exceptions .GitlabSearchError )
11621212def search (
@@ -1210,7 +1260,11 @@ def _query(
12101260self ,url :str ,query_data :Optional [Dict [str ,Any ]]= None ,** kwargs :Any
12111261 )-> None :
12121262query_data = query_data or {}
1213- result = self ._gl .http_request ("get" ,url ,query_data = query_data ,** kwargs )
1263+ backend_response = self ._gl .backend_request (
1264+ "get" ,url ,query_data = query_data ,** kwargs
1265+ )
1266+ result = backend_response .response
1267+
12141268try :
12151269next_url = result .links ["next" ]["url" ]
12161270except KeyError :