Fixed unbounded spider error in shell, and enclosed fetch() method in a try/except block for logging errors more reliably

This commit is contained in:
Pablo Hoffman 2010-09-23 12:33:24 -03:00
parent 37c25fe9a8
commit 754d0f53f9
1 changed files with 12 additions and 9 deletions

View File

@ -56,23 +56,26 @@ class Shell(object):
if spider is None:
spider = create_spider_for_request(self.crawler.spiders, request, \
BaseSpider('default'), log_multiple=True)
spider.set_crawler(self.crawler)
self.crawler.engine.open_spider(spider)
return self.crawler.engine.schedule(request, spider)
def fetch(self, request_or_url, spider=None):
if isinstance(request_or_url, Request):
request = request_or_url
url = request.url
else:
url = any_to_uri(request_or_url)
request = Request(url, dont_filter=True)
response = None
# we enclose all this code in a try/except block to see errors when
# they happen in a thread
try:
if isinstance(request_or_url, Request):
request = request_or_url
url = request.url
else:
url = any_to_uri(request_or_url)
request = Request(url, dont_filter=True)
response = None
response = threads.blockingCallFromThread(reactor, \
self._schedule, request, spider)
self.populate_vars(url, response, request, spider)
except:
log.err(Failure(), "Error fetching response", spider=spider)
self.populate_vars(url, response, request, spider)
log.err(Failure(), "Error fetching: %s" % request_or_url, spider=spider)
def populate_vars(self, url=None, response=None, request=None, spider=None):
item = self.item_class()