(
self,
scrape_func: ScrapeFunc[_T],
response: Response,
request: Request,
)
| 73 | self._check_mw_method_spider_arg(process_spider_exception) |
| 74 | |
| 75 | async def _process_spider_input( |
| 76 | self, |
| 77 | scrape_func: ScrapeFunc[_T], |
| 78 | response: Response, |
| 79 | request: Request, |
| 80 | ) -> Iterable[_T] | AsyncIterator[_T]: |
| 81 | for method in self.methods["process_spider_input"]: |
| 82 | assert method is not None |
| 83 | try: |
| 84 | if method in self._mw_methods_requiring_spider: |
| 85 | result = method(response=response, spider=self._spider) |
| 86 | else: |
| 87 | result = method(response=response) |
| 88 | if result is not None: |
| 89 | msg = ( |
| 90 | f"{global_object_name(method)} must return None " |
| 91 | f"or raise an exception, got {type(result)}" |
| 92 | ) |
| 93 | raise _InvalidOutput(msg) |
| 94 | except _InvalidOutput: |
| 95 | raise |
| 96 | except Exception: |
| 97 | return await scrape_func(Failure(), request) |
| 98 | return await scrape_func(response, request) |
| 99 | |
| 100 | async def _evaluate_iterable( |
| 101 | self, |
no test coverage detected