From: Fredrik Tolf Date: Sun, 5 Feb 2012 16:00:30 +0000 (+0100) Subject: Merge branch 'master' into python3 X-Git-Url: http://dolda2000.com/gitweb/?a=commitdiff_plain;ds=sidebyside;h=3614ca8353a5f2055fdcc086e6bc9dc993b49b42;hp=-c;p=wrw.git Merge branch 'master' into python3 Conflicts: wrw/resp.py wrw/session.py --- 3614ca8353a5f2055fdcc086e6bc9dc993b49b42 diff --combined wrw/dispatch.py index 709cfe4,15ea99e..e51559e --- a/wrw/dispatch.py +++ b/wrw/dispatch.py @@@ -1,3 -1,6 +1,6 @@@ + import sys, traceback -import env ++from . import env + __all__ = ["restart"] class restart(Exception): @@@ -20,17 -23,17 +23,17 @@@ class iterproxy(object) 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 @@@ -39,15 -42,33 +42,33 @@@ if hasattr(self.bk, "close"): self.bk.close() + def defaulterror(req, excinfo): - import resp ++ 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: diff --combined wrw/resp.py index 75a7f3a,3514616..6e95ec5 --- a/wrw/resp.py +++ b/wrw/resp.py @@@ -1,4 -1,4 +1,4 @@@ - from . import dispatch, proto -import dispatch, proto, env ++from . import dispatch, proto, env __all__ = ["skeleton", "skelfor", "setskel", "usererror"] @@@ -27,10 -27,10 +27,10 @@@ class skeleton(object) def message(self, message, detail): return self.page(message, """

%s

\n

%s

\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): @@@ -38,7 -38,7 +38,7 @@@ class usererror(dispatch.restart): def __init__(self, message, detail): - super(usererror, self).__init__() + super().__init__() self.message = message self.detail = detail @@@ -46,9 -46,9 +46,9 @@@ 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): @@@ -60,20 -60,20 +60,20 @@@ class httperror(usererror) 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 diff --combined wrw/session.py index d78c43b,1239ecd..832387e --- a/wrw/session.py +++ b/wrw/session.py @@@ -1,5 -1,5 +1,5 @@@ import threading, time, pickle, random, os - from . import cookie -import cookie, env ++from . import cookie, env __all__ = ["db", "get"] @@@ -11,7 -11,7 +11,7 @@@ def hexencode(str) def gennonce(length): nonce = "" - for i in xrange(length): + for i in range(length): nonce += chr(random.randint(0, 255)) return nonce @@@ -84,7 -84,7 +84,7 @@@ class db(object) 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(): @@@ -151,7 -151,7 +151,7 @@@ data = self.backdb[sessid] try: return pickle.loads(data) - except Exception, e: + except: raise KeyError() def freeze(self, sess): @@@ -180,7 -180,7 +180,7 @@@ class dirback(object) 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) diff --combined wrw/util.py index e338e2c,6170c9e..58ead25 --- a/wrw/util.py +++ b/wrw/util.py @@@ -1,5 -1,5 +1,5 @@@ import inspect -import req, dispatch, session, form +from . import req, dispatch, session, form def wsgiwrap(callable): def wrapper(env, startreq): @@@ -50,12 -50,12 +50,12 @@@ class sessiondata(object) @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 @@@ -67,18 -67,18 +67,18 @@@ 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):