X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fresp.py;h=ebd98ecbee1154ec4ca36c1b64a9cf154cc9240e;hb=a9a78095b1696f56946abfc7c284f86a21fdcc2d;hp=4840799fb65befc6ad4fa3213e0b4d21fffa4317;hpb=a878e812794ab36d47721a680a1bea5f4e1bcc45;p=wrw.git diff --git a/wrw/resp.py b/wrw/resp.py index 4840799..ebd98ec 100644 --- a/wrw/resp.py +++ b/wrw/resp.py @@ -1,31 +1,21 @@ from . import dispatch, proto, env +from .sp import xhtml +h = xhtml.cons() __all__ = ["skeleton", "skelfor", "setskel", "usererror"] class skeleton(object): - def page(self, title, content): - return """ - - - -%s - - -%s - -""" % (self.head(title), content) - - def head(self, title): - return """%s\n%s""" % (title, self.style()) - - def style(self): - return "" - - def error(self, message, detail): - return self.page(message, """

%s

\n

%s

\n""" % (message, detail)) - - def message(self, message, detail): - return self.page(message, """

%s

\n

%s

\n""" % (message, detail)) + def page(self, req, title, *content): + return xhtml.forreq(req, h.html(self.head(req, title), h.body(*content))) + + def head(self, req, title): + return xhtml.head(title=title) + + def error(self, req, message, *detail): + return self.page(req, message, h.h1(message), h.p(*detail)) + + def message(self, req, message, *detail): + return self.page(req, message, h.h1(message), h.p(*detail)) defskel = env.var(skeleton()) @@ -37,30 +27,30 @@ def setskel(req, skel): req.item(getskel)[0] = skel class usererror(dispatch.restart): - def __init__(self, message, detail): + def __init__(self, message, *detail): super().__init__() self.message = message self.detail = detail def handle(self, req): - return [skelfor(req).error(self.message, self.detail).encode("utf-8")] + return skelfor(req).error(req, self.message, *self.detail) class message(dispatch.restart): - def __init__(self, message, detail): + def __init__(self, message, *detail): super().__init__() self.message = message self.detail = detail def handle(self, req): - return [skelfor(req).message(self.message, self.detail).encode("utf-8")] + return skelfor(req).error(req, self.message, *self.detail) class httperror(usererror): def __init__(self, status, message = None, detail = None): if message is None: message = proto.statusinfo[status][0] if detail is None: - detail = proto.statusinfo[status][1] - super().__init__(message, detail) + detail = (proto.statusinfo[status][1],) + super().__init__(message, *detail) self.status = status def handle(self, req): @@ -80,4 +70,11 @@ class redirect(dispatch.restart): def handle(self, req): req.status(self.status, "Redirect") req.ohead["Location"] = proto.appendurl(proto.requrl(req), self.url) + req.ohead["Content-Length"] = 0 + return [] + +class unmodified(dispatch.restart): + def handle(self, req): + req.status(304, "Not Modified") + req.ohead["Content-Length"] = "0" return []