diff --git a/bin/scrapy b/bin/scrapy new file mode 100755 index 00000000000..965563e9960 --- /dev/null +++ b/bin/scrapy @@ -0,0 +1,4 @@ +#!/usr/bin/env python + +from scrapy.tool import main +main() diff --git a/scrapy/commands/startproject.py b/scrapy/commands/startproject.py index ee44026ce49..690b0b048e5 100644 --- a/scrapy/commands/startproject.py +++ b/scrapy/commands/startproject.py @@ -12,6 +12,7 @@ TEMPLATES_PATH = join(scrapy.__path__[0], 'templates', 'project') TEMPLATES_TO_RENDER = ( + ('scrapy.cfg',), ('scrapy-ctl.py',), ('${project_name}', 'settings.py.tmpl'), ('${project_name}', 'items.py.tmpl'), @@ -44,6 +45,7 @@ def run(self, args, opts): moduletpl = join(TEMPLATES_PATH, 'module') copytree(moduletpl, join(project_name, project_name), ignore=IGNORE) + shutil.copy(join(TEMPLATES_PATH, 'scrapy.cfg'), project_name) shutil.copy(join(TEMPLATES_PATH, 'scrapy-ctl.py'), project_name) for paths in TEMPLATES_TO_RENDER: path = join(*paths) diff --git a/scrapy/templates/project/scrapy.cfg b/scrapy/templates/project/scrapy.cfg new file mode 100644 index 00000000000..d30c9056780 --- /dev/null +++ b/scrapy/templates/project/scrapy.cfg @@ -0,0 +1,2 @@ +[default] +settings = ${project_name}.settings diff --git a/scrapy/tool.py b/scrapy/tool.py new file mode 100644 index 00000000000..cd3a3c8f4d8 --- /dev/null +++ b/scrapy/tool.py @@ -0,0 +1,32 @@ +""" +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/setup.py b/setup.py index fba882ad469..a31191e69b2 100644 --- a/setup.py +++ b/setup.py @@ -90,7 +90,7 @@ def is_not_module(filename): 'packages': packages, 'cmdclass': cmdclasses, 'data_files': data_files, - 'scripts': ['bin/scrapy-ctl.py', 'bin/scrapy-ws.py', 'bin/scrapy-sqs.py'], + 'scripts': ['bin/scrapy', 'bin/scrapy-ctl.py', 'bin/scrapy-ws.py', 'bin/scrapy-sqs.py'], 'classifiers': [ 'Programming Language :: Python', 'Programming Language :: Python :: 2.5',