From: Vinod Chandru Date: Thu, 10 Jan 2013 03:29:28 +0000 (-0800) Subject: Allow for third argument in file dict value to support explicit X-Git-Tag: v1.1.0^2~1^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=20b10aed1bbe277745a74953b6dc73290bfa82fa;p=services%2Fpython-requests.git Allow for third argument in file dict value to support explicit file content type. --- diff --git a/AUTHORS.rst b/AUTHORS.rst index acc78e8..1244588 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -118,3 +118,4 @@ Patches and Suggestions - Martijn Pieters - Jonatan Heyman - David Bonner @rascalking +- Vinod Chandru diff --git a/requests/models.py b/requests/models.py index 9ddea45..1b55038 100644 --- a/requests/models.py +++ b/requests/models.py @@ -108,8 +108,12 @@ class RequestEncodingMixin(object): for (k, v) in files: # support for explicit filename + ft = None if isinstance(v, (tuple, list)): - fn, fp = v + if len(v) == 2: + fn, fp = v + else: + fn, fp, ft = v else: fn = guess_filename(v) or k fp = v @@ -117,7 +121,12 @@ class RequestEncodingMixin(object): fp = StringIO(fp) if isinstance(fp, bytes): fp = BytesIO(fp) - new_fields.append((k, (fn, fp.read()))) + + if ft: + new_v = (fn, fp.read(), ft) + else: + new_v = (fn, fp.read()) + new_fields.append((k, new_v)) body, content_type = encode_multipart_formdata(new_fields) diff --git a/test_requests.py b/test_requests.py index 84d4e8b..fb48323 100644 --- a/test_requests.py +++ b/test_requests.py @@ -255,6 +255,14 @@ class RequestsTestCase(unittest.TestCase): files={'file': ('test_requests.py', open(__file__, 'rb'))}) self.assertEqual(r.status_code, 200) + def test_custom_content_type(self): + r = requests.post(httpbin('post'), + data={'stuff': json.dumps({'a': 123})}, + files={'file1': ('test_requests.py', open(__file__, 'rb')), + 'file2': ('test_requests', open(__file__, 'rb'), + 'text/py-content-type')}) + self.assertEqual(r.status_code, 200) + self.assertTrue("text/py-content-type" in r.request.body) if __name__ == '__main__':