Add method to group pairs by cookies

This commit is contained in:
Shadab Zafar 2016-08-04 14:16:35 +05:30
parent 99b32094d8
commit a479c51465
2 changed files with 51 additions and 0 deletions

View File

@ -26,6 +26,12 @@ variants. Serialization follows RFC6265.
http://tools.ietf.org/html/rfc2965
"""
_cookie_params = set((
'expires', 'path', 'comment', 'max-age',
'secure', 'httponly', 'version',
))
# TODO: Disallow LHS-only Cookie values
@ -287,3 +293,28 @@ def is_expired(cookie_attrs):
pass
return expires or max_age
def group_cookies(pairs):
"""
Converts a list of pairs to a (name, value, attrs) for each cookie.
"""
if not pairs:
return []
cookie_list = []
# First pair is always a new cookie
name, value = pairs[0]
attrs = []
for k, v in pairs[1:]:
if k.lower() in _cookie_params:
attrs.append((k, v))
else:
cookie_list.append((name, value, CookieAttrs(attrs)))
name, value, attrs = k, v, []
cookie_list.append((name, value, CookieAttrs(attrs)))
return cookie_list

View File

@ -266,3 +266,23 @@ def test_is_expired():
assert not cookies.is_expired(CA([("Max-Age", "nan")]))
assert not cookies.is_expired(CA([("Expires", "false")]))
def test_group_cookies():
def group(cookie):
return cookies.group_cookies(cookies.parse_cookie_header(c))
c = "one=uno; foo=bar; foo=baz"
assert len(group(c)) == 3
c = "one=uno; Path=/; foo=bar; Max-Age=0; foo=baz; expires=24-08-1993"
assert len(group(c)) == 3
c = "one=uno;"
assert len(group(c)) == 1
c = "one=uno; Path=/; Max-Age=0; Expires=24-08-1993"
assert len(group(c)) == 1
c = "path=val; Path=/"
assert group(c) == [("path", "val", cookies.CookieAttrs([("Path", "/")]))]