From: Cory Benfield Date: Sat, 17 Aug 2013 06:27:58 +0000 (+0100) Subject: Allow non-string objects to be data with files X-Git-Tag: v2.0~5^2~8^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f44b86e03962b08ebf3b77d980ebeb8f11f6f704;p=services%2Fpython-requests.git Allow non-string objects to be data with files --- diff --git a/requests/models.py b/requests/models.py index 6b4a299..2428a5e 100644 --- a/requests/models.py +++ b/requests/models.py @@ -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)) diff --git a/test_requests.py b/test_requests.py index c9572a6..e20d45a 100755 --- a/test_requests.py +++ b/test_requests.py @@ -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):