mirror of https://github.com/scrapy/scrapy.git
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:
parent
d57c0100db
commit
230bcef7b6
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue