Wrap a request inside a Deferred. This function is harmful, do not use it until you know what you are doing. This returns a Deferred whose first pair of callbacks are the request callback and errback. The Deferred also triggers when the request callback/errback is executed (i.e. wh
(request: Request)
| 321 | |
| 322 | |
| 323 | def _request_deferred(request: Request) -> Deferred[Any]: |
| 324 | """Wrap a request inside a Deferred. |
| 325 | |
| 326 | This function is harmful, do not use it until you know what you are doing. |
| 327 | |
| 328 | This returns a Deferred whose first pair of callbacks are the request |
| 329 | callback and errback. The Deferred also triggers when the request |
| 330 | callback/errback is executed (i.e. when the request is downloaded) |
| 331 | |
| 332 | WARNING: Do not call request.replace() until after the deferred is called. |
| 333 | """ |
| 334 | request_callback = request.callback |
| 335 | request_errback = request.errback |
| 336 | |
| 337 | def _restore_callbacks(result: Any) -> Any: |
| 338 | request.callback = request_callback |
| 339 | request.errback = request_errback |
| 340 | return result |
| 341 | |
| 342 | d: Deferred[Any] = Deferred() |
| 343 | d.addBoth(_restore_callbacks) |
| 344 | if request.callback: |
| 345 | d.addCallback(request.callback) |
| 346 | if request.errback: |
| 347 | d.addErrback(request.errback) |
| 348 | |
| 349 | request.callback, request.errback = d.callback, d.errback |
| 350 | return d |