Merge branch 'master' into python3
[wrw.git] / wrw / cookie.py
CommitLineData
c33f2d6c 1import http.cookies
b409a338
FT
2
3__all__ = ["cookies", "get", "add"]
4
5def addcookies(req):
6 ck = cookies(req)
7 for nm in ck.codec:
8 req.ohead.add("Set-Cookie", ck.codec[nm].OutputString())
9
10class cookiedict(object):
11 def __init__(self, req):
8204ad1d 12 try:
c33f2d6c
FT
13 self.bk = http.cookies.SimpleCookie(req.ihead.get("Cookie"))
14 except http.cookies.CookieError:
15 self.bk = http.cookies.SimpleCookie()
16 self.codec = http.cookies.SimpleCookie()
b409a338
FT
17 req.oncommit(addcookies)
18
19 def __getitem__(self, name):
20 return self.bk[name].value
21
22 def __contains__(self, name):
23 return name in self.bk
24
25 def get(self, name, default = None):
26 if name not in self.bk:
27 return default
28 return self.bk[name].value
29
d99a17a6 30 def add(self, name, value, **kw):
b409a338 31 self.codec[name] = value
5218a0fd 32 for key, value in kw.items():
d99a17a6 33 self.codec[name][key] = value
b409a338
FT
34
35 def __setitem__(self, name, value):
36 self.add(name, value)
37
38def cookies(req):
39 return req.item(cookiedict)
40
41def get(req, name, default = None):
42 return cookies(req).get(name, default)
43
d99a17a6
FT
44def add(req, name, value, **kw):
45 cookies(req).add(name, value, **kw)