X-Git-Url: http://dolda2000.com/gitweb/?p=wrw.git;a=blobdiff_plain;f=wrw%2Freq.py;h=010e907a5d203c86281f0a61e298498a8504518b;hp=5fbc2fe28ad65a3a88b440a374ebe0e5de20217f;hb=d30502c8fe37bedb30ad9f3ddecd5191c5b077fb;hpb=381b2eefcd81c8b717df62bad056c326d61b4b52 diff --git a/wrw/req.py b/wrw/req.py index 5fbc2fe..010e907 100644 --- a/wrw/req.py +++ b/wrw/req.py @@ -19,9 +19,9 @@ class headdict(object): del self.dict[key.lower()] def __iter__(self): - return iter((list[0] for list in self.dict.itervalues())) + return iter((list[0] for list in self.dict.values())) - def get(self, key, default = ""): + def get(self, key, default=""): if key.lower() in self.dict: return self.dict[key.lower()][1] return default @@ -51,6 +51,10 @@ def fixcase(str): i += 1 return str +class shortinput(IOError, EOFError): + def __init__(self): + super().__init__("Unexpected EOF") + class limitreader(object): def __init__(self, back, limit): self.bk = back @@ -67,29 +71,29 @@ class limitreader(object): ra = min(ra, size) while len(self.buf) < ra: ret = self.bk.read(ra - len(self.buf)) - if ret == "": - raise IOError("Unexpected EOF") + if ret == b"": + raise shortinput() self.buf.extend(ret) self.rb += len(ret) - ret = str(self.buf[:ra]) + ret = bytes(self.buf[:ra]) self.buf = self.buf[ra:] return ret def readline(self, size=-1): off = 0 while True: - p = self.buf.find('\n', off) + p = self.buf.find(b'\n', off) if p >= 0: - ret = str(self.buf[:p + 1]) + ret = bytes(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 = bytes(self.buf[:size]) self.buf = self.buf[size:] return ret if self.rb == self.limit: - ret = str(self.buf) + ret = bytes(self.buf) self.buf = bytearray() return ret ra = self.limit - self.rb @@ -97,8 +101,8 @@ class limitreader(object): ra = min(ra, size) ra = min(ra, 1024) ret = self.bk.read(ra) - if ret == "": - raise IOError("Unpexpected EOF") + if ret == b"": + raise shortinput() self.buf.extend(ret) self.rb += len(ret) @@ -109,9 +113,9 @@ class limitreader(object): class lineiter(object): def __iter__(self): return self - def next(self): + def __next__(self): ret = rd.readline() - if ret == "": + if ret == b"": raise StopIteration() return ret return lineiter() @@ -148,7 +152,7 @@ class origrequest(request): self.input = limitreader(env["wsgi.input"], int(clen)) else: # XXX: What to do? - self.input = io.BytesIO("") + self.input = io.BytesIO(b"") else: # Assume input is chunked and read until ordinary EOF. self.input = env["wsgi.input"] @@ -230,6 +234,7 @@ class copyrequest(request): self.https = p.https self.ihead = p.ihead self.ohead = p.ohead + self.input = p.input def status(self, code, msg): return self.parent.status(code, msg)