mirror of https://github.com/scrapy/scrapy.git
Moved scrapy.cfg auto-discovery to scrapy.conf.EnvironmentSettings class
This commit is contained in:
parent
ef7a097272
commit
40b590cad3
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from scrapy.tool import main
|
||||
main()
|
||||
from scrapy.cmdline import execute
|
||||
execute()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue