def __iter__(self):
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
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
while len(self.buf) < ra:
ret = self.bk.read(ra - len(self.buf))
if ret == b"":
- raise IOError("Unexpected EOF")
+ raise shortinput()
self.buf.extend(ret)
self.rb += len(ret)
ret = bytes(self.buf[:ra])
ra = min(ra, 1024)
ret = self.bk.read(ra)
if ret == b"":
- raise IOError("Unpexpected EOF")
+ raise shortinput()
self.buf.extend(ret)
self.rb += len(ret)
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(b"")
+ 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 = io.BytesIO(b"")
+ 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_":
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)