Merge branch 'master' into jython
authorFredrik Tolf <fredrik@dolda2000.com>
Wed, 19 Dec 2012 05:24:35 +0000 (06:24 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Wed, 19 Dec 2012 05:24:35 +0000 (06:24 +0100)
Conflicts:
wrw/req.py

wrw/proto.py
wrw/req.py

index b1f0ab3..8474b3a 100644 (file)
@@ -133,16 +133,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 = ""
index b65a0b9..fbe732b 100644 (file)
@@ -140,15 +140,20 @@ class origrequest(request):
         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_":