(self)
| 199 | |
| 200 | class _StreamingFetcher: |
| 201 | def __init__(self) -> None: |
| 202 | # make web-worker and data buffer on startup |
| 203 | self.streaming_ready = False |
| 204 | streaming_worker_code = ( |
| 205 | files(__package__) |
| 206 | .joinpath("emscripten_fetch_worker.js") |
| 207 | .read_text(encoding="utf-8") |
| 208 | ) |
| 209 | js_data_blob = js.Blob.new( |
| 210 | to_js([streaming_worker_code], create_pyproxies=False), |
| 211 | _obj_from_dict({"type": "application/javascript"}), |
| 212 | ) |
| 213 | |
| 214 | def promise_resolver(js_resolve_fn: JsProxy, js_reject_fn: JsProxy) -> None: |
| 215 | def onMsg(e: JsProxy) -> None: |
| 216 | self.streaming_ready = True |
| 217 | js_resolve_fn(e) |
| 218 | |
| 219 | def onErr(e: JsProxy) -> None: |
| 220 | js_reject_fn(e) # Defensive: never happens in ci |
| 221 | |
| 222 | self.js_worker.onmessage = onMsg |
| 223 | self.js_worker.onerror = onErr |
| 224 | |
| 225 | js_data_url = js.URL.createObjectURL(js_data_blob) |
| 226 | self.js_worker = js.globalThis.Worker.new(js_data_url) |
| 227 | self.js_worker_ready_promise = js.globalThis.Promise.new(promise_resolver) |
| 228 | |
| 229 | def send(self, request: EmscriptenRequest) -> EmscriptenResponse: |
| 230 | headers = { |
nothing calls this directly
no test coverage detected