summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/_backends/protocol.py14
-rw-r--r--gitlab/_backends/requests_backend.py30
-rw-r--r--gitlab/mixins.py2
-rw-r--r--gitlab/utils.py37
-rw-r--r--gitlab/v4/objects/artifacts.py4
-rw-r--r--gitlab/v4/objects/files.py2
-rw-r--r--gitlab/v4/objects/jobs.py7
-rw-r--r--gitlab/v4/objects/packages.py3
-rw-r--r--gitlab/v4/objects/projects.py2
-rw-r--r--gitlab/v4/objects/repositories.py4
-rw-r--r--gitlab/v4/objects/secure_files.py3
-rw-r--r--gitlab/v4/objects/snippets.py5
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
)