def test_collector(self): stats = StatsCollector(self.crawler) self.assertEqual(stats.get_stats(), {}) self.assertEqual(stats.get_value('anything'), None) self.assertEqual(stats.get_value('anything', 'default'), 'default') stats.set_value('test', 'value') self.assertEqual(stats['test'], 'value') self.assertEqual(stats.get_stats(), {'test': 'value'}) stats['test'] = 'value2' self.assertIn('test', stats) self.assertEqual(stats['test'], 'value2') self.assertEqual(next(iter(stats)), 'test') self.assertEqual(stats.get_stats(), {'test': 'value2'}) stats['test'] = 'value' stats.set_value('test2', 23) self.assertEqual(stats.get_stats(), {'test': 'value', 'test2': 23}) self.assertEqual(stats.get_value('test2'), 23) stats.inc_value('test2') self.assertEqual(stats.get_value('test2'), 24) stats.inc_value('test2', 6) self.assertEqual(stats.get_value('test2'), 30) stats.max_value('test2', 6) self.assertEqual(stats.get_value('test2'), 30) stats.max_value('test2', 40) self.assertEqual(stats.get_value('test2'), 40) stats.max_value('test3', 1) self.assertEqual(stats.get_value('test3'), 1) stats.min_value('test2', 60) self.assertEqual(stats.get_value('test2'), 40) stats.min_value('test2', 35) self.assertEqual(stats.get_value('test2'), 35) stats.min_value('test4', 7) self.assertEqual(stats.get_value('test4'), 7)
def test_collector(self): stats = StatsCollector(self.crawler) self.assertEqual(stats.get_stats(), {}) self.assertEqual(stats.get_value('anything'), None) self.assertEqual(stats.get_value('anything', 'default'), 'default') stats.set_value('test', 'value') self.assertEqual(stats.get_stats(), {'test': 'value'}) stats.set_value('test2', 23) self.assertEqual(stats.get_stats(), {'test': 'value', 'test2': 23}) self.assertEqual(stats.get_value('test2'), 23) stats.inc_value('test2') self.assertEqual(stats.get_value('test2'), 24) stats.inc_value('test2', 6) self.assertEqual(stats.get_value('test2'), 30) stats.max_value('test2', 6) self.assertEqual(stats.get_value('test2'), 30) stats.max_value('test2', 40) self.assertEqual(stats.get_value('test2'), 40) stats.max_value('test3', 1) self.assertEqual(stats.get_value('test3'), 1) stats.min_value('test2', 60) self.assertEqual(stats.get_value('test2'), 40) stats.min_value('test2', 35) self.assertEqual(stats.get_value('test2'), 35) stats.min_value('test4', 7) self.assertEqual(stats.get_value('test4'), 7)
async def _request_handler(request: pyppeteer.network_manager.Request, scrapy_request: Request, stats: StatsCollector) -> None: # set headers, method and body if request.url == scrapy_request.url: overrides = { "method": scrapy_request.method, "headers": { key.decode("utf-8").lower(): value[0].decode("utf-8") for key, value in scrapy_request.headers.items() }, } if scrapy_request.body: overrides["postData"] = scrapy_request.body.decode( scrapy_request.encoding) else: overrides = {"headers": request.headers.copy()} if scrapy_request.headers.get("user-agent"): user_agent = scrapy_request.headers["user-agent"].decode("utf-8") overrides["headers"]["user-agent"] = user_agent await request.continue_(overrides) # increment stats stats.inc_value("pyppeteer/request_method_count/{}".format(request.method)) stats.inc_value("pyppeteer/request_count") if request.isNavigationRequest(): stats.inc_value("pyppeteer/request_count/navigation")
async def _response_handler(response: pyppeteer.network_manager.Response, stats: StatsCollector): stats.inc_value("pyppeteer/response_count") stats.inc_value("pyppeteer/response_status_count/{}".format( response.status))