From ab089fbf04d8946a4748723dfd3029a943a43b2f Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Sun, 12 Feb 2023 12:30:29 +0100 Subject: refactor: move response_content into backend code --- gitlab/_backends/requests_backend.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'gitlab/_backends/requests_backend.py') diff --git a/gitlab/_backends/requests_backend.py b/gitlab/_backends/requests_backend.py index fd40baa..45592ee 100644 --- a/gitlab/_backends/requests_backend.py +++ b/gitlab/_backends/requests_backend.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Dict, Optional, Tuple, TYPE_CHECKING, Union +from typing import Any, Callable, Dict, Iterator, Optional, Tuple, TYPE_CHECKING, Union import requests from requests.structures import CaseInsensitiveDict @@ -9,6 +9,11 @@ from requests_toolbelt.multipart.encoder import MultipartEncoder # type: ignore from . import protocol +class _StdoutStream: + def __call__(self, chunk: Any) -> None: + print(chunk) + + class RequestsResponse(protocol.BackendResponse): def __init__(self, response: requests.Response) -> None: self._response: requests.Response = response @@ -77,6 +82,29 @@ class RequestsBackend(protocol.Backend): return (post_data, None, "application/json") + @staticmethod + def response_content( + response: requests.Response, + streamed: bool, + action: Optional[Callable[[bytes], None]], + chunk_size: int, + *, + iterator: bool, + ) -> Optional[Union[bytes, Iterator[Any]]]: + if iterator: + return response.iter_content(chunk_size=chunk_size) + + if streamed is False: + return response.content + + if action is None: + action = _StdoutStream() + + for chunk in response.iter_content(chunk_size=chunk_size): + if chunk: + action(chunk) + return None + def http_request( self, method: str, -- cgit v1.2.1