import threading, time, pickle, random, os
-import cookie
+from . import cookie
__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
now = int(time.time())
with self.lock:
dlist = []
- for sess in self.live.itervalues():
+ for sess in self.live.values():
if sess.atime + self.freezetime < now:
try:
if sess.dirty():
def fetch(self, req):
now = int(time.time())
sessid = cookie.get(req, self.cookiename)
+ new = False
with self.lock:
if self.cthread is None:
self.cthread = threading.Thread(target = self.cleanloop)
sess.atime = now
except KeyError:
sess = session()
- self.live[sess.id] = sess
- sess.new = True
- req.oncommit(self.ckfreeze)
- return sess
+ new = True
- def ckfreeze(self, req):
- sess = self.get(req)
- if sess.dirty():
- try:
- if getattr(sess, "new", False):
+ def ckfreeze(req):
+ if sess.dirty():
+ if new:
cookie.add(req, self.cookiename, sess.id, self.path)
- del sess.new
- self.freeze(sess)
- except:
- pass
+ with self.lock:
+ self.live[sess.id] = sess
+ try:
+ self.freeze(sess)
+ except:
+ pass
+ req.oncommit(ckfreeze)
+ return sess
def thaw(self, sessid):
raise KeyError()
class backeddb(db):
def __init__(self, backdb, *args, **kw):
- super(backeddb, self).__init__(*args, **kw)
+ super().__init__(*args, **kw)
self.backdb = backdb
def thaw(self, sessid):
data = self.backdb[sessid]
try:
return pickle.loads(data)
- except Exception, e:
+ except:
raise KeyError()
def freeze(self, sess):