some refactor of settings manager (without changing API): don't fail if no settings module is found (fail on scrapy.cmdline instead). also, some code improvements for clarity.

This commit is contained in:
Pablo Hoffman 2009-07-29 18:26:29 -03:00
parent d57c0100db
commit 230bcef7b6
2 changed files with 21 additions and 16 deletions

View File

@ -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

View File

@ -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