Moved scrapy.extension.extensions singleton to a "extensions" attribute of the scrapy.project.crawler singleton. Refs #189

This commit is contained in:
Pablo Hoffman 2010-08-22 02:15:11 -03:00
parent 52c1e137e5
commit 9fccc11363
7 changed files with 23 additions and 22 deletions

View File

@ -71,7 +71,7 @@ Even though it's not usually needed, you can access extension objects through
the :ref:`topics-extensions-ref-manager` which is populated when extensions are
loaded. For example, to access the ``WebService`` extension::
from scrapy.extension import extensions
from scrapy.project import extensions
webservice_extension = extensions.enabled['WebService']
.. see also::
@ -128,7 +128,7 @@ how you :ref:`configure the downloader middlewares
The Extension Manager is a singleton object, which is instantiated at module
loading time and can be accessed like this::
from scrapy.extension import extensions
from scrapy.project import extensions
.. attribute:: loaded
@ -140,7 +140,7 @@ how you :ref:`configure the downloader middlewares
A dict with the enabled extensions. The keys are the extension class names,
and the values are the extension objects. Example::
>>> from scrapy.extension import extensions
>>> from scrapy.project import extensions
>>> extensions.load()
>>> print extensions.enabled
{'CoreStats': <scrapy.contrib.corestats.CoreStats object at 0x9e272ac>,
@ -153,7 +153,7 @@ how you :ref:`configure the downloader middlewares
and the values are the extension class paths (because objects are never
instantiated for disabled extensions). Example::
>>> from scrapy.extension import extensions
>>> from scrapy.project import extensions
>>> extensions.load()
>>> print extensions.disabled
{'MemoryDebugger': 'scrapy.contrib.memdebug.MemoryDebugger',

View File

@ -43,13 +43,13 @@ convenience:
+----------------+-------------------------------------------------------------------+
| Shortcut | Description |
+================+===================================================================+
| ``engine`` | the Scrapy engine object (``scrapy.core.engine.scrapyengine``) |
+----------------+-------------------------------------------------------------------+
| ``manager`` | the Project Crawler object (``scrapy.project.crawler``) |
+----------------+-------------------------------------------------------------------+
| ``extensions`` | the extensions object (``scrapy.extension.extensions``) |
| ``engine`` | the Scrapy engine object (``scrapy.project.crawler.engine``) |
+----------------+-------------------------------------------------------------------+
| ``stats`` | the Scrapy stats object (``scrapy.stats.stats``) |
| ``extensions`` | the Extension Manager (``scrapy.project.crawler.extensions``) |
+----------------+-------------------------------------------------------------------+
| ``stats`` | the Stats Collector (``scrapy.stats.stats``) |
+----------------+-------------------------------------------------------------------+
| ``settings`` | the Scrapy settings object (``scrapy.conf.settings``) |
+----------------+-------------------------------------------------------------------+

View File

@ -1,10 +1,12 @@
from scrapy.webservice import JsonRpcResource
from scrapy.extension import extensions
from scrapy.project import crawler
class ExtensionsResource(JsonRpcResource):
ws_name = 'extensions'
def __init__(self, _extensions=extensions):
def __init__(self, _extensions=None):
if _extensions is None:
_extensions = crawler.extensions
JsonRpcResource.__init__(self)
self._target = _extensions

View File

@ -4,16 +4,16 @@ from twisted.internet import reactor, defer
from scrapy.core.engine import ExecutionEngine
from scrapy.core.queue import ExecutionQueue
from scrapy.extension import extensions
from scrapy import log
from scrapy.utils.ossignal import install_shutdown_handlers, signal_names
class Crawler(object):
def __init__(self, spiders):
def __init__(self, spiders, extensions):
self.configured = False
self.control_reactor = True
self.extensions = extensions
self.spiders = spiders
self.engine = ExecutionEngine(self)
@ -24,11 +24,11 @@ class Crawler(object):
if not log.started:
log.start()
if not extensions.loaded:
extensions.load()
if not self.extensions.loaded:
self.extensions.load()
if not self.spiders.loaded:
self.spiders.load()
log.msg("Enabled extensions: %s" % ", ".join(extensions.enabled.iterkeys()),
log.msg("Enabled extensions: %s" % ", ".join(self.extensions.enabled.iterkeys()),
level=log.DEBUG)
self.queue = queue or ExecutionQueue()

View File

@ -38,5 +38,3 @@ class ExtensionManager(object):
def reload(self):
self.load()
extensions = ExtensionManager()

View File

@ -1,6 +1,8 @@
from scrapy.conf import settings
from scrapy.utils.misc import load_object
from scrapy.crawler import Crawler
from scrapy.extension import ExtensionManager
from scrapy.utils.misc import load_object
from scrapy.conf import settings
_spiders = load_object(settings['SPIDER_MANAGER_CLASS'])()
crawler = Crawler(_spiders)
_extensions = ExtensionManager()
crawler = Crawler(_spiders, _extensions)

View File

@ -10,7 +10,6 @@ from twisted.conch import manhole, telnet
from twisted.conch.insults import insults
from twisted.internet import reactor, protocol
from scrapy.extension import extensions
from scrapy.exceptions import NotConfigured
from scrapy.project import crawler
from scrapy.stats import stats
@ -49,7 +48,7 @@ class TelnetConsole(protocol.ServerFactory):
telnet_vars = {
'engine': crawler.engine,
'manager': crawler,
'extensions': extensions,
'extensions': crawler.extensions,
'stats': stats,
'spiders': crawler.spiders,
'settings': settings,