Skip to content

Commit 459af58

Browse files
author
Liora Milbaum
committed
refactor: RequestsResponse
1 parent b6c0872 commit 459af58

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

gitlab/client.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -774,47 +774,51 @@ def http_request(
774774

775775
raise
776776

777-
self._check_redirects(result)
777+
self._check_redirects(result.response)
778778

779-
if 200 <= result.status_code < 300:
780-
return result
779+
if 200 <= result.response.status_code < 300:
780+
return result.response
781781

782-
if (429 == result.status_code and obey_rate_limit) or (
783-
result.status_code in gitlab.const.RETRYABLE_TRANSIENT_ERROR_CODES
782+
if (429 == result.response.status_code and obey_rate_limit) or (
783+
result.response.status_code
784+
in gitlab.const.RETRYABLE_TRANSIENT_ERROR_CODES
784785
and retry_transient_errors
785786
):
786787
# Response headers documentation:
787788
# https://docs.gitlab.com/ee/user/admin_area/settings/user_and_ip_rate_limits.html#response-headers
788789
if max_retries == -1 or cur_retries < max_retries:
789790
wait_time = 2**cur_retries * 0.1
790-
if "Retry-After" in result.headers:
791-
wait_time = int(result.headers["Retry-After"])
792-
elif "RateLimit-Reset" in result.headers:
793-
wait_time = int(result.headers["RateLimit-Reset"]) - time.time()
791+
if "Retry-After" in result.response.headers:
792+
wait_time = int(result.response.headers["Retry-After"])
793+
elif "RateLimit-Reset" in result.response.headers:
794+
wait_time = (
795+
int(result.response.headers["RateLimit-Reset"])
796+
- time.time()
797+
)
794798
cur_retries += 1
795799
time.sleep(wait_time)
796800
continue
797801

798-
error_message = result.content
802+
error_message = result.response.content
799803
try:
800-
error_json = result.json()
804+
error_json = result.response.json()
801805
for k in ("message", "error"):
802806
if k in error_json:
803807
error_message = error_json[k]
804808
except (KeyError, ValueError, TypeError):
805809
pass
806810

807-
if result.status_code == 401:
811+
if result.response.status_code == 401:
808812
raise gitlab.exceptions.GitlabAuthenticationError(
809-
response_code=result.status_code,
813+
response_code=result.response.status_code,
810814
error_message=error_message,
811-
response_body=result.content,
815+
response_body=result.response.content,
812816
)
813817

814818
raise gitlab.exceptions.GitlabHttpError(
815-
response_code=result.status_code,
819+
response_code=result.response.status_code,
816820
error_message=error_message,
817-
response_body=result.content,
821+
response_body=result.response.content,
818822
)
819823

820824
def http_get(

gitlab/http_backends/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Defines http backends for processing http requests
33
"""
44

5-
from .requests_backend import RequestsBackend
5+
from .requests_backend import RequestsBackend, RequestsResponse
66

77
DefaultBackend = RequestsBackend
8+
DefaultResponse = RequestsResponse

gitlab/http_backends/requests_backend.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@
44
from requests_toolbelt.multipart.encoder import MultipartEncoder # type: ignore
55

66

7+
class RequestsResponse:
8+
def __init__(self, response: requests.Response) -> None:
9+
self._response: requests.Response = response
10+
11+
@property
12+
def response(self) -> requests.Response:
13+
return self._response
14+
15+
716
class RequestsBackend:
817
def __init__(self, session: Optional[requests.Session] = None) -> None:
918
self._client: requests.Session = session or requests.Session()
@@ -23,7 +32,7 @@ def http_request(
2332
verify: Optional[Union[bool, str]] = True,
2433
stream: Optional[bool] = False,
2534
**kwargs: Any
26-
) -> requests.Response:
35+
) -> RequestsResponse:
2736
"""Make HTTP request
2837
2938
Args:
@@ -40,7 +49,7 @@ def http_request(
4049
Returns:
4150
A requests Response object.
4251
"""
43-
return self._client.request(
52+
response: requests.Response = self._client.request(
4453
method=method,
4554
url=url,
4655
params=params,
@@ -51,3 +60,4 @@ def http_request(
5160
json=json,
5261
**kwargs
5362
)
63+
return RequestsResponse(response=response)

0 commit comments

Comments
 (0)