I use scrapy for a project with item pipeline specifically designed for items fields need to be inserted into database. I'm employing a python decorator method for this to work. For some reason I can't get my head wrapped around this issue, I get particular nameError which I am not sure where are they coming from. Note: this method people have confirmed was working perfectly fine.
This is the code I have in my spider.py file:
from scrapy.spider import Spider
from scrapy.http import Request,FormRequest
from exampleScraper.items import exampleItem
import urllib, time, MySQLdb, sys
today = time.strftime("%x %X")
class idoxpaSpider(Spider):
pipeline = set(['insert'])
name = 'idoxpaSpider'
start_urls = ["http://www.example.com"]
###
def parse(self, response):
# some scrapy work
return item
###
class insert(object):
def __init__(self):
self.conn = MySQLdb.connect(<some parameters>)
self.cursor = self.conn.cursor()
@check_spider_pipeline
def process_item(self, item, spider):
return item
and this is what I have in my pipeline file:
import sys
class BoroughscrperPipeline(object):
def process_item(self, item, spider):
def check_spider_pipeline(process_item_method):
@functools.wraps(process_item_method)
def wrapper(self, item, spider):
# message template for debugging
msg = '%%s %s pipeline step' % (self.__class__.__name__,)
# if class is in the spider pipeline then use use process_item normally
if self.__class__ in spider.pipeline:
spider.log(msg % 'executing', level=log.DEBUG)
return process_item_method(self, item, spider)
# otherwise return the untouched item
else:
spider.log(msg % 'skipping', level=log.DEBUG)
return item
return wrapper
and this is the acutal error I am getting:
File "/home/mn/workbench/boroughScrper/boroughScrper/spiders/westminsterSpider.py", line 40, in insert
@check_spider_pipeline
NameError: name 'check_spider_pipeline' is not defined
Any idea where is this going wrong?