MCPcopy
hub / github.com/urllib3/urllib3 / _run_sync_with_timeout

Function _run_sync_with_timeout

src/urllib3/contrib/emscripten/fetch.py:626–677  ·  view source on GitHub ↗

Await a JavaScript promise synchronously with a timeout which is implemented via the AbortController :param promise: Javascript promise to await :param timeout: Timeout in seconds :param js_abort_controller: A JavaScript AbortController object, used on

(
    promise: Any,
    timeout: float,
    js_abort_controller: Any,
    request: EmscriptenRequest | None,
    response: EmscriptenResponse | None,
)

Source from the content-addressed store, hash-verified

624
625
626def _run_sync_with_timeout(
627 promise: Any,
628 timeout: float,
629 js_abort_controller: Any,
630 request: EmscriptenRequest | None,
631 response: EmscriptenResponse | None,
632) -> Any:
633 """
634 Await a JavaScript promise synchronously with a timeout which is implemented
635 via the AbortController
636
637 :param promise:
638 Javascript promise to await
639
640 :param timeout:
641 Timeout in seconds
642
643 :param js_abort_controller:
644 A JavaScript AbortController object, used on timeout
645
646 :param request:
647 The request being handled
648
649 :param response:
650 The response being handled (if it exists yet)
651
652 :raises _TimeoutError: If the request times out
653 :raises _RequestError: If the request raises a JavaScript exception
654
655 :return: The result of awaiting the promise.
656 """
657 timer_id = None
658 if timeout > 0:
659 timer_id = js.setTimeout(
660 js_abort_controller.abort.bind(js_abort_controller), int(timeout * 1000)
661 )
662 try:
663 from pyodide.ffi import run_sync
664
665 # run_sync here uses WebAssembly JavaScript Promise Integration to
666 # suspend python until the JavaScript promise resolves.
667 return run_sync(promise)
668 except JsException as err:
669 if err.name == "AbortError":
670 raise _TimeoutError(
671 message="Request timed out", request=request, response=response
672 )
673 else:
674 raise _RequestError(message=err.message, request=request, response=response)
675 finally:
676 if timer_id is not None:
677 js.clearTimeout(timer_id)
678
679
680def has_jspi() -> bool:

Callers 2

_get_next_bufferMethod · 0.85
send_jspi_requestFunction · 0.85

Calls 2

_TimeoutErrorClass · 0.85
_RequestErrorClass · 0.85

Tested by

no test coverage detected