MCPcopy
hub / github.com/scrapy/scrapy / start_itemproc_async

Method start_itemproc_async

scrapy/core/scraper.py:480–542  ·  view source on GitHub ↗

Send *item* to the item pipelines for processing. *response* is the source of the item data. If the item does not come from response data, e.g. it was hard-coded, set it to ``None``. .. versionadded:: 2.14

(
        self, item: Any, *, response: Response | Failure | None
    )

Source from the content-addressed store, hash-verified

478 return deferred_from_coro(self.start_itemproc_async(item, response=response))
479
480 async def start_itemproc_async(
481 self, item: Any, *, response: Response | Failure | None
482 ) -> None:
483 """Send *item* to the item pipelines for processing.
484
485 *response* is the source of the item data. If the item does not come
486 from response data, e.g. it was hard-coded, set it to ``None``.
487
488 .. versionadded:: 2.14
489 """
490 assert self.slot is not None # typing
491 assert self.crawler.spider is not None # typing
492 self.slot.itemproc_size += 1
493 try:
494 if self._itemproc_has_async["process_item"]:
495 output = await self.itemproc.process_item_async(item)
496 else:
497 output = await maybe_deferred_to_future(
498 self.itemproc.process_item(item, self.crawler.spider)
499 )
500 except DropItem as ex:
501 logkws = self.logformatter.dropped(item, ex, response, self.crawler.spider)
502 if logkws is not None:
503 logger.log(
504 *logformatter_adapter(logkws), extra={"spider": self.crawler.spider}
505 )
506 await self.signals.send_catch_log_async(
507 signal=signals.item_dropped,
508 item=item,
509 response=response,
510 spider=self.crawler.spider,
511 exception=ex,
512 )
513 except Exception as ex:
514 logkws = self.logformatter.item_error(
515 item, ex, response, self.crawler.spider
516 )
517 logger.log(
518 *logformatter_adapter(logkws),
519 extra={"spider": self.crawler.spider},
520 exc_info=True,
521 )
522 await self.signals.send_catch_log_async(
523 signal=signals.item_error,
524 item=item,
525 response=response,
526 spider=self.crawler.spider,
527 failure=Failure(),
528 )
529 else:
530 logkws = self.logformatter.scraped(output, response, self.crawler.spider)
531 if logkws is not None:
532 logger.log(
533 *logformatter_adapter(logkws), extra={"spider": self.crawler.spider}
534 )
535 await self.signals.send_catch_log_async(
536 signal=signals.item_scraped,
537 item=output,

Callers 3

start_itemprocMethod · 0.95
_process_start_nextMethod · 0.80

Calls 9

maybe_deferred_to_futureFunction · 0.90
logformatter_adapterFunction · 0.90
send_catch_log_asyncMethod · 0.80
process_item_asyncMethod · 0.45
process_itemMethod · 0.45
droppedMethod · 0.45
logMethod · 0.45
item_errorMethod · 0.45
scrapedMethod · 0.45

Tested by

no test coverage detected