X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Freq.py;h=fbe732b315d2ca45026f6115a8536ba7597ff4fd;hb=809f0edc1d621010d0cf62ced892f13ee24fde8e;hp=4b9dd7139dd6064d026bdbe2b88c8e0f6092be48;hpb=609f664f0fa5b4c94614a7c038be7238c719b2f2;p=wrw.git diff --git a/wrw/req.py b/wrw/req.py index 4b9dd71..fbe732b 100644 --- a/wrw/req.py +++ b/wrw/req.py @@ -1,4 +1,4 @@ -import io +import StringIO __all__ = ["request"] @@ -56,7 +56,7 @@ class limitreader(object): self.bk = back self.limit = limit self.rb = 0 - self.buf = bytearray() + self.buf = "" def close(self): pass @@ -69,9 +69,9 @@ class limitreader(object): ret = self.bk.read(ra - len(self.buf)) if ret == "": raise IOError("Unexpected EOF") - self.buf.extend(ret) + self.buf += ret self.rb += len(ret) - ret = str(self.buf[:ra]) + ret = self.buf[:ra] self.buf = self.buf[ra:] return ret @@ -80,17 +80,17 @@ class limitreader(object): while True: p = self.buf.find('\n', off) if p >= 0: - ret = str(self.buf[:p + 1]) + ret = self.buf[:p + 1] self.buf = self.buf[p + 1:] return ret off = len(self.buf) if size >= 0 and len(self.buf) >= size: - ret = str(self.buf[:size]) + ret = self.buf[:size] self.buf = self.buf[size:] return ret if self.rb == self.limit: - ret = str(self.buf) - self.buf = bytearray() + ret = self.buf + self.buf = "" return ret ra = self.limit - self.rb if size >= 0: @@ -99,7 +99,7 @@ class limitreader(object): ret = self.bk.read(ra) if ret == "": raise IOError("Unpexpected EOF") - self.buf.extend(ret) + self.buf += ret self.rb += len(ret) def readlines(self, hint=None): @@ -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 = io.BytesIO("") + 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_":