mirror of https://github.com/scrapy/scrapy.git
improved check for missing callback in Requests
This commit is contained in:
parent
0f1bb87198
commit
aacb7965b4
|
|
@ -161,6 +161,10 @@ class ExecutionEngine(object):
|
|||
return self.downloader.sites.keys()
|
||||
|
||||
def crawl(self, request, spider):
|
||||
if not request.deferred.callbacks:
|
||||
log.msg("Unable to crawl Request with no callback: %s" % request,
|
||||
level=log.ERROR, domain=spider.domain_name)
|
||||
return
|
||||
schd = mustbe_deferred(self.schedule, request, spider)
|
||||
# FIXME: we can't log errors because we would be preventing them from
|
||||
# propagating to the request errback. This should be fixed after the
|
||||
|
|
|
|||
|
|
@ -85,23 +85,9 @@ class SpiderMiddlewareManager(object):
|
|||
assert _isiterable(result), \
|
||||
'Middleware %s must returns an iterable object, got %s ' % \
|
||||
(fname(method), type(result))
|
||||
|
||||
return self._validate_output(request, result, spider)
|
||||
return result
|
||||
|
||||
dfd = mustbe_deferred(process_spider_input, response)
|
||||
dfd.addErrback(process_spider_exception)
|
||||
dfd.addCallback(process_spider_output)
|
||||
return dfd
|
||||
|
||||
def _validate_output(self, request, result, spider):
|
||||
"""Every request returned by spiders must be instanciate with a callback"""
|
||||
for r in result:
|
||||
if isinstance(r, Request) and not r.deferred.callbacks:
|
||||
log.msg('Ignoring %s returned from spider while processing %s: ' \
|
||||
'Request has no callback, try adding callback=self.parse ' \
|
||||
'argument when instanciating Request objects inside your spiders' \
|
||||
% (r, request), level=log.WARNING, domain=spider.domain_name)
|
||||
continue
|
||||
yield r
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue