-import Cookie
+import http.cookies
__all__ = ["cookies", "get", "add"]
class cookiedict(object):
def __init__(self, req):
try:
- self.bk = Cookie.SimpleCookie(req.ihead.get("Cookie"))
- except Cookie.CookieError:
- self.bk = Cookie.SimpleCookie()
- self.codec = Cookie.SimpleCookie()
+ self.bk = http.cookies.SimpleCookie(req.ihead.get("Cookie"))
+ except http.cookies.CookieError:
+ self.bk = http.cookies.SimpleCookie()
+ self.codec = http.cookies.SimpleCookie()
req.oncommit(addcookies)
def __getitem__(self, name):
return default
return self.bk[name].value
- def add(self, name, value, path = None):
+ def add(self, name, value, **kw):
self.codec[name] = value
- if path is not None: self.codec[name]["path"] = path
- for key, value in kw.iteritems():
++ for key, value in kw.items():
+ self.codec[name][key] = value
def __setitem__(self, name, value):
self.add(name, value)
def get(req, name, default = None):
return cookies(req).get(name, default)
- def add(req, name, value, path = None):
- cookies(req).add(name, value, path)
+ def add(req, name, value, **kw):
+ cookies(req).add(name, value, **kw)
import threading, time, pickle, random, os
-import cookie, env
+from . import cookie, env
__all__ = ["db", "get"]
def gennonce(length):
nonce = ""
- for i in xrange(length):
+ for i in range(length):
nonce += chr(random.randint(0, 255))
return nonce
def clean(self):
now = int(time.time())
with self.lock:
- clist = self.live.keys()
+ clist = list(self.live.keys())
for sessid in clist:
with self.lock:
try:
self.cthread.setDaemon(True)
self.cthread.start()
+ def mksession(self, req):
+ return session(threading.RLock())
+
+ def mkcookie(self, req, sess):
+ cookie.add(req, self.cookiename, sess.id, path=self.path)
+
def fetch(self, req):
now = int(time.time())
sessid = cookie.get(req, self.cookiename)
raise KeyError()
sess = self._fetch(sessid)
except KeyError:
- sess = session(threading.RLock())
+ sess = self.mksession(req)
new = True
def ckfreeze(req):
if sess.dirty():
if new:
- cookie.add(req, self.cookiename, sess.id, self.path)
+ self.mkcookie(req, sess)
with self.lock:
self.live[sess.id] = [sess.lock, sess]
try:
data = self.backdb[sessid]
try:
return pickle.loads(data)
- except Exception, e:
+ except:
raise KeyError()
def freeze(self, sess):
-import cons
+from . import cons
def findnsnames(el):
names = {}
def proc(el):
if isinstance(el, cons.element):
if el.ns not in names:
- names[el.ns] = u"n" + unicode(nid[0])
+ names[el.ns] = "n" + str(nid[0])
nid[:] = [nid[0] + 1]
for ch in el.children:
proc(ch)
def quotewrite(self, buf):
for ch in buf:
- if ch == u'&':
- self.write(u"&")
- elif ch == u'<':
- self.write(u"<")
- elif ch == u'>':
- self.write(u">")
+ if ch == '&':
+ self.write("&")
+ elif ch == '<':
+ self.write("<")
+ elif ch == '>':
+ self.write(">")
else:
self.write(ch)
self.write(el)
def attrval(self, buf):
- qc, qt = (u"'", u"'") if u'"' in buf else (u'"', u""")
+ qc, qt = ("'", "'") if '"' in buf else ('"', """)
self.write(qc)
for ch in buf:
- if ch == u'&':
- self.write(u"&")
- elif ch == u'<':
- self.write(u"<")
- elif ch == u'>':
- self.write(u">")
+ if ch == '&':
+ self.write("&")
+ elif ch == '<':
+ self.write("<")
+ elif ch == '>':
+ self.write(">")
elif ch == qc:
self.write(qt)
else:
def attr(self, k, v):
self.write(k)
- self.write(u'=')
+ self.write('=')
self.attrval(v)
def shorttag(self, el, **extra):
- self.write(u'<' + self.elname(el))
- for k, v in el.attrs.iteritems():
- self.write(u' ')
+ self.write('<' + self.elname(el))
+ for k, v in el.attrs.items():
+ self.write(' ')
self.attr(k, v)
- for k, v in extra.iteritems():
- self.write(u' ')
+ for k, v in extra.items():
+ self.write(' ')
self.attr(k, v)
- self.write(u" />")
+ self.write(" />")
def elname(self, el):
ns = self.nsnames[el.ns]
if ns is None:
return el.name
else:
- return ns + u':' + el.name
+ return ns + ':' + el.name
def starttag(self, el, **extra):
- self.write(u'<' + self.elname(el))
- for k, v in el.attrs.iteritems():
- self.write(u' ')
+ self.write('<' + self.elname(el))
+ for k, v in el.attrs.items():
+ self.write(' ')
self.attr(k, v)
- for k, v in extra.iteritems():
- self.write(u' ')
+ for k, v in extra.items():
+ self.write(' ')
self.attr(k, v)
- self.write(u'>')
+ self.write('>')
def endtag(self, el):
- self.write(u'</' + self.elname(el) + u'>')
+ self.write('</' + self.elname(el) + '>')
def longtag(self, el):
self.starttag(el, **extra)
raise Exception("Unknown object in element tree: " + el)
def start(self):
- self.write(u'<?xml version="1.0" encoding="' + self.charset + u'" ?>\n')
+ self.write('<?xml version="1.0" encoding="' + self.charset + '" ?>\n')
if self.doctype:
- self.write(u'<!DOCTYPE %s PUBLIC "%s" "%s">\n' % (self.root.name,
- self.doctype[0],
- self.doctype[1]))
+ self.write('<!DOCTYPE %s PUBLIC "%s" "%s">\n' % (self.root.name,
+ self.doctype[0],
+ self.doctype[1]))
extra = {}
- for uri, nm in self.nsnames.iteritems():
+ for uri, nm in self.nsnames.items():
if uri is None:
continue
if nm is None:
- extra[u"xmlns"] = uri
+ extra["xmlns"] = uri
else:
- extra[u"xmlns:" + nm] = uri
+ extra["xmlns:" + nm] = uri
self.element(self.root, **extra)
@classmethod
@classmethod
def fragment(cls, out, el, *args, **kw):
- cls(out=out, root=el, *args, **kw).element(el)
+ cls(out=out, root=el, *args, **kw).node(el)
def update(self, **ch):
ret = type(self).__new__(type(self))
self.col = 0
def write(self, buf):
- for c in buf:
- if c == '\n':
+ for i in range(len(buf)):
+ c = buf[i:i + 1]
+ if c == b'\n':
self.col = 0
else:
self.col += 1
if self.atbol:
return
if self.col != 0:
- self.write('\n')
+ self.write(b'\n')
self.write(indent)
self.atbol = True
class indenter(formatter):
- def __init__(self, indent=u" ", *args, **kw):
+ def __init__(self, indent=" ", *args, **kw):
super(indenter, self).__init__(*args, **kw)
self.out = iwriter(self.out)
self.indent = indent
- self.curind = u""
+ self.curind = ""
def simple(self, el):
for ch in el.children: