Skip to content
This repository was archived by the owner on Nov 22, 2024. It is now read-only.

Commit 36c40ce

Browse files
committed
handle multipart/form-data correctly for more than one file and with params/data
1 parent 13739c5 commit 36c40ce

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

CloudFlare/cloudflare.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,14 @@ def _call_network(self, method, headers, parts, identifiers, params, data, files
194194
if parts[4]:
195195
url += '/' + parts[4]
196196

197+
if files and data:
198+
# Can't send data and form data - so move data into files and send as multipart/form-data
199+
new_files = []
200+
new_files += [(f, (files[f].name, files[f])) for f in files]
201+
new_files += [(d, (None, data[d])) for d in data]
202+
files = tuple(new_files)
203+
data = None
204+
197205
if self.logger:
198206
msg = build_curl(method, url, headers, params, data, files)
199207
self.logger.debug('Call: emulated curl command ...\n%s', msg)

CloudFlare/utils.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,16 @@ def build_curl(method, url, headers, params, data, files):
6363
msg.append(' --data \'%s\' \\' % (str_data.replace('\n', ' ')))
6464
# files
6565
if files is not None:
66-
msg.append(' --form "file=@%s" \\' % (files))
66+
if isinstance(files, (list, tuple)):
67+
for f in files:
68+
if f[1][0] is None:
69+
# not a file
70+
msg.append(' --form "%s=%s" \\' % (f[0], f[1][1]))
71+
else:
72+
# a file
73+
msg.append(' --form "%s=@%s" \\' % (f[0], f[1][0]))
74+
else:
75+
msg.append(' --form "file=@%s" \\' % (files))
6776

6877
# remove the last \ from the last line.
6978
msg[-1] = msg[-1][:-1]

0 commit comments

Comments
 (0)