summaryrefslogtreecommitdiff
path: root/gitlab/_backends/requests_backend.py
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab/_backends/requests_backend.py')
-rw-r--r--gitlab/_backends/requests_backend.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/gitlab/_backends/requests_backend.py b/gitlab/_backends/requests_backend.py
index fd40baa..d70cf42 100644
--- a/gitlab/_backends/requests_backend.py
+++ b/gitlab/_backends/requests_backend.py
@@ -1,6 +1,7 @@
from __future__ import annotations
-from typing import Any, Dict, Optional, Tuple, TYPE_CHECKING, Union
+import dataclasses
+from typing import Any, Dict, Optional, TYPE_CHECKING, Union
import requests
from requests.structures import CaseInsensitiveDict
@@ -9,6 +10,20 @@ from requests_toolbelt.multipart.encoder import MultipartEncoder # type: ignore
from . import protocol
+@dataclasses.dataclass
+class SendData:
+ content_type: str
+ data: Optional[Union[Dict[str, Any], MultipartEncoder]] = None
+ json: Optional[Union[Dict[str, Any], bytes]] = None
+
+ def __post_init__(self) -> None:
+ if self.json is not None and self.data is not None:
+ raise ValueError(
+ f"`json` and `data` are mutually exclusive. Only one can be set. "
+ f"json={self.json!r} data={self.data!r}"
+ )
+
+
class RequestsResponse(protocol.BackendResponse):
def __init__(self, response: requests.Response) -> None:
self._response: requests.Response = response
@@ -50,11 +65,7 @@ class RequestsBackend(protocol.Backend):
files: Optional[Dict[str, Any]] = None,
post_data: Optional[Union[Dict[str, Any], bytes]] = None,
raw: bool = False,
- ) -> Tuple[
- Optional[Union[Dict[str, Any], bytes]],
- Optional[Union[Dict[str, Any], MultipartEncoder]],
- str,
- ]:
+ ) -> SendData:
if files:
if post_data is None:
post_data = {}
@@ -70,12 +81,12 @@ class RequestsBackend(protocol.Backend):
post_data["avatar"] = files.get("avatar")
data = MultipartEncoder(post_data)
- return (None, data, data.content_type)
+ return SendData(data=data, content_type=data.content_type)
if raw and post_data:
- return (None, post_data, "application/octet-stream")
+ return SendData(data=post_data, content_type="application/octet-stream")
- return (post_data, None, "application/json")
+ return SendData(json=post_data, content_type="application/json")
def http_request(
self,