Cookies: Cast primitive types to str (#5253)

* cast primitive types to str

* add tests
This commit is contained in:
Laerte 2021-10-06 12:32:04 -03:00 committed by GitHub
parent 214525c2c1
commit 6c858cec91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 2 deletions

View File

@ -80,8 +80,8 @@ class CookiesMiddleware:
logger.warning(msg.format(request, cookie, key))
return
continue
if isinstance(cookie[key], str):
decoded[key] = cookie[key]
if isinstance(cookie[key], (bool, float, int, str)):
decoded[key] = str(cookie[key])
else:
try:
decoded[key] = cookie[key].decode("utf8")

View File

@ -347,3 +347,24 @@ class CookiesMiddlewareTest(TestCase):
self.assertCookieValEqual(req1.headers['Cookie'], 'key=value1')
self.assertCookieValEqual(req2.headers['Cookie'], 'key=value2')
self.assertCookieValEqual(req3.headers['Cookie'], 'key=')
def test_primitive_type_cookies(self):
# Boolean
req1 = Request('http://example.org', cookies={'a': True})
assert self.mw.process_request(req1, self.spider) is None
self.assertCookieValEqual(req1.headers['Cookie'], b'a=True')
# Float
req2 = Request('http://example.org', cookies={'a': 9.5})
assert self.mw.process_request(req2, self.spider) is None
self.assertCookieValEqual(req2.headers['Cookie'], b'a=9.5')
# Integer
req3 = Request('http://example.org', cookies={'a': 10})
assert self.mw.process_request(req3, self.spider) is None
self.assertCookieValEqual(req3.headers['Cookie'], b'a=10')
# String
req4 = Request('http://example.org', cookies={'a': 'b'})
assert self.mw.process_request(req4, self.spider) is None
self.assertCookieValEqual(req4.headers['Cookie'], b'a=b')