]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Move 'cookies' property from RequestHandler to HTTPRequest 336/head
authorAlek Storm <alek.storm@gmail.com>
Thu, 18 Aug 2011 06:01:50 +0000 (06:01 +0000)
committerAlek Storm <alek.storm@gmail.com>
Thu, 18 Aug 2011 06:01:50 +0000 (06:01 +0000)
tornado/httpserver.py
tornado/test/httpserver_test.py
tornado/test/web_test.py
tornado/web.py

index 19bbb388bad8beb6b16bf830b58101b73bdecf55..1c78c50f6127df8332f329179762439f6ee573ff 100644 (file)
@@ -24,6 +24,7 @@ This module also defines the `HTTPRequest` class which is exposed via
 `tornado.web.RequestHandler.request`.
 """
 
+import Cookie
 import errno
 import logging
 import os
@@ -509,6 +510,19 @@ class HTTPRequest(object):
         """Returns True if this request supports HTTP/1.1 semantics"""
         return self.version == "HTTP/1.1"
 
+    @property
+    def cookies(self):
+        """A dictionary of Cookie.Morsel objects."""
+        if not hasattr(self, "_cookies"):
+            self._cookies = Cookie.SimpleCookie()
+            if "Cookie" in self.headers:
+                try:
+                    self._cookies.load(
+                        native_str(self.headers["Cookie"]))
+                except Exception:
+                    self._cookies = None
+        return self._cookies
+
     def write(self, chunk, callback=None):
         """Writes the given chunk to the response stream."""
         assert isinstance(chunk, bytes_type)
index 804acdeb3cf2946489990062012af63b29efaeb9..dc1cc9f0263c34f0b2e6bd3f7df2b9c2600a414e 100644 (file)
@@ -162,6 +162,10 @@ class TypeCheckHandler(RequestHandler):
         self.check_type('header_key', self.request.headers.keys()[0], str)
         self.check_type('header_value', self.request.headers.values()[0], str)
 
+        self.check_type('cookie_key', self.request.cookies.keys()[0], str)
+        self.check_type('cookie_value', self.request.cookies.values()[0].value, str)
+        # secure cookies
+
         self.check_type('arg_key', self.request.arguments.keys()[0], str)
         self.check_type('arg_value', self.request.arguments.values()[0][0], bytes_type)
 
@@ -190,11 +194,12 @@ class HTTPServerTest(AsyncHTTPTestCase, LogTrapTestCase):
         self.assertEqual(data, {u"foo": [u"\u00e9"]})
 
     def test_types(self):
-        response = self.fetch("/typecheck?foo=bar")
+        headers = {"Cookie": "foo=bar"}
+        response = self.fetch("/typecheck?foo=bar", headers=headers)
         data = json_decode(response.body)
         self.assertEqual(data, {})
 
-        response = self.fetch("/typecheck", method="POST", body="foo=bar")
+        response = self.fetch("/typecheck", method="POST", body="foo=bar", headers=headers)
         data = json_decode(response.body)
         self.assertEqual(data, {})
 
index 6c60ab415cbf331cebe38fdbf7f28494387b58a2..465f5feaacb6af7316c053587709444a300b881f 100644 (file)
@@ -239,10 +239,6 @@ class TypeCheckHandler(RequestHandler):
         # type str for non-body data mainly for historical reasons.
         self.check_type('argument', self.get_argument('foo'), unicode)
 
-        self.check_type('cookie_key', self.cookies.keys()[0], str)
-        self.check_type('cookie_value', self.cookies.values()[0].value, str)
-        # secure cookies
-    
         self.check_type('xsrf_token', self.xsrf_token, bytes_type)
         self.check_type('xsrf_form_html', self.xsrf_form_html(), str)
 
index 384b26eec409b4b1f2b6efd1b81e3b4fdf1f4912..91c76adeb1d7d74c893b914041778cdb5634bad3 100644 (file)
@@ -316,23 +316,10 @@ class RequestHandler(object):
         """
         return _unicode(value)
 
-    @property
-    def cookies(self):
-        """A dictionary of Cookie.Morsel objects."""
-        if not hasattr(self, "_cookies"):
-            self._cookies = Cookie.SimpleCookie()
-            if "Cookie" in self.request.headers:
-                try:
-                    self._cookies.load(
-                        escape.native_str(self.request.headers["Cookie"]))
-                except Exception:
-                    self.clear_all_cookies()
-        return self._cookies
-
     def get_cookie(self, name, default=None):
         """Gets the value of the cookie with the given name, else default."""
-        if name in self.cookies:
-            return self.cookies[name].value
+        if name in self.request.cookies:
+            return self.request.cookies[name].value
         return default
 
     def set_cookie(self, name, value, domain=None, expires=None, path="/",
@@ -377,7 +364,7 @@ class RequestHandler(object):
 
     def clear_all_cookies(self):
         """Deletes all the cookies the user sent with this request."""
-        for name in self.cookies.iterkeys():
+        for name in self.request.cookies.iterkeys():
             self.clear_cookie(name)
 
     def set_secure_cookie(self, name, value, expires_days=30, **kwargs):