diff options
author | Liora Milbaum <liora@lmb.co.il> | 2022-12-19 10:24:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-19 09:24:18 +0100 |
commit | 7d9ce0dfb9f5a71aaa7f9c78d815d7c7cbd21c1c (patch) | |
tree | a200a54e98080d5a5e80101effd0d1b48ad333f8 | |
parent | 43c2dda7aa8b167a451b966213e83d88d1baa1df (diff) | |
download | gitlab-7d9ce0dfb9f5a71aaa7f9c78d815d7c7cbd21c1c.tar.gz |
refactor: move Response object to backends (#2420)
-rw-r--r-- | gitlab/client.py | 4 | ||||
-rw-r--r-- | gitlab/http_backends/__init__.py | 3 | ||||
-rw-r--r-- | gitlab/http_backends/requests_backend.py | 36 |
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) |