]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Keep empty arguments in WSGI mode too.
authorBen Darnell <ben@bendarnell.com>
Mon, 10 Sep 2012 04:04:58 +0000 (21:04 -0700)
committerBen Darnell <ben@bendarnell.com>
Mon, 10 Sep 2012 04:04:58 +0000 (21:04 -0700)
Add another test and release notes.

tornado/test/web_test.py
tornado/wsgi.py
website/sphinx/releases/next.rst

index 845fb289768e3ec12418f286ce0edd8522da6147..3ce700f649fb2c3ef15455c6f8ade0ea4b83ac7f 100644 (file)
@@ -451,6 +451,11 @@ class HeaderInjectionHandler(RequestHandler):
                 raise
 
 
+class GetArgumentHandler(RequestHandler):
+    def get(self):
+        self.write(self.get_argument("foo", "default"))
+
+
 # This test is shared with wsgi_test.py
 class WSGISafeWebTest(AsyncHTTPTestCase):
     COOKIE_SECRET = "WebTest.COOKIE_SECRET"
@@ -487,6 +492,7 @@ class WSGISafeWebTest(AsyncHTTPTestCase):
             url("/multi_header", MultiHeaderHandler),
             url("/redirect", RedirectHandler),
             url("/header_injection", HeaderInjectionHandler),
+            url("/get_argument", GetArgumentHandler),
             ]
         return urls
 
@@ -591,6 +597,14 @@ js_embed()
         response = self.fetch("/header_injection")
         self.assertEqual(response.body, b("ok"))
 
+    def test_get_argument(self):
+        response = self.fetch("/get_argument?foo=bar")
+        self.assertEqual(response.body, b("bar"))
+        response = self.fetch("/get_argument?foo=")
+        self.assertEqual(response.body, b(""))
+        response = self.fetch("/get_argument")
+        self.assertEqual(response.body, b("default"))
+
 
 class NonWSGIWebTests(AsyncHTTPTestCase):
     def get_app(self):
index dd2488e852b27d5d56eed8f7ac22f08abbc083a2..98422f56d21a6e6d34c0be29be4df9d6157a54d4 100644 (file)
@@ -137,11 +137,8 @@ class HTTPRequest(object):
         self.query = environ.get("QUERY_STRING", "")
         if self.query:
             self.uri += "?" + self.query
-            arguments = parse_qs_bytes(native_str(self.query))
-            for name, values in arguments.iteritems():
-                values = [v for v in values if v]
-                if values:
-                    self.arguments[name] = values
+            self.arguments = parse_qs_bytes(native_str(self.query),
+                                            keep_blank_values=True)
         self.version = "HTTP/1.1"
         self.headers = httputil.HTTPHeaders()
         if environ.get("CONTENT_TYPE"):
index 35d110acb7967722db9143ac2bda0a218ba9b89a..f4bd8cc09b99130ec923f957820f38cdcbee0700 100644 (file)
@@ -27,3 +27,6 @@ In progress
 * The command-line interface to `tornado.testing.main` now supports
   additional arguments from the underlying `unittest` module:
   ``verbose``, ``quiet``, ``failfast``, ``catch``, ``buffer``.
+* Empty HTTP request arguments are no longer ignored.  This applies to
+  ``HTTPRequest.arguments`` and ``RequestHandler.get_argument[s]``
+  in WSGI and non-WSGI modes.