MCPcopy
hub / github.com/scrapy/scrapy / call_spider_async

Method call_spider_async

scrapy/core/scraper.py:305–346  ·  view source on GitHub ↗

Call the request callback or errback with the response or failure. .. versionadded:: 2.13

(
        self, result: Response | Failure, request: Request
    )

Source from the content-addressed store, hash-verified

303 return deferred_from_coro(self.call_spider_async(result, request))
304
305 async def call_spider_async(
306 self, result: Response | Failure, request: Request
307 ) -> Iterable[Any] | AsyncIterator[Any]:
308 """Call the request callback or errback with the response or failure.
309
310 .. versionadded:: 2.13
311 """
312 await _defer_sleep_async()
313 assert self.crawler.spider
314 if isinstance(result, Response):
315 if getattr(result, "request", None) is None:
316 result.request = request
317 assert result.request
318 callback = result.request.callback or self.crawler.spider._parse
319 warn_on_generator_with_return_value(self.crawler.spider, callback)
320 output = callback(result, **result.request.cb_kwargs)
321 if isinstance(output, Deferred):
322 warnings.warn(
323 f"{callback} returned a Deferred."
324 f" Returning Deferreds from spider callbacks is deprecated.",
325 ScrapyDeprecationWarning,
326 stacklevel=2,
327 )
328 else: # result is a Failure
329 # TODO: properly type adding this attribute to a Failure
330 result.request = request # type: ignore[attr-defined]
331 if not request.errback:
332 result.raiseException()
333 warn_on_generator_with_return_value(self.crawler.spider, request.errback)
334 output = request.errback(result)
335 if isinstance(output, Failure):
336 output.raiseException()
337 # else the errback returned actual output (like a callback),
338 # which needs to be passed to iterate_spider_output()
339 if isinstance(output, Deferred):
340 warnings.warn(
341 f"{request.errback} returned a Deferred."
342 f" Returning Deferreds from spider errbacks is deprecated.",
343 ScrapyDeprecationWarning,
344 stacklevel=2,
345 )
346 return await ensure_awaitable(iterate_spider_output(output))
347
348 def handle_spider_error(
349 self,

Callers 2

_scrapeMethod · 0.95
call_spiderMethod · 0.95

Calls 5

_defer_sleep_asyncFunction · 0.90
ensure_awaitableFunction · 0.90
iterate_spider_outputFunction · 0.90
errbackMethod · 0.45

Tested by

no test coverage detected