Skip to content

Commit fdc0523

Browse files
committed
use requests_toolbelt.MultipartEncoder to be able to upload large files (>RAM)
1 parent c04d475 commit fdc0523

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ six
22
oauthlib
33
requests
44
requests_oauthlib
5+
requests-toolbelt
56
python-librsync
67
coveralls
78
coverage

smartfile/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import requests
1616
from requests.exceptions import RequestException
17+
from requests_toolbelt import MultipartEncoder
1718

1819
from smartfile.errors import APIError
1920
from smartfile.errors import RequestError
@@ -79,6 +80,7 @@ def _request(self, method, endpoint, id=None, **kwargs):
7980
raise RequestError('Invalid method %s' % method)
8081
# Find files, separate them out to correct kwarg for requests.
8182
data = kwargs.get('data')
83+
mpe_data = None
8284
if data:
8385
files = {}
8486
for name, value in list(data.items()):
@@ -87,7 +89,9 @@ def _request(self, method, endpoint, id=None, **kwargs):
8789
if hasattr(value, 'read') or isinstance(value, tuple):
8890
files[name] = data.pop(name)
8991
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)
9195
path = ['api', self.version, endpoint]
9296
# If we received an ID, append it to the path.
9397
if id:
@@ -102,6 +106,8 @@ def _request(self, method, endpoint, id=None, **kwargs):
102106
# Add our user agent.
103107
kwargs.setdefault('headers', {}).setdefault('User-Agent',
104108
HTTP_USER_AGENT)
109+
if mpe_data:
110+
kwargs['headers']['content-type'] = mpe_data.content_type
105111
# Now try the request, if we get throttled, sleep and try again.
106112
trys, retrys = 0, 3
107113
while True:

0 commit comments

Comments
 (0)