Commit 775d9eab authored by Jens Vagelpohl's avatar Jens Vagelpohl

- LP #142226: Added an extra keyword argument to the HTTPResponse

  setCookie method to suppress enclosing the cookie value field
  in double quotes.
parent 92a2d7df
......@@ -99,6 +99,10 @@ Restructuring
Features Added
++++++++++++++
- LP #142226: Added an extra keyword argument to the HTTPResponse
setCookie method to suppress enclosing the cookie value field
in double quotes.
- LP #142464: Make undo log easier to read. Thanks to Toby Dickinson
for the patch.
......
......@@ -110,7 +110,7 @@ class Response:
'''
def setCookie(name,value,**kw):
def setCookie(name, value, quoted=True, **kw):
'''
Set an HTTP cookie on the browser
......@@ -120,6 +120,10 @@ class Response:
"value". This overwrites any previously set value for the
cookie in the Response object.
By default, the cookie value will be enclosed in double quotes.
To suppress the double quotes you can pass the "quoted" argument
with a False value such as False or 0.
Permission -- Always available
'''
......
......@@ -563,7 +563,7 @@ class HTTPResponse(BaseResponse):
d['expires'] = 'Wed, 31-Dec-97 23:59:59 GMT'
apply(HTTPResponse.setCookie, (self, name, 'deleted'), d)
def setCookie(self,name,value,**kw):
def setCookie(self, name, value, quoted=True, **kw):
'''\
Set an HTTP cookie on the browser
......@@ -583,6 +583,7 @@ class HTTPResponse(BaseResponse):
for k, v in kw.items():
cookie[k] = v
cookie['value'] = value
cookie['quoted'] = quoted
def appendHeader(self, name, value, delimiter=","):
'''\
......@@ -843,7 +844,10 @@ class HTTPResponse(BaseResponse):
# quoted cookie attr values, so only the value part
# of name=value pairs may be quoted.
cookie = 'Set-Cookie: %s="%s"' % (name, quote(attrs['value']))
if attrs.get('quoted', True):
cookie = 'Set-Cookie: %s="%s"' % (name, quote(attrs['value']))
else:
cookie = 'Set-Cookie: %s=%s' % (name, quote(attrs['value']))
for name, v in attrs.items():
name = name.lower()
if name == 'expires':
......
......@@ -34,8 +34,9 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar')
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 1)
self.assertEqual(len(cookie), 2)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -49,6 +50,7 @@ class HTTPResponseTests(unittest.TestCase):
self.failUnless(cookie)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('expires'), EXPIRES)
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -59,9 +61,10 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', domain='example.com')
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('domain'), 'example.com')
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -72,9 +75,10 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', path='/')
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('path'), '/')
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -84,9 +88,10 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', comment='COMMENT')
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('comment'), 'COMMENT')
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -96,9 +101,10 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', secure='SECURE')
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('secure'), 'SECURE')
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -108,9 +114,10 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', secure='')
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('secure'), '')
self.assertEqual(cookie.get('quoted'), True)
cookies = response._cookie_list()
self.assertEqual(len(cookies), 1)
......@@ -129,9 +136,10 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', http_only=True)
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('http_only'), True)
self.assertEqual(cookie.get('quoted'), True)
cookie_list = response._cookie_list()
self.assertEqual(len(cookie_list), 1)
......@@ -141,14 +149,27 @@ class HTTPResponseTests(unittest.TestCase):
response = self._makeOne()
response.setCookie('foo', 'bar', http_only=False)
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(len(cookie), 3)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('http_only'), False)
self.assertEqual(cookie.get('quoted'), True)
cookie_list = response._cookie_list()
self.assertEqual(len(cookie_list), 1)
self.assertEqual(cookie_list[0], 'Set-Cookie: foo="bar"')
def test_setCookie_unquoted(self):
response = self._makeOne()
response.setCookie('foo', 'bar', quoted=False)
cookie = response.cookies.get('foo', None)
self.assertEqual(len(cookie), 2)
self.assertEqual(cookie.get('value'), 'bar')
self.assertEqual(cookie.get('quoted'), False)
cookie_list = response._cookie_list()
self.assertEqual(len(cookie_list), 1)
self.assertEqual(cookie_list[0], 'Set-Cookie: foo=bar')
def test_expireCookie1160(self):
# Verify that the cookie is expired even if an expires kw arg is passed
# http://zope.org/Collectors/Zope/1160
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment