support request tuple data
authorFeng Liu <mefengliu23@gmail.com>
Fri, 14 Mar 2014 08:24:25 +0000 (16:24 +0800)
committerFeng Liu <mefengliu23@gmail.com>
Thu, 27 Mar 2014 02:41:49 +0000 (10:41 +0800)
rewrite the TestModels

Ajust the code

requests/models.py
test_requests.py

index e2fa09f8cefa31960d3a6c48844adecbb2423146..7390d1c669523c6e378910d1ea8b67c7f017aaa8 100644 (file)
@@ -408,9 +408,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
 
         is_stream = all([
             hasattr(data, '__iter__'),
-            not isinstance(data, basestring),
-            not isinstance(data, list),
-            not isinstance(data, dict)
+            not isinstance(data, (basestring, list, tuple, dict))
         ])
 
         try:
index dbb38064aaf4bad8a3ae50c45308b3c926923082..55e7a3d11a637676edffc92584398334d0d08258 100755 (executable)
@@ -21,6 +21,8 @@ from requests.exceptions import InvalidURL, MissingSchema
 from requests.models import PreparedRequest, Response
 from requests.structures import CaseInsensitiveDict
 from requests.sessions import SessionRedirectMixin
+from requests.models import PreparedRequest, urlencode
+from requests.hooks import default_hooks
 
 try:
     import StringIO
@@ -1275,5 +1277,30 @@ class TestRedirects:
             assert session.calls[-1] == send_call
 
 
+@pytest.fixture
+def list_of_tuples():
+    return [
+            (('a', 'b'), ('c', 'd')),
+            (('c', 'd'), ('a', 'b')),
+            (('a', 'b'), ('c', 'd'), ('e', 'f')),
+            ]
+
+
+def test_data_argument_accepts_tuples(list_of_tuples):
+    """
+    Ensure that the data argument will accept tuples of strings
+    and properly encode them.
+    """
+    for data in list_of_tuples:
+        p = PreparedRequest()
+        p.prepare(
+            method='GET',
+            url='http://www.example.com',
+            data=data,
+            hooks=default_hooks()
+        )
+        assert p.body == urlencode(data)
+        
+
 if __name__ == '__main__':
     unittest.main()