From 40b590cad33e76c35902866f97b63ffa41a89f06 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Wed, 25 Aug 2010 19:59:30 -0300 Subject: [PATCH] Moved scrapy.cfg auto-discovery to scrapy.conf.EnvironmentSettings class --- bin/scrapy | 4 ++-- scrapy/conf/__init__.py | 9 +++++++-- scrapy/tool.py | 32 -------------------------------- scrapy/utils/conf.py | 23 +++++++++++++++++++++++ 4 files changed, 32 insertions(+), 36 deletions(-) delete mode 100644 scrapy/tool.py diff --git a/bin/scrapy b/bin/scrapy index 965563e99..918ea7fbd 100755 --- a/bin/scrapy +++ b/bin/scrapy @@ -1,4 +1,4 @@ #!/usr/bin/env python -from scrapy.tool import main -main() +from scrapy.cmdline import execute +execute() diff --git a/scrapy/conf/__init__.py b/scrapy/conf/__init__.py index a2eb9cfde..ee442563f 100644 --- a/scrapy/conf/__init__.py +++ b/scrapy/conf/__init__.py @@ -8,6 +8,7 @@ import os import cPickle as pickle from scrapy.conf import default_settings +from scrapy.utils.conf import set_scrapy_settings_envvar import_ = lambda x: __import__(x, {}, {}, ['']) @@ -51,12 +52,16 @@ class Settings(object): class EnvironmentSettings(Settings): + ENVVAR = 'SCRAPY_SETTINGS_MODULE' + def __init__(self): super(EnvironmentSettings, self).__init__() self.defaults = {} self.disabled = os.environ.get('SCRAPY_SETTINGS_DISABLED', False) - settings_module_path = os.environ.get('SCRAPY_SETTINGS_MODULE', \ - 'scrapy_settings') + if self.ENVVAR not in os.environ: + project = os.environ.get('SCRAPY_PROJECT', 'default') + set_scrapy_settings_envvar(project) + settings_module_path = os.environ.get(self.ENVVAR, 'scrapy_settings') self.set_settings_module(settings_module_path) # XXX: find a better solution for this hack diff --git a/scrapy/tool.py b/scrapy/tool.py deleted file mode 100644 index cd3a3c8f4..000000000 --- a/scrapy/tool.py +++ /dev/null @@ -1,32 +0,0 @@ -""" -Scrapy command-line tool -""" - -import sys, os -from ConfigParser import RawConfigParser - -def closest_scrapy_cfg(path='.', prevpath=None): - if path == prevpath: - return '' - path = os.path.abspath(path) - cfgfile = os.path.join(path, 'scrapy.cfg') - if os.path.exists(cfgfile): - return cfgfile - return closest_scrapy_cfg(os.path.dirname(path), path) - -def main(): - scrapy_cfg = closest_scrapy_cfg() - cfg_sources = [scrapy_cfg, os.path.expanduser('~/.scrapy.cfg'), '/etc/scrapy.cfg'] - cfg = RawConfigParser() - cfg.read(cfg_sources) - if cfg.has_option('default', 'settings'): - os.environ['SCRAPY_SETTINGS_MODULE'] = cfg.get('default', 'settings') - projdir = os.path.dirname(scrapy_cfg) - if projdir not in sys.path: - sys.path.append(projdir) - - from scrapy.cmdline import execute - execute() - -if __name__ == '__main__': - main() diff --git a/scrapy/utils/conf.py b/scrapy/utils/conf.py index e49ea2e53..afba9d88b 100644 --- a/scrapy/utils/conf.py +++ b/scrapy/utils/conf.py @@ -1,3 +1,6 @@ +import sys +import os +from ConfigParser import RawConfigParser from operator import itemgetter def build_component_list(base, custom): @@ -11,3 +14,23 @@ def build_component_list(base, custom): compdict.update(custom) return [k for k, v in sorted(compdict.items(), key=itemgetter(1)) \ if v is not None] + +def closest_scrapy_cfg(path='.', prevpath=None): + if path == prevpath: + return '' + path = os.path.abspath(path) + cfgfile = os.path.join(path, 'scrapy.cfg') + if os.path.exists(cfgfile): + return cfgfile + return closest_scrapy_cfg(os.path.dirname(path), path) + +def set_scrapy_settings_envvar(project='default', set_syspath=True): + scrapy_cfg = closest_scrapy_cfg() + cfg_sources = [scrapy_cfg, os.path.expanduser('~/.scrapy.cfg'), '/etc/scrapy.cfg'] + cfg = RawConfigParser() + cfg.read(cfg_sources) + if cfg.has_option(project, 'settings'): + os.environ['SCRAPY_SETTINGS_MODULE'] = cfg.get(project, 'settings') + projdir = os.path.dirname(scrapy_cfg) + if set_syspath and projdir not in sys.path: + sys.path.append(projdir)