mirror of https://github.com/scrapy/scrapy.git
Merge pull request #3393 from whalebot-helmsman/singal-request-added-to-downloader-slot
[MRG+1] New signal for reqeuests reached downloader
This commit is contained in:
commit
4da0b59cd7
|
|
@ -12,6 +12,7 @@ dist
|
||||||
.idea
|
.idea
|
||||||
htmlcov/
|
htmlcov/
|
||||||
.coverage
|
.coverage
|
||||||
|
.pytest_cache/
|
||||||
.coverage.*
|
.coverage.*
|
||||||
.cache/
|
.cache/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -279,6 +279,22 @@ request_dropped
|
||||||
:param spider: the spider that yielded the request
|
:param spider: the spider that yielded the request
|
||||||
:type spider: :class:`~scrapy.spiders.Spider` object
|
:type spider: :class:`~scrapy.spiders.Spider` object
|
||||||
|
|
||||||
|
request_reached_downloader
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. signal:: request_reached_downloader
|
||||||
|
.. function:: request_reached_downloader(request, spider)
|
||||||
|
|
||||||
|
Sent when a :class:`~scrapy.http.Request` reached downloader.
|
||||||
|
|
||||||
|
The signal does not support returning deferreds from their handlers.
|
||||||
|
|
||||||
|
:param request: the request that reached downloader
|
||||||
|
:type request: :class:`~scrapy.http.Request` object
|
||||||
|
|
||||||
|
:param spider: the spider that yielded the request
|
||||||
|
:type spider: :class:`~scrapy.spiders.Spider` object
|
||||||
|
|
||||||
response_received
|
response_received
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,9 @@ class Downloader(object):
|
||||||
return response
|
return response
|
||||||
|
|
||||||
slot.active.add(request)
|
slot.active.add(request)
|
||||||
|
self.signals.send_catch_log(signal=signals.request_reached_downloader,
|
||||||
|
request=request,
|
||||||
|
spider=spider)
|
||||||
deferred = defer.Deferred().addBoth(_deactivate)
|
deferred = defer.Deferred().addBoth(_deactivate)
|
||||||
slot.queue.append((request, deferred))
|
slot.queue.append((request, deferred))
|
||||||
self._process_queue(spider, slot)
|
self._process_queue(spider, slot)
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ spider_closed = object()
|
||||||
spider_error = object()
|
spider_error = object()
|
||||||
request_scheduled = object()
|
request_scheduled = object()
|
||||||
request_dropped = object()
|
request_dropped = object()
|
||||||
|
request_reached_downloader = object()
|
||||||
response_received = object()
|
response_received = object()
|
||||||
response_downloaded = object()
|
response_downloaded = object()
|
||||||
item_scraped = object()
|
item_scraped = object()
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ class CrawlerRun(object):
|
||||||
self.respplug = []
|
self.respplug = []
|
||||||
self.reqplug = []
|
self.reqplug = []
|
||||||
self.reqdropped = []
|
self.reqdropped = []
|
||||||
|
self.reqreached = []
|
||||||
self.itemerror = []
|
self.itemerror = []
|
||||||
self.itemresp = []
|
self.itemresp = []
|
||||||
self.signals_catched = {}
|
self.signals_catched = {}
|
||||||
|
|
@ -124,6 +125,7 @@ class CrawlerRun(object):
|
||||||
self.crawler.signals.connect(self.item_error, signals.item_error)
|
self.crawler.signals.connect(self.item_error, signals.item_error)
|
||||||
self.crawler.signals.connect(self.request_scheduled, signals.request_scheduled)
|
self.crawler.signals.connect(self.request_scheduled, signals.request_scheduled)
|
||||||
self.crawler.signals.connect(self.request_dropped, signals.request_dropped)
|
self.crawler.signals.connect(self.request_dropped, signals.request_dropped)
|
||||||
|
self.crawler.signals.connect(self.request_reached, signals.request_reached_downloader)
|
||||||
self.crawler.signals.connect(self.response_downloaded, signals.response_downloaded)
|
self.crawler.signals.connect(self.response_downloaded, signals.response_downloaded)
|
||||||
self.crawler.crawl(start_urls=start_urls)
|
self.crawler.crawl(start_urls=start_urls)
|
||||||
self.spider = self.crawler.spider
|
self.spider = self.crawler.spider
|
||||||
|
|
@ -155,6 +157,9 @@ class CrawlerRun(object):
|
||||||
def request_scheduled(self, request, spider):
|
def request_scheduled(self, request, spider):
|
||||||
self.reqplug.append((request, spider))
|
self.reqplug.append((request, spider))
|
||||||
|
|
||||||
|
def request_reached(self, request, spider):
|
||||||
|
self.reqreached.append((request, spider))
|
||||||
|
|
||||||
def request_dropped(self, request, spider):
|
def request_dropped(self, request, spider):
|
||||||
self.reqdropped.append((request, spider))
|
self.reqdropped.append((request, spider))
|
||||||
|
|
||||||
|
|
@ -212,6 +217,8 @@ class EngineTest(unittest.TestCase):
|
||||||
responses_count = len(self.run.respplug)
|
responses_count = len(self.run.respplug)
|
||||||
self.assertEqual(scheduled_requests_count,
|
self.assertEqual(scheduled_requests_count,
|
||||||
dropped_requests_count + responses_count)
|
dropped_requests_count + responses_count)
|
||||||
|
self.assertEqual(len(self.run.reqreached),
|
||||||
|
responses_count)
|
||||||
|
|
||||||
def _assert_dropped_requests(self):
|
def _assert_dropped_requests(self):
|
||||||
self.assertEqual(len(self.run.reqdropped), 1)
|
self.assertEqual(len(self.run.reqdropped), 1)
|
||||||
|
|
@ -219,6 +226,7 @@ class EngineTest(unittest.TestCase):
|
||||||
def _assert_downloaded_responses(self):
|
def _assert_downloaded_responses(self):
|
||||||
# response tests
|
# response tests
|
||||||
self.assertEqual(8, len(self.run.respplug))
|
self.assertEqual(8, len(self.run.respplug))
|
||||||
|
self.assertEqual(8, len(self.run.reqreached))
|
||||||
|
|
||||||
for response, _ in self.run.respplug:
|
for response, _ in self.run.respplug:
|
||||||
if self.run.getpath(response.url) == '/item999.html':
|
if self.run.getpath(response.url) == '/item999.html':
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue