Moved scrapy.cfg auto-discovery to scrapy.conf.EnvironmentSettings class

This commit is contained in:
Pablo Hoffman 2010-08-25 19:59:30 -03:00
parent ef7a097272
commit 40b590cad3
4 changed files with 32 additions and 36 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
from scrapy.tool import main
main()
from scrapy.cmdline import execute
execute()

View File

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

View File

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

View File

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