14
14
15
15
import requests
16
16
from requests .exceptions import RequestException
17
+ from requests_toolbelt import MultipartEncoder
17
18
18
19
from smartfile .errors import APIError
19
20
from smartfile .errors import RequestError
@@ -79,6 +80,7 @@ def _request(self, method, endpoint, id=None, **kwargs):
79
80
raise RequestError ('Invalid method %s' % method )
80
81
# Find files, separate them out to correct kwarg for requests.
81
82
data = kwargs .get ('data' )
83
+ mpe_data = None
82
84
if data :
83
85
files = {}
84
86
for name , value in list (data .items ()):
@@ -87,7 +89,9 @@ def _request(self, method, endpoint, id=None, **kwargs):
87
89
if hasattr (value , 'read' ) or isinstance (value , tuple ):
88
90
files [name ] = data .pop (name )
89
91
if files :
90
- kwargs .setdefault ('files' , {}).update (files )
92
+ mpe_data = MultipartEncoder (fields = files )
93
+ kwargs ['data' ] = mpe_data
94
+ # kwargs.setdefault('files', {}).update(files)
91
95
path = ['api' , self .version , endpoint ]
92
96
# If we received an ID, append it to the path.
93
97
if id :
@@ -102,6 +106,8 @@ def _request(self, method, endpoint, id=None, **kwargs):
102
106
# Add our user agent.
103
107
kwargs .setdefault ('headers' , {}).setdefault ('User-Agent' ,
104
108
HTTP_USER_AGENT )
109
+ if mpe_data :
110
+ kwargs ['headers' ]['content-type' ] = mpe_data .content_type
105
111
# Now try the request, if we get throttled, sleep and try again.
106
112
trys , retrys = 0 , 3
107
113
while True :
0 commit comments