improved check for missing callback in Requests

This commit is contained in:
Pablo Hoffman 2009-10-03 14:08:40 -03:00
parent 0f1bb87198
commit aacb7965b4
2 changed files with 5 additions and 15 deletions

View File

@ -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

View File

@ -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