From: Fredrik Tolf Date: Wed, 19 Dec 2012 05:24:35 +0000 (+0100) Subject: Merge branch 'master' into jython X-Git-Url: http://dolda2000.com/gitweb/?p=wrw.git;a=commitdiff_plain;h=809f0edc1d621010d0cf62ced892f13ee24fde8e;hp=c7cc3ff342419755855aa93f165920d4f0107aac Merge branch 'master' into jython Conflicts: wrw/req.py --- diff --git a/wrw/proto.py b/wrw/proto.py index b1f0ab3..8474b3a 100644 --- a/wrw/proto.py +++ b/wrw/proto.py @@ -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 = "" diff --git a/wrw/req.py b/wrw/req.py index b65a0b9..fbe732b 100644 --- a/wrw/req.py +++ b/wrw/req.py @@ -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_":