mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
backport from restkit. Fix readline in wsgi.input
This commit is contained in:
parent
1366b2b288
commit
d832391eee
@ -23,6 +23,6 @@ else:
|
|||||||
minor_tag = ""
|
minor_tag = ""
|
||||||
|
|
||||||
|
|
||||||
version_info = (0, 11, "1%s" % minor_tag)
|
version_info = (0, 11, "2%s" % minor_tag)
|
||||||
__version__ = ".".join(map(str, version_info))
|
__version__ = ".".join(map(str, version_info))
|
||||||
SERVER_SOFTWARE = "gunicorn/%s" % __version__
|
SERVER_SOFTWARE = "gunicorn/%s" % __version__
|
||||||
|
|||||||
@ -149,9 +149,16 @@ class EOFReader(object):
|
|||||||
raise TypeError("size must be an integral type")
|
raise TypeError("size must be an integral type")
|
||||||
if size < 0:
|
if size < 0:
|
||||||
raise ValueError("Size must be positive.")
|
raise ValueError("Size must be positive.")
|
||||||
if size == 0 or self.finished:
|
if size == 0:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
if self.finished:
|
||||||
|
data = self.buf.getvalue()
|
||||||
|
ret, rest = data[:size], data[size:]
|
||||||
|
self.buf.truncate(0)
|
||||||
|
self.buf.write(rest)
|
||||||
|
return ret
|
||||||
|
|
||||||
data = self.unreader.read()
|
data = self.unreader.read()
|
||||||
while data:
|
while data:
|
||||||
self.buf.write(data)
|
self.buf.write(data)
|
||||||
@ -161,7 +168,6 @@ class EOFReader(object):
|
|||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
self.finished = True
|
self.finished = True
|
||||||
return self.buf.getvalue()
|
|
||||||
|
|
||||||
data = self.buf.getvalue()
|
data = self.buf.getvalue()
|
||||||
ret, rest = data[:size], data[size:]
|
ret, rest = data[:size], data[size:]
|
||||||
@ -221,34 +227,26 @@ class Body(object):
|
|||||||
if size == 0:
|
if size == 0:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
idx = self.buf.getvalue().find("\n")
|
line = self.buf.getvalue()
|
||||||
while idx < 0:
|
idx = line.find("\n")
|
||||||
data = self.reader.read(1024)
|
if idx >= 0:
|
||||||
if not len(data):
|
ret = line[:idx+1]
|
||||||
break
|
self.buf.truncate(0)
|
||||||
self.buf.write(data)
|
self.buf.write(line[idx+1:])
|
||||||
idx = self.buf.getvalue().find("\n")
|
return ret
|
||||||
if size < self.buf.tell():
|
|
||||||
break
|
|
||||||
|
|
||||||
# If we didn't find it, and we got here, we've
|
|
||||||
# exceeded size or run out of data.
|
|
||||||
if idx < 0:
|
|
||||||
rlen = min(size, self.buf.tell())
|
|
||||||
else:
|
|
||||||
rlen = idx + 1
|
|
||||||
|
|
||||||
# If rlen is beyond our size threshold, trim back
|
|
||||||
if rlen > size:
|
|
||||||
rlen = size
|
|
||||||
|
|
||||||
data = self.buf.getvalue()
|
|
||||||
ret, rest = data[:rlen], data[rlen:]
|
|
||||||
|
|
||||||
self.buf.truncate(0)
|
self.buf.truncate(0)
|
||||||
self.buf.write(rest)
|
ch = ""
|
||||||
return ret
|
buf = [line]
|
||||||
|
lsize = len(line)
|
||||||
|
while lsize < size and ch != "\n":
|
||||||
|
ch = self.reader.read(1)
|
||||||
|
if not len(ch):
|
||||||
|
break
|
||||||
|
lsize += 1
|
||||||
|
buf.append(ch)
|
||||||
|
return "".join(buf)
|
||||||
|
|
||||||
def readlines(self, size=None):
|
def readlines(self, size=None):
|
||||||
ret = []
|
ret = []
|
||||||
data = self.read()
|
data = self.read()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user