1
+ from contextlib import ExitStack
2
+ import os
1
3
import requests
2
4
3
5
from utils import Util
@@ -13,6 +15,7 @@ def safe_join(self, base: str, path: str) -> str:
13
15
return base .rstrip ("/" ) + "/" + path .lstrip ("/" )
14
16
15
17
def send (self , index_env = 0 ):
18
+ response = None
16
19
endpoint = self .path .get ("endpoint" , "/" )
17
20
method = self .path .get ("method" , "GET" ).upper ()
18
21
headers = self .path .get ("headers" , {})
@@ -21,15 +24,38 @@ def send(self, index_env=0):
21
24
self .path .get ("auth" , {})
22
25
)
23
26
24
- response = requests . request (
25
- method = method ,
26
- url = self .safe_join (
27
+ kwargs = {
28
+ " method" : method ,
29
+ " url" : self .safe_join (
27
30
self .config .get ("servers" , [{}])[index_env ].get ("url" , "" ), endpoint
28
31
),
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 )
34
60
35
61
return response
0 commit comments