MCPcopy
hub / github.com/urllib3/urllib3 / send

Method send

src/urllib3/contrib/emscripten/fetch.py:229–299  ·  view source on GitHub ↗
(self, request: EmscriptenRequest)

Source from the content-addressed store, hash-verified

227 self.js_worker_ready_promise = js.globalThis.Promise.new(promise_resolver)
228
229 def send(self, request: EmscriptenRequest) -> EmscriptenResponse:
230 headers = {
231 k: v for k, v in request.headers.items() if k not in HEADERS_TO_IGNORE
232 }
233
234 body = request.body
235 fetch_data = {"headers": headers, "body": to_js(body), "method": request.method}
236 # start the request off in the worker
237 timeout = int(1000 * request.timeout) if request.timeout > 0 else None
238 js_shared_buffer = js.SharedArrayBuffer.new(1048576)
239 js_int_buffer = js.Int32Array.new(js_shared_buffer)
240 js_byte_buffer = js.Uint8Array.new(js_shared_buffer, 8)
241
242 js.Atomics.store(js_int_buffer, 0, ERROR_TIMEOUT)
243 js.Atomics.notify(js_int_buffer, 0)
244 js_absolute_url = js.URL.new(request.url, js.location).href
245 self.js_worker.postMessage(
246 _obj_from_dict(
247 {
248 "buffer": js_shared_buffer,
249 "url": js_absolute_url,
250 "fetchParams": fetch_data,
251 }
252 )
253 )
254 # wait for the worker to send something
255 js.Atomics.wait(js_int_buffer, 0, ERROR_TIMEOUT, timeout)
256 if js_int_buffer[0] == ERROR_TIMEOUT:
257 raise _TimeoutError(
258 "Timeout connecting to streaming request",
259 request=request,
260 response=None,
261 )
262 elif js_int_buffer[0] == SUCCESS_HEADER:
263 # got response
264 # header length is in second int of intBuffer
265 string_len = js_int_buffer[1]
266 # decode the rest to a JSON string
267 js_decoder = js.TextDecoder.new()
268 # this does a copy (the slice) because decode can't work on shared array
269 # for some silly reason
270 json_str = js_decoder.decode(js_byte_buffer.slice(0, string_len))
271 # get it as an object
272 response_obj = json.loads(json_str)
273 return EmscriptenResponse(
274 request=request,
275 status_code=response_obj["status"],
276 headers=response_obj["headers"],
277 body=_ReadStream(
278 js_int_buffer,
279 js_byte_buffer,
280 request.timeout,
281 self.js_worker,
282 response_obj["connectionID"],
283 request,
284 ),
285 )
286 elif js_int_buffer[0] == ERROR_EXCEPTION:

Callers 3

_send_until_doneMethod · 0.45
send_streaming_requestFunction · 0.45
send_requestFunction · 0.45

Calls 7

_obj_from_dictFunction · 0.85
_TimeoutErrorClass · 0.85
EmscriptenResponseClass · 0.85
_ReadStreamClass · 0.85
_StreamingErrorClass · 0.85
itemsMethod · 0.80
newMethod · 0.80

Tested by

no test coverage detected