mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Refactored sizing in body readers.
This commit is contained in:
parent
c55d367317
commit
37e909767a
@ -19,27 +19,22 @@ class ChunkedReader(object):
|
|||||||
self.parser = self.parse_chunked(unreader)
|
self.parser = self.parse_chunked(unreader)
|
||||||
self.buf = StringIO()
|
self.buf = StringIO()
|
||||||
|
|
||||||
def read(self, size=None):
|
def read(self, size):
|
||||||
|
if not isinstance(size, (int, long)):
|
||||||
|
raise TypeError("size must be an integral type")
|
||||||
|
if size <= 0:
|
||||||
|
raise ValueError("Size must be positive.")
|
||||||
if size == 0:
|
if size == 0:
|
||||||
return ""
|
return ""
|
||||||
if size < 0:
|
|
||||||
size = None
|
|
||||||
|
|
||||||
if not self.parser:
|
if self.parser:
|
||||||
return self.buf.getvalue()
|
while self.buf.tell() < size:
|
||||||
|
try:
|
||||||
|
self.buf.write(self.parser.next())
|
||||||
|
except StopIteration:
|
||||||
|
self.parser = None
|
||||||
|
break
|
||||||
|
|
||||||
while size is None or self.buf.tell() < size:
|
|
||||||
try:
|
|
||||||
self.buf.write(self.parser.next())
|
|
||||||
except StopIteration:
|
|
||||||
self.parser = None
|
|
||||||
break
|
|
||||||
|
|
||||||
if size is None or self.buf.tell() < size:
|
|
||||||
ret = self.buf.getvalue()
|
|
||||||
self.buf.truncate(0)
|
|
||||||
return ret
|
|
||||||
|
|
||||||
data = self.buf.getvalue()
|
data = self.buf.getvalue()
|
||||||
ret, rest = data[:size], data[size:]
|
ret, rest = data[:size], data[size:]
|
||||||
self.buf.truncate(0)
|
self.buf.truncate(0)
|
||||||
@ -115,14 +110,15 @@ class LengthReader(object):
|
|||||||
self.unreader = unreader
|
self.unreader = unreader
|
||||||
self.length = length
|
self.length = length
|
||||||
|
|
||||||
def read(self, size=None):
|
def read(self, size):
|
||||||
if size is not None and not isinstance(size, (int, long)):
|
if not isinstance(size, (int, long)):
|
||||||
raise TypeError("size must be an integral type")
|
raise TypeError("size must be an integral type")
|
||||||
|
if size < 0:
|
||||||
if size == 0 or self.length <= 0:
|
raise ValueError("Size must be positive.")
|
||||||
|
if size == 0:
|
||||||
return ""
|
return ""
|
||||||
if size < 0 or size is None:
|
size = min(self.length, size)
|
||||||
size = self.length
|
print "READING: %s of %d" % (size, self.length)
|
||||||
|
|
||||||
buf = StringIO()
|
buf = StringIO()
|
||||||
data = self.unreader.read()
|
data = self.unreader.read()
|
||||||
@ -144,26 +140,28 @@ class EOFReader(object):
|
|||||||
self.buf = StringIO()
|
self.buf = StringIO()
|
||||||
self.finished = False
|
self.finished = False
|
||||||
|
|
||||||
def read(self, size=None):
|
def read(self, size):
|
||||||
if size == 0 or self.finished:
|
if not isinstance(size, (int, long)):
|
||||||
return ""
|
raise TypeError("size must be an integral type")
|
||||||
if size < 0:
|
if size < 0:
|
||||||
size = None
|
raise ValueError("Size must be positive.")
|
||||||
|
if size == 0:
|
||||||
|
return ""
|
||||||
|
|
||||||
data = self.unreader.read()
|
data = self.unreader.read()
|
||||||
while data:
|
while data:
|
||||||
self.buf.write(data)
|
self.buf.write(data)
|
||||||
if size is not None and self.buf.tell() > size:
|
if self.buf.tell() > size:
|
||||||
data = self.buf.getvalue()
|
break
|
||||||
ret, rest = data[:size], data[size:]
|
|
||||||
self.buf.truncate(0)
|
|
||||||
self.buf.write(rest)
|
|
||||||
return ret
|
|
||||||
data = self.unreader.read()
|
data = self.unreader.read()
|
||||||
|
|
||||||
self.finished = True
|
if not data:
|
||||||
ret = self.buf.getvalue()
|
self.finished = True
|
||||||
|
|
||||||
|
data = self.buf.getvalue()
|
||||||
|
ret, rest = data[:size], data[size:]
|
||||||
self.buf.truncate(0)
|
self.buf.truncate(0)
|
||||||
|
self.buf.write(rest)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
class Body(object):
|
class Body(object):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user