X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fresp.py;h=4840799fb65befc6ad4fa3213e0b4d21fffa4317;hb=ae10a0a1fb12d6f9c0ecdb250046ab75c322961e;hp=030d5ee4385a6f1a9d3e4e8f905a3f9bddfb0a7f;hpb=dc7e5d54e72fd9a22f1509df0c7bbf05f8db8924;p=wrw.git diff --git a/wrw/resp.py b/wrw/resp.py index 030d5ee..4840799 100644 --- a/wrw/resp.py +++ b/wrw/resp.py @@ -1,4 +1,4 @@ -import dispatch, proto +from . import dispatch, proto, env __all__ = ["skeleton", "skelfor", "setskel", "usererror"] @@ -15,7 +15,7 @@ class skeleton(object): """ % (self.head(title), content) - def skel(self, title): + def head(self, title): return """%s\n%s""" % (title, self.style()) def style(self): @@ -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,21 +38,21 @@ 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 def handle(self, req): - return [skelfor(req).error(self.message, self.detail)] + return [skelfor(req).error(self.message, self.detail).encode("utf-8")] class message(dispatch.restart): def __init__(self, message, detail): - super(message, self).__init__() + super().__init__() self.message = message self.detail = detail def handle(self, req): - return [skelfor(req).message(self.message, self.detail)] + return [skelfor(req).message(self.message, self.detail).encode("utf-8")] class httperror(usererror): def __init__(self, status, message = None, detail = None): @@ -60,13 +60,24 @@ 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) - super(httperror, self).handle(req) + return super().handle(req) class notfound(httperror): def __init__(self): - super(notfound, self).__init__(404) + return super().__init__(404) + +class redirect(dispatch.restart): + def __init__(self, url, status = 303): + super().__init__() + self.url = url + self.status = status + + def handle(self, req): + req.status(self.status, "Redirect") + req.ohead["Location"] = proto.appendurl(proto.requrl(req), self.url) + return []