From d5d944fa44f55159a11716c566d96f8c9dabb283 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Thu, 28 Feb 2013 11:35:11 -0200 Subject: [PATCH] Log overriden Scrapy settings when Scrapy starts. This is useful for debugging, to quickly find out which settings where used for a specific spider run. dict settings are omitted for brevity. DEBUG level is used for consistency with "Enabled extensions/middlewares" lines (which share a similar purpose). --- scrapy/crawler.py | 3 +++ scrapy/settings/__init__.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/scrapy/crawler.py b/scrapy/crawler.py index f8d8c5db1..6bd13e884 100644 --- a/scrapy/crawler.py +++ b/scrapy/crawler.py @@ -8,6 +8,7 @@ from scrapy.extension import ExtensionManager from scrapy.signalmanager import SignalManager from scrapy.utils.ossignal import install_shutdown_handlers, signal_names from scrapy.utils.misc import load_object +from scrapy.settings import overridden_settings from scrapy import log, signals @@ -33,6 +34,8 @@ class Crawler(object): if self.configured: return self.configured = True + d = dict(overridden_settings(self.settings)) + log.msg(format="Overridden settings: %(settings)r", settings=d, level=log.DEBUG) lf_cls = load_object(self.settings['LOG_FORMATTER']) self.logformatter = lf_cls.from_crawler(self) self.extensions = ExtensionManager.from_crawler(self) diff --git a/scrapy/settings/__init__.py b/scrapy/settings/__init__.py index 7075d4d9b..be81bfd9d 100644 --- a/scrapy/settings/__init__.py +++ b/scrapy/settings/__init__.py @@ -57,3 +57,17 @@ class CrawlerSettings(Settings): def __str__(self): return "" % self.settings_module + + +def iter_default_settings(): + """Return the default settings as an iterator of (name, value) tuples""" + for name in dir(default_settings): + if name.isupper(): + yield name, getattr(default_settings, name) + +def overridden_settings(settings): + """Return a dict of the settings that have been overridden""" + for name, defvalue in iter_default_settings(): + value = settings[name] + if not isinstance(defvalue, dict) and value != defvalue: + yield name, value