- try:
- if sessid is None:
- raise KeyError()
- elif sessid in self.live:
- sess = self.live[sessid]
- else:
- sess = self.thaw(sessid)
- self.live[sessid] = sess
- if sess.atime + sess.expire < now:
- raise KeyError()
- sess.atime = now
- except KeyError:
- sess = session()
- self.live[sess.id] = sess
- req.oncommit(self.addcookie)
- req.oncommit(self.ckfreeze)
- return sess
-
- def addcookie(self, req):
- sess = req.item(self.fetch)
- cookie.add(req, self.cookiename, sess.id, self.path)
-
- def ckfreeze(self, req):
- sess = req.item(self.fetch)
- if sess.dirty():
- try:
- self.freeze(sess)
- except:
- pass
-
- def thaw(self, sessid):
- raise KeyError()
-
- def freeze(self, sess):
- raise TypeError()