From fcbbb5001e093d4f2b5a522061f833be7a514370 Mon Sep 17 00:00:00 2001
From: Pablo Hoffman
Date: Mon, 14 Sep 2009 20:35:47 -0300
Subject: [PATCH] ported spiderctl web console extensin to work with new core
based on spider references
---
scrapy/contrib/webconsole/spiderctl.py | 120 ++++++++-----------------
1 file changed, 35 insertions(+), 85 deletions(-)
diff --git a/scrapy/contrib/webconsole/spiderctl.py b/scrapy/contrib/webconsole/spiderctl.py
index 853479179..bae839e72 100644
--- a/scrapy/contrib/webconsole/spiderctl.py
+++ b/scrapy/contrib/webconsole/spiderctl.py
@@ -16,7 +16,7 @@ class Spiderctl(object):
webconsole_name = 'Spider control panel'
def __init__(self):
- self.running = set()
+ self.running = {}
self.finished = set()
dispatcher.connect(self.domain_opened, signal=signals.domain_opened)
dispatcher.connect(self.domain_closed, signal=signals.domain_closed)
@@ -24,42 +24,41 @@ class Spiderctl(object):
from scrapy.management.web import webconsole_discover_module
dispatcher.connect(self.webconsole_discover_module, signal=webconsole_discover_module)
- def domain_opened(self, domain, spider):
- self.running.add(domain)
+ def domain_opened(self, spider):
+ self.running[spider.domain_name] = spider
- def domain_closed(self, domain, spider):
- self.running.remove(domain)
- self.finished.add(domain)
+ def domain_closed(self, spider):
+ del self.running[spider.domain_name]
+ self.finished.add(spider.domain_name)
def webconsole_render(self, wc_request):
if wc_request.args:
changes = self.webconsole_control(wc_request)
- enabled_domains = spiders.list()
- self.scheduled = scrapyengine.domain_scheduler.pending_domains
- self.idle = [d for d in enabled_domains if d not in self.scheduled
+ self.scheduled = [s.domain_name for s in scrapyengine.spider_scheduler._pending_spiders]
+ self.idle = [d for d in self.enabled_domains if d not in self.scheduled
and d not in self.running
and d not in self.finished]
s = banner(self)
s += '\n"
if wc_request.args:
@@ -139,36 +112,26 @@ class Spiderctl(object):
def webconsole_control(self, wc_request):
args = wc_request.args
- enabled_domains = spiders.list()
s = "
\n"
if "stop_running_domains" in args:
s += ""
- s += "Stopped spiders:
" % "".join(args["stop_running_domains"])
+ stopped_domains = []
for domain in args["stop_running_domains"]:
- scrapyengine.close_domain(domain)
+ if domain in self.running:
+ scrapyengine.close_spider(self.running[domain])
+ stopped_domains.append(domain)
+ s += "Stopped spiders: " % "".join(stopped_domains)
s += "
"
if "remove_pending_domains" in args:
removed = []
for domain in args["remove_pending_domains"]:
- if scrapyengine.domain_scheduler.remove_pending_domain(domain):
+ if scrapyengine.spider_scheduler.remove_pending_domain(domain):
removed.append(domain)
if removed:
s += ""
s += "Removed scheduled spiders:
" % "".join(args["remove_pending_domains"])
s += ""
- if "bulk_remove_domains" in args:
- scheduled = []
- to_remove = set([d.strip() for d in args["bulk_remove_domains"][0].split("\n")])
- removed = set([d for d in scrapyengine.scheduler.pending_domains if d in to_remove])
- scrapyengine.scheduler.pending_domains = [d for d in scrapyengine.scheduler.pending_domains if d not in removed]
- if removed:
- s += ""
- s += "Removed:
" % "".join(removed)
- s += ""
- s += ""
- s += "Not removed:
" % "".join(to_remove - removed)
- s += ""
if "add_pending_domains" in args:
for domain in args["add_pending_domains"]:
if domain not in scrapyengine.scheduler.pending_requests:
@@ -176,20 +139,6 @@ class Spiderctl(object):
s += ""
s += "Scheduled spiders:
" % "".join(args["add_pending_domains"])
s += ""
- if "bulk_schedule_domains" in args:
- to_schedule = set([d.strip() for d in args["bulk_schedule_domains"][0].split("\n")])
- scheduled = set()
- for domain in to_schedule:
- if domain in enabled_domains and domain not in scrapyengine.scheduler.pending_requests:
- scrapymanager.crawl(domain)
- scheduled.add(domain)
- if scheduled:
- s += ""
- s += "Scheduled:
" % "".join(scheduled)
- s += ""
- s += ""
- s += "Not scheduled:
" % "".join(to_schedule - scheduled)
- s += ""
if "rerun_finished_domains" in args:
for domain in args["rerun_finished_domains"]:
if domain not in scrapyengine.scheduler.pending_requests:
@@ -202,4 +151,5 @@ class Spiderctl(object):
return s
def webconsole_discover_module(self):
+ self.enabled_domains = spiders.list()
return self