summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiora Milbaum <liora@lmb.co.il>2022-12-19 10:24:18 +0200
committerGitHub <noreply@github.com>2022-12-19 09:24:18 +0100
commit7d9ce0dfb9f5a71aaa7f9c78d815d7c7cbd21c1c (patch)
treea200a54e98080d5a5e80101effd0d1b48ad333f8
parent43c2dda7aa8b167a451b966213e83d88d1baa1df (diff)
downloadgitlab-7d9ce0dfb9f5a71aaa7f9c78d815d7c7cbd21c1c.tar.gz
refactor: move Response object to backends (#2420)
-rw-r--r--gitlab/client.py4
-rw-r--r--gitlab/http_backends/__init__.py3
-rw-r--r--gitlab/http_backends/requests_backend.py36
3 files changed, 36 insertions, 7 deletions
diff --git a/gitlab/client.py b/gitlab/client.py
index 98f6905..4ad6c8f 100644
--- a/gitlab/client.py
+++ b/gitlab/client.py
@@ -774,10 +774,10 @@ class Gitlab:
raise
- self._check_redirects(result)
+ self._check_redirects(result.response)
if 200 <= result.status_code < 300:
- return result
+ return result.response
if (429 == result.status_code and obey_rate_limit) or (
result.status_code in gitlab.const.RETRYABLE_TRANSIENT_ERROR_CODES
diff --git a/gitlab/http_backends/__init__.py b/gitlab/http_backends/__init__.py
index 07b7e80..aa53d0a 100644
--- a/gitlab/http_backends/__init__.py
+++ b/gitlab/http_backends/__init__.py
@@ -2,6 +2,7 @@
Defines http backends for processing http requests
"""
-from .requests_backend import RequestsBackend
+from .requests_backend import RequestsBackend, RequestsResponse
DefaultBackend = RequestsBackend
+DefaultResponse = RequestsResponse
diff --git a/gitlab/http_backends/requests_backend.py b/gitlab/http_backends/requests_backend.py
index 032597a..0b310ab 100644
--- a/gitlab/http_backends/requests_backend.py
+++ b/gitlab/http_backends/requests_backend.py
@@ -1,9 +1,36 @@
+from __future__ import annotations
+
from typing import Any, Dict, Optional, Union
import requests
+from requests.structures import CaseInsensitiveDict
from requests_toolbelt.multipart.encoder import MultipartEncoder # type: ignore
+class RequestsResponse:
+ def __init__(self, response: requests.Response) -> None:
+ self._response: requests.Response = response
+
+ @property
+ def response(self) -> requests.Response:
+ return self._response
+
+ @property
+ def status_code(self) -> int:
+ return self._response.status_code
+
+ @property
+ def headers(self) -> CaseInsensitiveDict[str]:
+ return self._response.headers
+
+ @property
+ def content(self) -> bytes:
+ return self._response.content
+
+ def json(self) -> Any:
+ return self._response.json()
+
+
class RequestsBackend:
def __init__(self, session: Optional[requests.Session] = None) -> None:
self._client: requests.Session = session or requests.Session()
@@ -22,8 +49,8 @@ class RequestsBackend:
timeout: Optional[float] = None,
verify: Optional[Union[bool, str]] = True,
stream: Optional[bool] = False,
- **kwargs: Any
- ) -> requests.Response:
+ **kwargs: Any,
+ ) -> RequestsResponse:
"""Make HTTP request
Args:
@@ -40,7 +67,7 @@ class RequestsBackend:
Returns:
A requests Response object.
"""
- return self._client.request(
+ response: requests.Response = self._client.request(
method=method,
url=url,
params=params,
@@ -49,5 +76,6 @@ class RequestsBackend:
stream=stream,
verify=verify,
json=json,
- **kwargs
+ **kwargs,
)
+ return RequestsResponse(response=response)