From d311fefa7b360a357e6bd6f4df016e0ddee14ac2 Mon Sep 17 00:00:00 2001 From: Alex Cepoi Date: Tue, 20 Aug 2013 14:02:55 +0200 Subject: [PATCH] fix some missing logs with new crawlerprocess --- scrapy/commands/settings.py | 1 + scrapy/crawler.py | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/scrapy/commands/settings.py b/scrapy/commands/settings.py index d71546864..4691821e4 100644 --- a/scrapy/commands/settings.py +++ b/scrapy/commands/settings.py @@ -26,6 +26,7 @@ class Command(ScrapyCommand): def run(self, args, opts): crawler = self.crawler_process.create_crawler() + crawler.configure() settings = crawler.settings if opts.get: print settings.get(opts.get) diff --git a/scrapy/crawler.py b/scrapy/crawler.py index aca3edd6a..06bc10f8b 100644 --- a/scrapy/crawler.py +++ b/scrapy/crawler.py @@ -19,6 +19,9 @@ class Crawler(object): self.signals = SignalManager(self) self.stats = load_object(settings['STATS_CLASS'])(self) + spman_cls = load_object(self.settings['SPIDER_MANAGER_CLASS']) + self.spiders = spman_cls.from_crawler(self) + self.scheduled = {} def install(self): @@ -39,20 +42,25 @@ class Crawler(object): lf_cls = load_object(self.settings['LOG_FORMATTER']) self.logformatter = lf_cls.from_crawler(self) self.extensions = ExtensionManager.from_crawler(self) - spman_cls = load_object(self.settings['SPIDER_MANAGER_CLASS']) - self.spiders = spman_cls.from_crawler(self) self.engine = ExecutionEngine(self, self._spider_closed) def crawl(self, spider, requests=None): spider.set_crawler(self) - if requests is None: - requests = spider.start_requests() if self.configured and self.engine.running: assert not self.scheduled - return self.engine.open_spider(spider, requests) + return self.schedule(spider, requests) else: - self.scheduled.setdefault(spider, []).extend(requests) + self.scheduled.setdefault(spider, []).append(requests) + + def schedule(self, spider, batches=[]): + requests = [] + for batch in batches: + if batch is None: + batch = spider.start_requests() + requests.extend(batch) + + return self.engine.open_spider(spider, requests) def _spider_closed(self, spider=None): if not self.engine.open_spiders: @@ -62,8 +70,8 @@ class Crawler(object): def start(self): yield defer.maybeDeferred(self.configure) - for spider, requests in self.scheduled.iteritems(): - yield self.engine.open_spider(spider, requests) + for spider, batches in self.scheduled.iteritems(): + yield self.schedule(spider, batches) yield defer.maybeDeferred(self.engine.start) @@ -128,10 +136,7 @@ class CrawlerProcess(ProcessMixin): def create_crawler(self, name=None): if name not in self.crawlers: - crawler = Crawler(self.settings) - crawler.configure() - - self.crawlers[name] = crawler + self.crawlers[name] = Crawler(self.settings) return self.crawlers[name] @@ -139,6 +144,7 @@ class CrawlerProcess(ProcessMixin): name, crawler = self.crawlers.popitem() sflo = log.start_from_crawler(crawler) + crawler.configure() crawler.install() crawler.signals.connect(crawler.uninstall, signals.engine_stopped) if sflo: