+def appendurl(url, other):
+ if "://" in other:
+ return other
+ proto, host, local, query = parseurl(url)
+ if len(other) > 0 and other[0] == '/':
+ return consurl(proto, host, other)
+ else:
+ p = local.rfind('/')
+ return consurl(proto, host, local[:p + 1] + other)
+
+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 siteurl(req) + req.uri[1:]
+
+def parstring(pars={}, **augment):