Skip to content

Commit ca1b9ad

Browse files
authored
Merge pull request #67 from Azure/formdata
Fix formData
2 parents 24deba7 + 0d9573b commit ca1b9ad

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

msrest/service_client.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,15 @@ def send_formdata(self, request, headers=None, content=None, **config):
164164
"""
165165
if content is None:
166166
content = {}
167-
file_data = {f: self._format_data(d) for f, d in content.items()}
168-
if headers:
169-
headers.pop('Content-Type', None)
170-
return self.send(request, headers, None, files=file_data, **config)
167+
content_type = headers.pop('Content-Type', None) if headers else None
168+
169+
if content_type and content_type.lower() == 'application/x-www-form-urlencoded':
170+
# Do NOT use "add_content" that assumes input is JSON
171+
request.data = {f: d for f, d in content.items() if d is not None}
172+
return self.send(request, headers, None, **config)
173+
else: # Assume "multipart/form-data"
174+
file_data = {f: self._format_data(d) for f, d in content.items() if d is not None}
175+
return self.send(request, headers, None, files=file_data, **config)
171176

172177
def send(self, request, headers=None, content=None, **config):
173178
"""Prepare and send request object according to configuration.

tests/test_client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,17 @@ def test_client_formdata_send(self):
204204
ServiceClient.send_formdata(mock_client, request, {'Content-Type':'1234'}, {'1':'1', '2':'2'})
205205
mock_client.send.assert_called_with(request, {}, None, files={'1':'formatted', '2':'formatted'})
206206

207+
ServiceClient.send_formdata(mock_client, request, {'Content-Type':'1234'}, {'1':'1', '2':None})
208+
mock_client.send.assert_called_with(request, {}, None, files={'1':'formatted'})
209+
210+
ServiceClient.send_formdata(mock_client, request, {'Content-Type':'application/x-www-form-urlencoded'}, {'1':'1', '2':'2'})
211+
mock_client.send.assert_called_with(request, {}, None)
212+
self.assertEqual(request.data, {'1':'1', '2':'2'})
213+
214+
ServiceClient.send_formdata(mock_client, request, {'Content-Type':'application/x-www-form-urlencoded'}, {'1':'1', '2':None})
215+
mock_client.send.assert_called_with(request, {}, None)
216+
self.assertEqual(request.data, {'1':'1'})
217+
207218
def test_format_data(self):
208219

209220
mock_client = mock.create_autospec(ServiceClient)

0 commit comments

Comments
 (0)