added mutlipart file=strings
authorbarberj <barber.justin@gmail.com>
Sat, 21 Apr 2012 02:15:35 +0000 (22:15 -0400)
committerShivaram Lingamneni <slingamn@cs.stanford.edu>
Sun, 6 May 2012 22:14:40 +0000 (15:14 -0700)
requests/models.py
tests/test_requests.py

index 62aeb9c5a1d52010e86d31b95c51d3831a255a05..756924473afd4d4b20753f1344fc79fd08dcf0e0 100644 (file)
@@ -32,7 +32,7 @@ from .utils import (
     DEFAULT_CA_BUNDLE_PATH)
 from .compat import (
     cookielib, urlparse, urlunparse, urljoin, urlsplit, urlencode, str, bytes,
-    is_py2)
+    StringIO, is_py2)
 
 # Import chardet if it is available.
 try:
@@ -348,6 +348,8 @@ class Request(object):
             else:
                 fn = guess_filename(v) or k
                 fp = v
+            if isinstance(fp, bytes):
+                fp = StringIO(fp)
             fields.update({k: (fn, fp.read())})
 
         (body, content_type) = encode_multipart_formdata(fields)
index 71967bb31f2227bbf32c49144356d2ea0e340be3..43745a56625fc857831dfb32e74a8d440fc9e959 100755 (executable)
@@ -329,6 +329,21 @@ class RequestsTestSuite(TestSetup, TestBaseMixin, unittest.TestCase):
 
             self.assertEqual(post2.status_code, 200)
 
+    def test_POSTBIN_GET_POST_FILES_STRINGS(self):
+
+        for service in SERVICES:
+
+            url = service('post')
+
+            post1 = post(url, files={'fname.txt': 'fdata'})
+            self.assertEqual(post1.status_code, 200)
+
+            post2 = post(url, files={'fname.txt': 'fdata', 'fname2.txt':'more fdata'})
+            self.assertEqual(post2.status_code, 200)
+
+            post3 = post(url, files={'fname.txt': 'fdata', 'fname2.txt':open(__file__,'rb')})
+            self.assertEqual(post3.status_code, 200)
+
     def test_nonzero_evaluation(self):
 
         for service in SERVICES: