diff --git a/scrapy/command/cmdline.py b/scrapy/command/cmdline.py index 64a482d58..a2be7f4f3 100644 --- a/scrapy/command/cmdline.py +++ b/scrapy/command/cmdline.py @@ -8,7 +8,7 @@ import cProfile import scrapy from scrapy import log from scrapy.spider import spiders -from scrapy.conf import settings +from scrapy.conf import settings, SETTINGS_MODULE def find_commands(dir): try: @@ -88,6 +88,10 @@ def command_settings(cmdname): command_executed = {} def execute(): + if not settings.settings_module: + print "Scrapy %s\n" % scrapy.__version__ + print "Error: Cannot find %r module in python path." % SETTINGS_MODULE + sys.exit(1) execute_with_args(sys.argv) def execute_with_args(argv): @@ -113,7 +117,7 @@ def execute_with_args(argv): print "Scrapy %s\n" % scrapy.__version__ print "Unknown command: %s\n" % cmdname print 'Type "%s -h" for help' % argv[0] - sys.exit() + sys.exit(2) (opts, args) = parser.parse_args(args=argv[1:]) del args[0] # args[0] is cmdname diff --git a/scrapy/conf/__init__.py b/scrapy/conf/__init__.py index 7dcb44a2a..b06d9f30e 100644 --- a/scrapy/conf/__init__.py +++ b/scrapy/conf/__init__.py @@ -1,3 +1,9 @@ +""" +Scrapy settings manager + +See documentation in docs/topics/settings.rst +""" + import os import cPickle as pickle @@ -5,42 +11,37 @@ SETTINGS_MODULE = os.environ.get('SCRAPYSETTINGS_MODULE', 'scrapy_settings') SETTINGS_DISABLED = os.environ.get('SCRAPY_SETTINGS_DISABLED', False) class Settings(object): - """Class to obtain configuration values from settings module - which can be overriden by environment variables prepended by SCRAPY_""" # settings in precedence order overrides = None - settings = None + settings_module = None defaults = None global_defaults = None def __init__(self): pickled_settings = os.environ.get("SCRAPY_PICKLED_SETTINGS_TO_OVERRIDE") self.overrides = pickle.loads(pickled_settings) if pickled_settings else {} - if not SETTINGS_DISABLED: - self.settings = self._import(SETTINGS_MODULE) + self.settings_module = self._import(SETTINGS_MODULE) self.defaults = {} self.global_defaults = self._import('scrapy.conf.default_settings') def _import(self, modulepath): - return __import__(modulepath, {}, {}, ['']) + try: + return __import__(modulepath, {}, {}, ['']) + except ImportError: + pass def __getitem__(self, opt_name): if not SETTINGS_DISABLED: if opt_name in self.overrides: return self.overrides[opt_name] - if 'SCRAPY_' + opt_name in os.environ: return os.environ['SCRAPY_' + opt_name] - - if hasattr(self.settings, opt_name): - return getattr(self.settings, opt_name) - + if hasattr(self.settings_module, opt_name): + return getattr(self.settings_module, opt_name) if opt_name in self.defaults: return self.defaults[opt_name] - - if hasattr(self.global_defaults, opt_name): - return getattr(self.global_defaults, opt_name) + return getattr(self.global_defaults, opt_name, None) def get(self, name, default=None): return self[name] if self[name] is not None else default