MCPcopy
hub / github.com/benoitc/gunicorn / Body

Class Body

gunicorn/http/body.py:186–271  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

184
185
186class Body:
187 def __init__(self, reader):
188 self.reader = reader
189 self.buf = io.BytesIO()
190
191 def __iter__(self):
192 return self
193
194 def __next__(self):
195 ret = self.readline()
196 if not ret:
197 raise StopIteration()
198 return ret
199
200 next = __next__
201
202 def getsize(self, size):
203 if size is None:
204 return sys.maxsize
205 elif not isinstance(size, int):
206 raise TypeError("size must be an integral type")
207 elif size < 0:
208 return sys.maxsize
209 return size
210
211 def read(self, size=None):
212 size = self.getsize(size)
213 if size == 0:
214 return b""
215
216 if size < self.buf.tell():
217 data = self.buf.getvalue()
218 ret, rest = data[:size], data[size:]
219 self.buf = io.BytesIO()
220 self.buf.write(rest)
221 return ret
222
223 while size > self.buf.tell():
224 data = self.reader.read(1024)
225 if not data:
226 break
227 self.buf.write(data)
228
229 data = self.buf.getvalue()
230 ret, rest = data[:size], data[size:]
231 self.buf = io.BytesIO()
232 self.buf.write(rest)
233 return ret
234
235 def readline(self, size=None):
236 size = self.getsize(size)
237 if size == 0:
238 return b""
239
240 data = self.buf.getvalue()
241 self.buf = io.BytesIO()
242
243 ret = []

Callers 9

set_body_readerMethod · 0.90
set_body_readerMethod · 0.90
set_body_readerMethod · 0.90
assert_readlineFunction · 0.90

Calls

no outgoing calls