Allow non-string objects to be data with files
authorCory Benfield <lukasaoz@gmail.com>
Sat, 17 Aug 2013 06:27:58 +0000 (07:27 +0100)
committerCory Benfield <lukasaoz@gmail.com>
Sat, 17 Aug 2013 06:27:58 +0000 (07:27 +0100)
requests/models.py
test_requests.py

index 6b4a299..2428a5e 100644 (file)
@@ -106,6 +106,10 @@ class RequestEncodingMixin(object):
                 val = [val]
             for v in val:
                 if v is not None:
+                    # Don't call str() on bytestrings: in Py3 it all goes wrong.
+                    if not isinstance(v, bytes):
+                        v = str(v)
+
                     new_fields.append(
                         (field.decode('utf-8') if isinstance(field, bytes) else field,
                          v.encode('utf-8') if isinstance(v, str) else v))
index c9572a6..e20d45a 100755 (executable)
@@ -663,6 +663,14 @@ class RequestsTestCase(unittest.TestCase):
         self.assertTrue('unicode' in p.headers.keys())
         self.assertTrue('byte' in p.headers.keys())
 
+    def test_can_send_nonstring_objects_with_files(self):
+        data = {'a': 0.0}
+        files = {'b': 'foo'}
+        r = requests.Request('POST', httpbin('post'), data=data, files=files)
+        p = r.prepare()
+
+        self.assertTrue('multipart/form-data' in p.headers['Content-Type'])
+
 
 class TestCaseInsensitiveDict(unittest.TestCase):