Skip to content

Commit b9cf395

Browse files
authored
Merge pull request #2 from hwisnu222/feature/multipart
feat: handle multipart form data
2 parents d13ad09 + 3e94bdb commit b9cf395

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

client.py

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from contextlib import ExitStack
2+
import os
13
import requests
24

35
from utils import Util
@@ -13,6 +15,7 @@ def safe_join(self, base: str, path: str) -> str:
1315
return base.rstrip("/") + "/" + path.lstrip("/")
1416

1517
def send(self, index_env=0):
18+
response = None
1619
endpoint = self.path.get("endpoint", "/")
1720
method = self.path.get("method", "GET").upper()
1821
headers = self.path.get("headers", {})
@@ -21,15 +24,38 @@ def send(self, index_env=0):
2124
self.path.get("auth", {})
2225
)
2326

24-
response = requests.request(
25-
method=method,
26-
url=self.safe_join(
27+
kwargs = {
28+
"method": method,
29+
"url": self.safe_join(
2730
self.config.get("servers", [{}])[index_env].get("url", ""), endpoint
2831
),
29-
headers={**headers, **header_auth},
30-
auth=request_auth,
31-
json=body if method in ["POST", "PUT", "PATCH"] else None,
32-
params=body if method == "GET" else None,
33-
)
32+
"auth": request_auth,
33+
"params": body if method == "GET" else None,
34+
}
35+
36+
if headers.get("Content-Type") == "multipart/form-data":
37+
# remove header manually
38+
# requests will put header with boundary
39+
headers.pop("Content-Type", None)
40+
data = {}
41+
files = {}
42+
43+
# close all openend file when done
44+
with ExitStack() as stack:
45+
for key, value in body.items():
46+
if isinstance(value, str) and os.path.isfile(value):
47+
f = stack.enter_context(open(value, "rb"))
48+
files[key] = f
49+
else:
50+
data[key] = value
51+
52+
kwargs["data"] = data
53+
kwargs["files"] = files
54+
kwargs["headers"] = {**headers, **header_auth}
55+
response = requests.request(**kwargs)
56+
else:
57+
kwargs["json"] = body if method in ["POST", "PUT", "PATCH"] else None
58+
kwargs["headers"] = {**headers, **header_auth}
59+
response = requests.request(**kwargs)
3460

3561
return response

0 commit comments

Comments
 (0)