MCPcopy
hub / github.com/urllib3/urllib3 / readinto

Method readinto

src/urllib3/contrib/emscripten/fetch.py:153–197  ·  view source on GitHub ↗
(self, byte_obj: Buffer)

Source from the content-addressed store, hash-verified

151 return False
152
153 def readinto(self, byte_obj: Buffer) -> int:
154 if not self.int_buffer:
155 raise _StreamingError(
156 "No buffer for stream in _ReadStream.readinto",
157 request=self.request,
158 response=None,
159 )
160 if self.read_len == 0:
161 # wait for the worker to send something
162 js.Atomics.store(self.int_buffer, 0, ERROR_TIMEOUT)
163 self.worker.postMessage(_obj_from_dict({"getMore": self.connection_id}))
164 if (
165 js.Atomics.wait(self.int_buffer, 0, ERROR_TIMEOUT, self.timeout)
166 == "timed-out"
167 ):
168 raise _TimeoutError
169 data_len = self.int_buffer[0]
170 if data_len > 0:
171 self.read_len = data_len
172 self.read_pos = 0
173 elif data_len == ERROR_EXCEPTION:
174 string_len = self.int_buffer[1]
175 # decode the error string
176 js_decoder = js.TextDecoder.new()
177 json_str = js_decoder.decode(self.byte_buffer.slice(0, string_len))
178 raise _StreamingError(
179 f"Exception thrown in fetch: {json_str}",
180 request=self.request,
181 response=None,
182 )
183 else:
184 # EOF, free the buffers and return zero
185 # and free the request
186 self.is_live = False
187 self.close()
188 return 0
189 # copy from int32array to python bytes
190 ret_length = min(self.read_len, len(memoryview(byte_obj)))
191 subarray = self.byte_buffer.subarray(
192 self.read_pos, self.read_pos + ret_length
193 ).to_py()
194 memoryview(byte_obj)[0:ret_length] = subarray
195 self.read_len -= ret_length
196 self.read_pos += ret_length
197 return ret_length
198
199
200class _StreamingFetcher:

Callers

nothing calls this directly

Calls 4

closeMethod · 0.95
_StreamingErrorClass · 0.85
_obj_from_dictFunction · 0.85
newMethod · 0.80

Tested by

no test coverage detected