MCPcopy
hub / github.com/scrapy/scrapy / send_catch_log

Function send_catch_log

scrapy/utils/signal.py:36–75  ·  view source on GitHub ↗

Like ``pydispatcher.robust.sendRobust()`` but it also logs errors and returns Failures instead of exceptions.

(
    signal: TypingAny = Any,
    sender: TypingAny = Anonymous,
    *arguments: TypingAny,
    **named: TypingAny,
)

Source from the content-addressed store, hash-verified

34
35
36def send_catch_log(
37 signal: TypingAny = Any,
38 sender: TypingAny = Anonymous,
39 *arguments: TypingAny,
40 **named: TypingAny,
41) -> list[tuple[TypingAny, TypingAny]]:
42 """Like ``pydispatcher.robust.sendRobust()`` but it also logs errors and returns
43 Failures instead of exceptions.
44 """
45 dont_log = named.pop("dont_log", ())
46 dont_log = tuple(dont_log) if isinstance(dont_log, Sequence) else (dont_log,)
47 dont_log += (StopDownload,)
48 spider = named.get("spider")
49 responses: list[tuple[TypingAny, TypingAny]] = []
50 for receiver in liveReceivers(getAllReceivers(sender, signal)):
51 result: TypingAny
52 try:
53 response = robustApply(
54 receiver, *arguments, signal=signal, sender=sender, **named
55 )
56 if isinstance(response, Deferred):
57 logger.error(
58 "Cannot return deferreds from signal handler: %(receiver)s",
59 {"receiver": receiver},
60 extra={"spider": spider},
61 )
62 except dont_log:
63 result = Failure()
64 except Exception:
65 result = Failure()
66 logger.error(
67 "Error caught on signal handler: %(receiver)s",
68 {"receiver": receiver},
69 exc_info=True,
70 extra={"spider": spider},
71 )
72 else:
73 result = response
74 responses.append((receiver, result))
75 return responses
76
77
78def send_catch_log_deferred(

Callers 2

_get_resultMethod · 0.90

Calls 3

errorMethod · 0.80
popMethod · 0.45
getMethod · 0.45

Tested by 2

_get_resultMethod · 0.72