(
signal: TypingAny,
sender: TypingAny,
*arguments: TypingAny,
**named: TypingAny,
)
| 96 | |
| 97 | @inlineCallbacks |
| 98 | def _send_catch_log_deferred( |
| 99 | signal: TypingAny, |
| 100 | sender: TypingAny, |
| 101 | *arguments: TypingAny, |
| 102 | **named: TypingAny, |
| 103 | ) -> Generator[Deferred[TypingAny], TypingAny, list[tuple[TypingAny, TypingAny]]]: |
| 104 | def logerror(failure: Failure, recv: TypingAny) -> Failure: |
| 105 | if dont_log is None or not isinstance(failure.value, dont_log): |
| 106 | logger.error( |
| 107 | "Error caught on signal handler: %(receiver)s", |
| 108 | {"receiver": recv}, |
| 109 | exc_info=failure_to_exc_info(failure), |
| 110 | extra={"spider": spider}, |
| 111 | ) |
| 112 | return failure |
| 113 | |
| 114 | dont_log = named.pop("dont_log", None) |
| 115 | spider = named.get("spider") |
| 116 | dfds: list[Deferred[tuple[TypingAny, TypingAny]]] = [] |
| 117 | for receiver in liveReceivers(getAllReceivers(sender, signal)): |
| 118 | d: Deferred[TypingAny] = _maybeDeferred_coro( |
| 119 | robustApply, |
| 120 | True, |
| 121 | receiver, |
| 122 | *arguments, |
| 123 | signal=signal, |
| 124 | sender=sender, |
| 125 | **named, |
| 126 | ) |
| 127 | d.addErrback(logerror, receiver) |
| 128 | # TODO https://pylint.readthedocs.io/en/latest/user_guide/messages/warning/cell-var-from-loop.html |
| 129 | d2: Deferred[tuple[TypingAny, TypingAny]] = d.addBoth( |
| 130 | lambda result: ( |
| 131 | receiver, # pylint: disable=cell-var-from-loop # noqa: B023 |
| 132 | result, |
| 133 | ) |
| 134 | ) |
| 135 | dfds.append(d2) |
| 136 | |
| 137 | results = yield DeferredList(dfds) |
| 138 | return [result[1] for result in results] |
| 139 | |
| 140 | |
| 141 | async def send_catch_log_async( |
no test coverage detected