-import env
+ import sys, traceback
++from . import env
+
__all__ = ["restart"]
class restart(Exception):
self.bk = real
self.bki = iter(real)
self._next = [None]
- self.next()
+ self.__next__()
def __iter__(self):
return self
- def next(self):
+ def __next__(self):
if self._next is None:
raise StopIteration()
ret = self._next[0]
try:
- self._next[:] = [self.bki.next()]
+ self._next[:] = [self.bki.__next__()]
except StopIteration:
self._next = None
return ret
if hasattr(self.bk, "close"):
self.bk.close()
- import resp
+ def defaulterror(req, excinfo):
++ from . import resp
+ traceback.print_exception(*excinfo)
+ raise resp.httperror(500)
+
+ def wraphandler(handler, excinfo):
+ def wrapped(req):
+ return handler(req, excinfo)
+ return wrapped
+
+ errorhandler = env.var(defaulterror)
+
def handle(req, startreq, handler):
+ eh = errorhandler.val
try:
resp = [""]
while True:
try:
resp = iterproxy(handler(req))
break
- except restart, i:
+ except restart as i:
handler = i.handle
- except Exception, i:
++ except Exception as i:
+ if eh is None:
+ raise
+ handler = wraphandler(eh, sys.exc_info())
+ eh = None
req.commit(startreq)
return resp
finally:
- from . import dispatch, proto
-import dispatch, proto, env
++from . import dispatch, proto, env
__all__ = ["skeleton", "skelfor", "setskel", "usererror"]
def message(self, message, detail):
return self.page(message, """<h1>%s</h1>\n<p>%s</p>\n""" % (message, detail))
- defskel = skeleton()
+ defskel = env.var(skeleton())
def getskel(req):
- return [defskel]
+ return [defskel.val]
def skelfor(req):
return req.item(getskel)[0]
def setskel(req, skel):
class usererror(dispatch.restart):
def __init__(self, message, detail):
- super(usererror, self).__init__()
+ super().__init__()
self.message = message
self.detail = detail
return [skelfor(req).error(self.message, self.detail)]
class message(dispatch.restart):
- def __init__(self, msg, detail):
- super(message, self).__init__()
- self.message = msg
+ def __init__(self, message, detail):
+ super().__init__()
+ self.message = message
self.detail = detail
def handle(self, req):
message = proto.statusinfo[status][0]
if detail is None:
detail = proto.statusinfo[status][1]
- super(httperror, self).__init__(message, detail)
+ super().__init__(message, detail)
self.status = status
def handle(self, req):
req.status(self.status, self.message)
- return super(httperror, self).handle(req)
+ return super().handle(req)
class notfound(httperror):
def __init__(self):
- return super(notfound, self).__init__(404)
+ return super().__init__(404)
class redirect(dispatch.restart):
def __init__(self, url, status = 303):
- super(redirect, self).__init__()
+ super().__init__()
self.url = url
self.status = status
import threading, time, pickle, random, os
- from . import cookie
-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
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():
data = self.backdb[sessid]
try:
return pickle.loads(data)
- except Exception, e:
+ except:
raise KeyError()
def freeze(self, sess):
with open(os.path.join(self.path, key), "w") as out:
out.write(value)
- default = db(backdb = dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid()))))
+ default = env.var(db(backdb = dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid())))))
def get(req):
- return default.get(req)
+ return default.val.get(req)
import inspect
-import req, dispatch, session, form
+from . import req, dispatch, session, form
def wsgiwrap(callable):
def wrapper(env, startreq):
@classmethod
def sessdb(cls):
- return session.default
+ return session.default.val
class autodirty(sessiondata):
@classmethod
def get(cls, req):
- ret = super(autodirty, cls).get(req)
+ ret = super().get(req)
if "_is_dirty" not in ret.__dict__:
ret.__dict__["_is_dirty"] = False
return ret
return self._is_dirty
def __setattr__(self, name, value):
- super(autodirty, self).__setattr__(name, value)
+ super().__setattr__(name, value)
if "_is_dirty" in self.__dict__:
self.__dict__["_is_dirty"] = True
def __delattr__(self, name):
- super(autodirty, self).__delattr__(name, value)
+ super().__delattr__(name, value)
if "_is_dirty" in self.__dict__:
self.__dict__["_is_dirty"] = True
class manudirty(object):
def __init__(self, *args, **kwargs):
- super(manudirty, self).__init__(*args, **kwargs)
+ super().__init__(*args, **kwargs)
self.__dirty = False
def sessfrozen(self):