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 = ""
self.servername = env["SERVER_NAME"]
self.https = "HTTPS" in env
self.ihead = headdict()
- self.input = None
if "CONTENT_TYPE" in env:
self.ihead["Content-Type"] = env["CONTENT_TYPE"]
- if "CONTENT_LENGTH" in env:
- clen = self.ihead["Content-Length"] = env["CONTENT_LENGTH"]
- if clen.isdigit():
- self.input = limitreader(env["wsgi.input"], int(clen))
- if self.input is None:
- self.input = StringIO.StringIO("")
+ if "CONTENT_LENGTH" in env:
+ clen = self.ihead["Content-Length"] = env["CONTENT_LENGTH"]
+ if clen.isdigit():
+ self.input = limitreader(env["wsgi.input"], int(clen))
+ else:
+ # XXX: What to do?
+ self.input = StringIO.StringIO("")
+ else:
+ # Assume input is chunked and read until ordinary EOF.
+ self.input = env["wsgi.input"]
+ else:
+ self.input = None
self.ohead = headdict()
for k, v in env.items():
if k[:5] == "HTTP_":