Use the environment to configure session and skel defaults as well.
[wrw.git] / wrw / resp.py
index 030d5ee..3514616 100644 (file)
@@ -1,4 +1,4 @@
-import dispatch, proto
+import dispatch, proto, env
 
 __all__ = ["skeleton", "skelfor", "setskel", "usererror"]
 
@@ -15,7 +15,7 @@ class skeleton(object):
 </body>
 </html>""" % (self.head(title), content)
 
-    def skel(self, title):
+    def head(self, title):
         return """<title>%s</title>\n%s""" % (title, self.style())
 
     def style(self):
@@ -27,10 +27,10 @@ class skeleton(object):
     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):
@@ -46,9 +46,9 @@ class usererror(dispatch.restart):
         return [skelfor(req).error(self.message, self.detail)]
 
 class message(dispatch.restart):
-    def __init__(self, message, detail):
+    def __init__(self, msg, detail):
         super(message, self).__init__()
-        self.message = message
+        self.message = msg
         self.detail = detail
 
     def handle(self, req):
@@ -65,8 +65,19 @@ class httperror(usererror):
 
     def handle(self, req):
         req.status(self.status, self.message)
-        super(httperror, self).handle(req)
+        return super(httperror, self).handle(req)
 
 class notfound(httperror):
     def __init__(self):
-        super(notfound, self).__init__(404)
+        return super(notfound, self).__init__(404)
+
+class redirect(dispatch.restart):
+    def __init__(self, url, status = 303):
+        super(redirect, self).__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 []