def _evaluate_iterable(self, response: Response, spider: Spider, iterable: Iterable, exception_processor_index: int, recover_to: MutableChain) -> Generator: try: for r in iterable: yield r except Exception as ex: exception_result = self._process_spider_exception( response, spider, Failure(ex), exception_processor_index) if isinstance(exception_result, Failure): raise recover_to.extend(exception_result)
def test_mutablechain(self): m = MutableChain(range(2), [2, 3], (4, 5)) m.extend(range(6, 7)) m.extend([7, 8]) m.extend([9, 10], (11, 12)) self.assertEqual(next(m), 0) self.assertEqual(m.next(), 1) self.assertEqual(m.__next__(), 2) self.assertEqual(list(m), list(range(3, 13)))
def test_mutablechain(self): m = MutableChain(range(2), [2, 3], (4, 5)) m.extend(range(6, 7)) m.extend([7, 8]) m.extend([9, 10], (11, 12)) self.assertEqual(next(m), 0) self.assertEqual(m.__next__(), 1) with catch_warnings(record=True) as warnings: self.assertEqual(m.next(), 2) self.assertEqual(len(warnings), 1) self.assertIn('scrapy.utils.python.MutableChain.__next__', str(warnings[0].message)) self.assertEqual(list(m), list(range(3, 13)))