From 300a0f490177ff5e93dc5ade568b550ff111942e Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Sun, 11 Jan 2009 06:31:07 +0000 Subject: [PATCH] minor (and inoffensive) code improvements and fixes found while documenting --HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40700 --- scrapy/trunk/scrapy/conf/default_settings.py | 1 - scrapy/trunk/scrapy/contrib/memdebug.py | 6 ++++++ scrapy/trunk/scrapy/contrib/memusage.py | 6 ++++++ scrapy/trunk/scrapy/contrib/response/soup.py | 10 +++------ .../scrapy/contrib/webconsole/livestats.py | 11 +++++----- .../scrapy/contrib/webconsole/schedstats.py | 16 +++++++------- .../scrapy/contrib/webconsole/spiderctl.py | 3 ++- scrapy/trunk/scrapy/management/web.py | 21 +++++++++++++++++-- 8 files changed, 50 insertions(+), 24 deletions(-) diff --git a/scrapy/trunk/scrapy/conf/default_settings.py b/scrapy/trunk/scrapy/conf/default_settings.py index 540e39617..b6fb8897a 100644 --- a/scrapy/trunk/scrapy/conf/default_settings.py +++ b/scrapy/trunk/scrapy/conf/default_settings.py @@ -82,7 +82,6 @@ EXTENSIONS = [ 'scrapy.xpath.extension.ResponseLibxml2', 'scrapy.management.web.WebConsole', 'scrapy.management.telnet.TelnetConsole', - 'scrapy.contrib.webconsole.schedstats.SchedulerStats', 'scrapy.contrib.webconsole.livestats.LiveStats', 'scrapy.contrib.webconsole.spiderctl.Spiderctl', 'scrapy.contrib.webconsole.enginestatus.EngineStatus', diff --git a/scrapy/trunk/scrapy/contrib/memdebug.py b/scrapy/trunk/scrapy/contrib/memdebug.py index a73801a07..9d9c3983c 100644 --- a/scrapy/trunk/scrapy/contrib/memdebug.py +++ b/scrapy/trunk/scrapy/contrib/memdebug.py @@ -1,3 +1,9 @@ +""" +MemoryDebugger extension + +See documentation in docs/ref/extensions.rst +""" + import pprint import gc import socket diff --git a/scrapy/trunk/scrapy/contrib/memusage.py b/scrapy/trunk/scrapy/contrib/memusage.py index 760e92314..d1a961397 100644 --- a/scrapy/trunk/scrapy/contrib/memusage.py +++ b/scrapy/trunk/scrapy/contrib/memusage.py @@ -1,3 +1,9 @@ +""" +MemoryUsage extension + +See documentation in docs/ref/extensions.rst +""" + import sys import os import pprint diff --git a/scrapy/trunk/scrapy/contrib/response/soup.py b/scrapy/trunk/scrapy/contrib/response/soup.py index 9708b21fe..19eea6833 100644 --- a/scrapy/trunk/scrapy/contrib/response/soup.py +++ b/scrapy/trunk/scrapy/contrib/response/soup.py @@ -1,12 +1,7 @@ """ -The ResponseSoup extension causes the Response objects to grow a new method -("getsoup") which returns a (cached) BeautifulSoup object of its body, and a -"soup" attribute with the same effect. The soup argument is provided for -convenience, but you cannot pass any BeautifulSoup constructor arguments (which -you can do with the getsoup() method). +ResponseSoup extension -For more information about BeautifulSoup see: -http://www.crummy.com/software/BeautifulSoup/documentation.html +See documentation in docs/ref/extensions.rst """ from BeautifulSoup import BeautifulSoup @@ -20,6 +15,7 @@ class ResponseSoup(object): setattr(Response, 'soup', property(getsoup)) def getsoup(response, **kwargs): + # TODO: use different cache buckets depending on constructor parameters if not hasattr(response, '_soup'): body = response.body.to_string() if response.body is not None else "" setattr(response, '_soup', BeautifulSoup(body, **kwargs)) diff --git a/scrapy/trunk/scrapy/contrib/webconsole/livestats.py b/scrapy/trunk/scrapy/contrib/webconsole/livestats.py index cf38e24a0..3518065c3 100644 --- a/scrapy/trunk/scrapy/contrib/webconsole/livestats.py +++ b/scrapy/trunk/scrapy/contrib/webconsole/livestats.py @@ -5,7 +5,7 @@ from datetime import datetime from pydispatch import dispatcher from scrapy.core import signals from scrapy.core.engine import scrapyengine -from scrapy.management.web import banner +from scrapy.management.web import banner, webconsole_discover_module class SpiderStats(object): def __init__(self): @@ -25,24 +25,23 @@ class LiveStats(object): dispatcher.connect(self.item_scraped, signal=signals.item_scraped) dispatcher.connect(self.response_downloaded, signal=signals.response_downloaded) - from scrapy.management.web import webconsole_discover_module dispatcher.connect(self.webconsole_discover_module, signal=webconsole_discover_module) def domain_open(self, domain, spider): pstats = SpiderStats() self.domains[spider.domain_name] = pstats - pstats.started = datetime.now() + pstats.started = datetime.now().replace(microsecond=0) pstats.finished = None def domain_closed(self, domain, spider): - self.domains[spider.domain_name].finished = datetime.now() + self.domains[spider.domain_name].finished = datetime.now().replace(microsecond=0) def item_scraped(self, item, spider): self.domains[spider.domain_name].scraped += 1 def response_downloaded(self, response, spider): - #sometimes we download responses without opening/closing domains, - #for example from scrapy shell + # sometimes we download responses without opening/closing domains, + # for example from scrapy shell if self.domains.get(spider.domain_name): self.domains[spider.domain_name].crawled += 1 diff --git a/scrapy/trunk/scrapy/contrib/webconsole/schedstats.py b/scrapy/trunk/scrapy/contrib/webconsole/schedstats.py index 36a207bf3..a69c4baf0 100644 --- a/scrapy/trunk/scrapy/contrib/webconsole/schedstats.py +++ b/scrapy/trunk/scrapy/contrib/webconsole/schedstats.py @@ -1,20 +1,25 @@ """ Scheduler information module for Scrapy webconsole + +FIXME: this webconsole extension needs to be fixed after we removed +PriorityStack/Queue from the scheduler and replace them by bisect or something +like that. """ + from pydispatch import dispatcher -from scrapy.core import signals from scrapy.core.engine import scrapyengine -from scrapy.spider import spiders -from scrapy.management.web import banner +from scrapy.management.web import banner, webconsole_discover_module class SchedulerStats(object): webconsole_id = 'scheduler' webconsole_name = 'Scheduler queue' def __init__(self): - from scrapy.management.web import webconsole_discover_module dispatcher.connect(self.webconsole_discover_module, signal=webconsole_discover_module) + def webconsole_discover_module(self): + return self + def webconsole_render(self, wc_request): s = banner(self) s += "