New get_cookie and set_cookie implementations for HTTPRequest

This commit is contained in:
Aldo Cortesi 2015-04-14 13:45:38 +12:00
parent 4652887786
commit e17eacd8d7
2 changed files with 31 additions and 16 deletions

View File

@ -6,7 +6,7 @@ import time
import copy import copy
from email.utils import parsedate_tz, formatdate, mktime_tz from email.utils import parsedate_tz, formatdate, mktime_tz
import threading import threading
from netlib import http, tcp, http_status from netlib import http, tcp, http_status, http_cookies
import netlib.utils import netlib.utils
from netlib import odict from netlib import odict
from .tcp import TCPHandler from .tcp import TCPHandler
@ -670,15 +670,22 @@ class HTTPRequest(HTTPMessage):
self.scheme, self.host, self.port, self.path = parts self.scheme, self.host, self.port, self.path = parts
def get_cookies(self): def get_cookies(self):
cookie_headers = self.headers.get("cookie") """
if not cookie_headers:
return None
cookies = [] Returns a possibly empty netlib.odict.ODict object.
for header in cookie_headers: """
pairs = [pair.partition("=") for pair in header.split(';')] ret = odict.ODict()
cookies.extend((pair[0], (pair[2], {})) for pair in pairs) for i in self.headers["cookie"]:
return dict(cookies) ret.extend(http_cookies.parse_cookie_header(i))
return ret
def set_cookies(self, odict):
"""
Takes an netlib.odict.ODict object. Over-writes any existing Cookie
headers.
"""
v = http_cookies.format_cookie_header(odict)
self.headers["Cookie"] = [v]
def replace(self, pattern, repl, *args, **kwargs): def replace(self, pattern, repl, *args, **kwargs):
""" """

View File

@ -161,7 +161,7 @@ class TestHTTPRequest:
h = odict.ODictCaseless() h = odict.ODictCaseless()
r = tutils.treq() r = tutils.treq()
r.headers = h r.headers = h
assert r.get_cookies() is None assert len(r.get_cookies()) == 0
def test_get_cookies_single(self): def test_get_cookies_single(self):
h = odict.ODictCaseless() h = odict.ODictCaseless()
@ -170,7 +170,7 @@ class TestHTTPRequest:
r.headers = h r.headers = h
result = r.get_cookies() result = r.get_cookies()
assert len(result)==1 assert len(result)==1
assert result['cookiename']==('cookievalue',{}) assert result['cookiename']==['cookievalue']
def test_get_cookies_double(self): def test_get_cookies_double(self):
h = odict.ODictCaseless() h = odict.ODictCaseless()
@ -179,8 +179,8 @@ class TestHTTPRequest:
r.headers = h r.headers = h
result = r.get_cookies() result = r.get_cookies()
assert len(result)==2 assert len(result)==2
assert result['cookiename']==('cookievalue',{}) assert result['cookiename']==['cookievalue']
assert result['othercookiename']==('othercookievalue',{}) assert result['othercookiename']==['othercookievalue']
def test_get_cookies_withequalsign(self): def test_get_cookies_withequalsign(self):
h = odict.ODictCaseless() h = odict.ODictCaseless()
@ -189,10 +189,18 @@ class TestHTTPRequest:
r.headers = h r.headers = h
result = r.get_cookies() result = r.get_cookies()
assert len(result)==2 assert len(result)==2
assert result['cookiename']==('coo=kievalue',{}) assert result['cookiename']==['coo=kievalue']
assert result['othercookiename']==('othercookievalue',{}) assert result['othercookiename']==['othercookievalue']
def test_set_cookies(self):
h = odict.ODictCaseless()
h["Cookie"] = ["cookiename=cookievalue"]
r = tutils.treq()
r.headers = h
result = r.get_cookies()
result["cookiename"] = ["foo"]
r.set_cookies(result)
assert r.get_cookies()["cookiename"] == ["foo"]
class TestHTTPResponse: class TestHTTPResponse: