diff options
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/_backends/protocol.py | 14 | ||||
-rw-r--r-- | gitlab/_backends/requests_backend.py | 30 | ||||
-rw-r--r-- | gitlab/mixins.py | 2 | ||||
-rw-r--r-- | gitlab/utils.py | 37 | ||||
-rw-r--r-- | gitlab/v4/objects/artifacts.py | 4 | ||||
-rw-r--r-- | gitlab/v4/objects/files.py | 2 | ||||
-rw-r--r-- | gitlab/v4/objects/jobs.py | 7 | ||||
-rw-r--r-- | gitlab/v4/objects/packages.py | 3 | ||||
-rw-r--r-- | gitlab/v4/objects/projects.py | 2 | ||||
-rw-r--r-- | gitlab/v4/objects/repositories.py | 4 | ||||
-rw-r--r-- | gitlab/v4/objects/secure_files.py | 3 | ||||
-rw-r--r-- | gitlab/v4/objects/snippets.py | 5 |
12 files changed, 65 insertions, 48 deletions
diff --git a/gitlab/_backends/protocol.py b/gitlab/_backends/protocol.py index f89740b..3f8af3d 100644 --- a/gitlab/_backends/protocol.py +++ b/gitlab/_backends/protocol.py @@ -1,6 +1,6 @@ import abc import sys -from typing import Any, Dict, Optional, Union +from typing import Any, Callable, Dict, Iterator, Optional, Union import requests from requests_toolbelt.multipart.encoder import MultipartEncoder # type: ignore @@ -18,6 +18,18 @@ class BackendResponse(Protocol): class Backend(Protocol): + @staticmethod + @abc.abstractmethod + def response_content( + response: requests.Response, + streamed: bool, + action: Optional[Callable[[bytes], None]], + chunk_size: int, + *, + iterator: bool, + ) -> Optional[Union[bytes, Iterator[Any]]]: + ... + @abc.abstractmethod def http_request( self, 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, diff --git a/gitlab/mixins.py b/gitlab/mixins.py index 3d1302f..8534416 100644 --- a/gitlab/mixins.py +++ b/gitlab/mixins.py @@ -637,7 +637,7 @@ class DownloadMixin(_RestObjectBase): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/utils.py b/gitlab/utils.py index 9317535..3d40606 100644 --- a/gitlab/utils.py +++ b/gitlab/utils.py @@ -2,39 +2,20 @@ import pathlib import traceback import urllib.parse import warnings -from typing import Any, Callable, Dict, Iterator, Optional, Tuple, Type, Union +from typing import Any, Dict, Iterator, Optional, Tuple, Type, Union -import requests - -from gitlab import types - - -class _StdoutStream: - def __call__(self, chunk: Any) -> None: - print(chunk) +from gitlab import _backends, types def response_content( - response: requests.Response, - streamed: bool, - action: Optional[Callable[[bytes], None]], - chunk_size: int, - *, - iterator: bool, + *args: Any, **kwargs: Any ) -> 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 + warn( + "`utils.response_content()` is deprecated and will be removed in a future" + "version.\nUse the current backend's `response_content()` method instead.", + category=DeprecationWarning, + ) + return _backends.DefaultBackend.response_content(*args, **kwargs) def _transform_types( diff --git a/gitlab/v4/objects/artifacts.py b/gitlab/v4/objects/artifacts.py index f091867..fe07360 100644 --- a/gitlab/v4/objects/artifacts.py +++ b/gitlab/v4/objects/artifacts.py @@ -111,7 +111,7 @@ class ProjectArtifactManager(RESTManager): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) @@ -162,6 +162,6 @@ class ProjectArtifactManager(RESTManager): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/v4/objects/files.py b/gitlab/v4/objects/files.py index d81b711..2d95a6d 100644 --- a/gitlab/v4/objects/files.py +++ b/gitlab/v4/objects/files.py @@ -266,7 +266,7 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/v4/objects/jobs.py b/gitlab/v4/objects/jobs.py index 952c295..02a4ee4 100644 --- a/gitlab/v4/objects/jobs.py +++ b/gitlab/v4/objects/jobs.py @@ -4,7 +4,6 @@ import requests from gitlab import cli from gitlab import exceptions as exc -from gitlab import utils from gitlab.base import RESTManager, RESTObject from gitlab.mixins import RefreshMixin, RetrieveMixin from gitlab.types import ArrayAttribute @@ -149,7 +148,7 @@ class ProjectJob(RefreshMixin, RESTObject): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) @@ -192,7 +191,7 @@ class ProjectJob(RefreshMixin, RESTObject): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) @@ -233,7 +232,7 @@ class ProjectJob(RefreshMixin, RESTObject): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return_value = utils.response_content( + return_value = self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) if TYPE_CHECKING: diff --git a/gitlab/v4/objects/packages.py b/gitlab/v4/objects/packages.py index 9ae2fd5..93c623f 100644 --- a/gitlab/v4/objects/packages.py +++ b/gitlab/v4/objects/packages.py @@ -11,7 +11,6 @@ import requests from gitlab import cli from gitlab import exceptions as exc -from gitlab import utils from gitlab.base import RESTManager, RESTObject from gitlab.mixins import DeleteMixin, GetMixin, ListMixin, ObjectDeleteMixin @@ -136,7 +135,7 @@ class GenericPackageManager(RESTManager): result = self.gitlab.http_get(path, streamed=streamed, raw=True, **kwargs) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/v4/objects/projects.py b/gitlab/v4/objects/projects.py index 6330cc5..a024a1b 100644 --- a/gitlab/v4/objects/projects.py +++ b/gitlab/v4/objects/projects.py @@ -541,7 +541,7 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTO ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/v4/objects/repositories.py b/gitlab/v4/objects/repositories.py index 9c0cd9a..b113dbe 100644 --- a/gitlab/v4/objects/repositories.py +++ b/gitlab/v4/objects/repositories.py @@ -140,7 +140,7 @@ class RepositoryMixin(_RestObjectBase): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) @@ -242,7 +242,7 @@ class RepositoryMixin(_RestObjectBase): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/v4/objects/secure_files.py b/gitlab/v4/objects/secure_files.py index a7da5ea..98d0c2a 100644 --- a/gitlab/v4/objects/secure_files.py +++ b/gitlab/v4/objects/secure_files.py @@ -8,7 +8,6 @@ import requests from gitlab import cli from gitlab import exceptions as exc -from gitlab import utils from gitlab.base import RESTManager, RESTObject from gitlab.mixins import NoUpdateMixin, ObjectDeleteMixin from gitlab.types import FileAttribute, RequiredOptional @@ -53,7 +52,7 @@ class ProjectSecureFile(ObjectDeleteMixin, RESTObject): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) diff --git a/gitlab/v4/objects/snippets.py b/gitlab/v4/objects/snippets.py index 648def2..8417ab2 100644 --- a/gitlab/v4/objects/snippets.py +++ b/gitlab/v4/objects/snippets.py @@ -4,7 +4,6 @@ import requests from gitlab import cli from gitlab import exceptions as exc -from gitlab import utils from gitlab.base import RESTManager, RESTObject, RESTObjectList from gitlab.mixins import CRUDMixin, ObjectDeleteMixin, SaveMixin, UserAgentDetailMixin from gitlab.types import RequiredOptional @@ -61,7 +60,7 @@ class Snippet(UserAgentDetailMixin, SaveMixin, ObjectDeleteMixin, RESTObject): ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) @@ -141,7 +140,7 @@ class ProjectSnippet(UserAgentDetailMixin, SaveMixin, ObjectDeleteMixin, RESTObj ) if TYPE_CHECKING: assert isinstance(result, requests.Response) - return utils.response_content( + return self.manager.gitlab._backend.response_content( result, streamed, action, chunk_size, iterator=iterator ) |