]>
Commit | Line | Data |
---|---|---|
1 | import http.cookies, time | |
2 | from . import proto | |
3 | ||
4 | __all__ = ["cookies", "get", "add"] | |
5 | ||
6 | def addcookies(req): | |
7 | ck = cookies(req) | |
8 | for nm in ck.codec: | |
9 | req.ohead.add("Set-Cookie", ck.codec[nm].OutputString()) | |
10 | ||
11 | class cookiedict(object): | |
12 | def __init__(self, req): | |
13 | try: | |
14 | self.bk = http.cookies.SimpleCookie(req.ihead.get("Cookie")) | |
15 | except http.cookies.CookieError: | |
16 | self.bk = http.cookies.SimpleCookie() | |
17 | self.codec = http.cookies.SimpleCookie() | |
18 | req.oncommit(addcookies) | |
19 | ||
20 | def __getitem__(self, name): | |
21 | return self.bk[name].value | |
22 | ||
23 | def __contains__(self, name): | |
24 | return name in self.bk | |
25 | ||
26 | def get(self, name, default=None): | |
27 | if name not in self.bk: | |
28 | return default | |
29 | return self.bk[name].value | |
30 | ||
31 | def add(self, name, value, **kw): | |
32 | self.codec[name] = value | |
33 | for key, value in kw.items(): | |
34 | if key == "maxage": | |
35 | key = "max-age" | |
36 | self.codec[name][key] = value | |
37 | ||
38 | def __setitem__(self, name, value): | |
39 | self.add(name, value) | |
40 | ||
41 | def cookies(req): | |
42 | return req.item(cookiedict) | |
43 | ||
44 | def get(req, name, default=None): | |
45 | return cookies(req).get(name, default) | |
46 | ||
47 | def add(req, name, value, **kw): | |
48 | cookies(req).add(name, value, **kw) | |
49 | ||
50 | cdate = proto.httpdate |