Added a simpleerror function.
[wrw.git] / wrw / proto.py
index 3d8b96e..4cf1951 100644 (file)
@@ -1,3 +1,5 @@
+import time
+
 statusinfo = {
     400: ("Bad Request", "Invalid HTTP request."),
     401: ("Unauthorized", "Authentication must be provided for the requested resource."),
@@ -83,6 +85,22 @@ def htmlq(html):
             ret += c
     return ret
 
+def simpleerror(env, startreq, code, title, msg):
+    buf = """<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
+<head>
+<title>%s</title>
+</head>
+<body>
+<h1>%s</h1>
+<p>%s</p>
+</body>
+</html>
+""" % (title, title, htmlq(msg))
+    startreq("%i %s" % (code, title), [("Content-Type", "text/html"), ("Content-Length", str(len(buf)))])
+    return [buf]
+
 def urlq(url):
     ret = ""
     for c in url:
@@ -131,16 +149,26 @@ def appendurl(url, other):
         p = local.rfind('/')
         return consurl(proto, host, local[:p + 1] + other)
 
-def requrl(req):
+def siteurl(req):
     host = req.ihead.get("Host", None)
     if host is None:
         raise Exception("Could not reconstruct URL because no Host header was sent")
     proto = "http"
     if req.https:
         proto = "https"
+    return "%s://%s/" % (proto, host)
+
+def scripturl(req):
+    s = siteurl(req)
+    if req.uriname[0] != '/':
+        raise Exception("Malformed local part when reconstructing URL")
+    return siteurl(req) + req.uriname[1:]
+
+def requrl(req):
+    s = siteurl(req)
     if req.uri[0] != '/':
         raise Exception("Malformed local part when reconstructing URL")
-    return "%s://%s%s" % (proto, host, req.uri)
+    return siteurl(req) + req.uri[1:]
 
 def parstring(pars={}, **augment):
     buf = ""