(
self, txresponse: TxResponse, request: Request
)
| 507 | return headers |
| 508 | |
| 509 | def _cb_bodyready( |
| 510 | self, txresponse: TxResponse, request: Request |
| 511 | ) -> _ResultT | Deferred[_ResultT]: |
| 512 | if stop_download := check_stop_download( |
| 513 | signals.headers_received, |
| 514 | self._crawler, |
| 515 | request, |
| 516 | headers=self._headers_from_twisted_response(txresponse), |
| 517 | body_length=txresponse.length, |
| 518 | ): |
| 519 | txresponse._transport.stopProducing() |
| 520 | txresponse._transport.loseConnection() |
| 521 | return { |
| 522 | "txresponse": txresponse, |
| 523 | "stop_download": stop_download, |
| 524 | } |
| 525 | |
| 526 | # deliverBody hangs for responses without body |
| 527 | if cast("int", txresponse.length) == 0: |
| 528 | return { |
| 529 | "txresponse": txresponse, |
| 530 | } |
| 531 | |
| 532 | maxsize = request.meta.get("download_maxsize", self._maxsize) |
| 533 | warnsize = request.meta.get("download_warnsize", self._warnsize) |
| 534 | expected_size = ( |
| 535 | cast("int", txresponse.length) |
| 536 | if txresponse.length != UNKNOWN_LENGTH |
| 537 | else -1 |
| 538 | ) |
| 539 | fail_on_dataloss = request.meta.get( |
| 540 | "download_fail_on_dataloss", self._fail_on_dataloss |
| 541 | ) |
| 542 | |
| 543 | if maxsize and expected_size > maxsize: |
| 544 | warning_msg = get_maxsize_msg( |
| 545 | expected_size, maxsize, request, expected=True |
| 546 | ) |
| 547 | logger.warning(warning_msg) |
| 548 | txresponse._transport.loseConnection() |
| 549 | raise DownloadCancelledError(warning_msg) |
| 550 | |
| 551 | if warnsize and expected_size > warnsize: |
| 552 | logger.warning( |
| 553 | get_warnsize_msg(expected_size, warnsize, request, expected=True) |
| 554 | ) |
| 555 | |
| 556 | d: Deferred[_ResultT] = Deferred(partial(self._cancel, txresponse=txresponse)) |
| 557 | txresponse.deliverBody( |
| 558 | _ResponseReader( |
| 559 | finished=d, |
| 560 | txresponse=txresponse, |
| 561 | request=request, |
| 562 | maxsize=maxsize, |
| 563 | warnsize=warnsize, |
| 564 | fail_on_dataloss=fail_on_dataloss, |
| 565 | crawler=self._crawler, |
| 566 | tls_verbose_logging=self._tls_verbose_logging, |
nothing calls this directly
no test coverage detected