Skip to content

Instantly share code, notes, and snippets.

@artemdevel
Created February 20, 2013 16:10
Show Gist options
  • Save artemdevel/4996685 to your computer and use it in GitHub Desktop.
Save artemdevel/4996685 to your computer and use it in GitHub Desktop.
SignalManager tests
from scrapy import signals
from scrapy.http import Request
from scrapy.spider import BaseSpider
from scrapy.signalmanager import SignalManager
class Test5(BaseSpider):
""" New SignalManager API test, doesn't work
"""
name = "test5"
start_urls = ["http://httpbin.org/status/200"]
def __init__(self, *args, **kwargs):
super(Test5, self).__init__(*args, **kwargs)
sm = SignalManager(self)
""" I also tried to iniatialize SignalManager this way:
sm = SignalManager() so dispatcher.Anonymous should be used
as a sender, but this didn't help either.
"""
sm.connect(self.idle_handler, signal=signals.spider_idle)
def parse(self, response):
self.log("Parse")
def idle_handler(self, spider):
self.log("Idle handler")
from scrapy import signals
from scrapy.http import Request
from scrapy.spider import BaseSpider
from scrapy.xlib.pydispatch import dispatcher
class Test5_1(BaseSpider):
""" Old approach for signals in Scrapy
"""
name = "test5_1"
start_urls = ["http://httpbin.org/status/200"]
def __init__(self, *args, **kwargs):
super(Test5_1, self).__init__(*args, **kwargs)
dispatcher.connect(self.idle_handler, signal=signals.spider_idle)
def parse(self, response):
self.log("Parse")
def idle_handler(self, spider):
self.log("Idle handler")
from scrapy import signals
from scrapy.http import Request
from scrapy.spider import BaseSpider
from scrapy.xlib.pydispatch import dispatcher
from scrapy.signalmanager import SignalManager
class Test5_2(BaseSpider):
""" Worked example for new SignalManager API
"""
name = "test5_2"
start_urls = ["http://httpbin.org/status/200"]
def __init__(self, *args, **kwargs):
super(Test5_2, self).__init__(*args, **kwargs)
SignalManager(dispatcher.Any).connect(self.idle_handler, signal=signals.spider_idle)
def parse(self, response):
self.log("Parse")
def idle_handler(self, spider):
self.log("Idle handler")
@macedd
Copy link

macedd commented Aug 28, 2013

Thanks for this. The documentation (and the web) doesnt help to use signals - you did it!

@eos87
Copy link

eos87 commented Feb 25, 2014

Thank you! Signals connect sucks on the website indeed!

@mayouf
Copy link

mayouf commented May 5, 2015

thanks, you saved my day !! nothing in the web, I confirm ! thanks again mate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment