From 9685c24059a1eb95216dcab8f76805c8c0025a60 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Fri, 14 Sep 2012 12:32:33 -0300 Subject: [PATCH] restored stats_spider_{opened,closing,closed} signals in backwards compatibility mode --- docs/news.rst | 2 +- scrapy/core/engine.py | 4 +++- scrapy/signals.py | 4 ++++ scrapy/tests/test_engine.py | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/news.rst b/docs/news.rst index 4fe6cac49..4b8440208 100644 --- a/docs/news.rst +++ b/docs/news.rst @@ -6,7 +6,7 @@ Release notes Scrapy changes: -- major Stats Collection refactoring: removed separation of global/per-spider stats, removed stats-related signals (``stats_spider_opened``, etc). Stats are much simpler now, backwards compatibility is kept on the Stats Collector API. +- major Stats Collection refactoring: removed separation of global/per-spider stats, removed stats-related signals (``stats_spider_opened``, etc). Stats are much simpler now, backwards compatibility is kept on the Stats Collector API and signals. - added :meth:`~scrapy.contrib.spidermiddleware.SpiderMiddleware.process_start_requests` method to spider middlewares - dropped Signals singleton. Signals should now be accesed through the Crawler.signals attribute. See the signals documentation for more info. - dropped Signals singleton. Signals should now be accesed through the Crawler.signals attribute. See the signals documentation for more info. diff --git a/scrapy/core/engine.py b/scrapy/core/engine.py index 2e5a35326..ce5e9cc6b 100644 --- a/scrapy/core/engine.py +++ b/scrapy/core/engine.py @@ -262,8 +262,10 @@ class ExecutionEngine(object): dfd.addBoth(lambda _: slot.scheduler.close(reason)) dfd.addErrback(log.err, spider=spider) + # XXX: spider_stats argument was added for backwards compatibility with + # stats collection refactoring added in 0.15. it should be removed in 0.17. dfd.addBoth(lambda _: self.signals.send_catch_log_deferred(signal=signals.spider_closed, \ - spider=spider, reason=reason)) + spider=spider, reason=reason, spider_stats=self.crawler.stats.get_stats())) dfd.addErrback(log.err, spider=spider) dfd.addBoth(lambda _: self.crawler.stats.close_spider(spider, reason=reason)) diff --git a/scrapy/signals.py b/scrapy/signals.py index ad4c551e8..79de55a4b 100644 --- a/scrapy/signals.py +++ b/scrapy/signals.py @@ -17,4 +17,8 @@ response_downloaded = object() item_scraped = object() item_dropped = object() +stats_spider_opened = spider_opened +stats_spider_closing = spider_closed +stats_spider_closed = spider_closed + item_passed = item_scraped # for backwards compatibility diff --git a/scrapy/tests/test_engine.py b/scrapy/tests/test_engine.py index da1788811..5b430fb60 100644 --- a/scrapy/tests/test_engine.py +++ b/scrapy/tests/test_engine.py @@ -197,6 +197,7 @@ class EngineTest(unittest.TestCase): self.run.signals_catched[signals.spider_opened]) self.assertEqual({'spider': self.run.spider}, self.run.signals_catched[signals.spider_idle]) + self.run.signals_catched[signals.spider_closed].pop('spider_stats', None) # XXX: remove for scrapy 0.17 self.assertEqual({'spider': self.run.spider, 'reason': 'finished'}, self.run.signals_catched[signals.spider_closed])