1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-02-23 15:04:27 +00:00

added command for starting a scrapyd server for the current project

This commit is contained in:
Pablo Hoffman 2010-11-30 15:52:15 -02:00
parent 5a46ce47ee
commit 7b84591ea9
2 changed files with 62 additions and 0 deletions

View File

@ -0,0 +1,22 @@
from __future__ import absolute_import
from scrapy.command import ScrapyCommand
from scrapy.exceptions import UsageError
class Command(ScrapyCommand):
requires_project = True
def short_desc(self):
return "Start Scrapyd server for this project"
def long_desc(self):
return "Start Scrapyd server for this project, which can be referred " \
"from the JSON API with the name 'default'"
def run(self, args, opts):
try:
from scrapyd.script import execute
execute()
except ImportError:
raise UsageError("Scrapyd is not available in this system")

40
scrapyd/script.py Normal file
View File

@ -0,0 +1,40 @@
"""This module can be used to execute Scrapyd from a Scrapy command"""
import sys
import os
from cStringIO import StringIO
from twisted.python import log
from twisted.internet import reactor
from twisted.application import app
from scrapy.utils.project import project_data_dir
from scrapyd import get_application
from scrapyd.config import Config
def _get_config():
datadir = os.path.join(project_data_dir(), '.scrapy', 'scrapyd')
conf = {
'eggs_dir': os.path.join(datadir, 'eggs'),
'logs_dir': os.path.join(datadir, 'logs'),
'dbs_dir': os.path.join(datadir, 'dbs'),
}
for k in ['eggs_dir', 'logs_dir', 'dbs_dir']: # create dirs
d = conf[k]
if not os.path.exists(d):
os.makedirs(d)
scrapyd_conf = """
[scrapyd]
eggs_dir = %(eggs_dir)s
logs_dir = %(logs_dir)s
dbs_dir = %(dbs_dir)s
""" % conf
return Config(extra_sources=[StringIO(scrapyd_conf)])
def execute():
config = _get_config()
log.startLogging(sys.stderr)
application = get_application(config)
app.startApplication(application, False)
reactor.run()