From 5522afca8db97115f7c0fe12496a51db0d626ef1 Mon Sep 17 00:00:00 2001 From: Daniel Grana Date: Wed, 18 Aug 2010 13:05:50 -0300 Subject: [PATCH] pipeline process_item methods decorated with inlineCallbacks fails because of backwards compatible change to support inverted arguments --- scrapy/contrib/pipeline/__init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/scrapy/contrib/pipeline/__init__.py b/scrapy/contrib/pipeline/__init__.py index 947112a06..2e6cc8626 100644 --- a/scrapy/contrib/pipeline/__init__.py +++ b/scrapy/contrib/pipeline/__init__.py @@ -6,6 +6,7 @@ See documentation in docs/item-pipeline.rst from scrapy import log from scrapy.middleware import MiddlewareManager +from scrapy.utils.python import get_func_args class ItemPipelineManager(MiddlewareManager): @@ -23,14 +24,14 @@ class ItemPipelineManager(MiddlewareManager): def _add_middleware(self, pipe): super(ItemPipelineManager, self)._add_middleware(pipe) - if hasattr(pipe, 'process_item'): + func = getattr(pipe, 'process_item', None) + if func: # FIXME: remove in Scrapy 0.11 - from scrapy.utils.python import get_func_args - if get_func_args(pipe.process_item.im_func)[1] == 'spider': + fargs = get_func_args(func.im_func) + if fargs and fargs[1] == 'spider': log.msg("Update %s.process_item() method to receive (item, spider) instead of (spider, item) or they will stop working on Scrapy 0.11" % pipe.__class__.__name__, log.WARNING) - pipe.process_item = self._wrap_old_process_item(pipe.process_item) - - self.methods['process_item'].append(pipe.process_item) + func = self._wrap_old_process_item(func) + self.methods['process_item'].append(func) def process_item(self, item, spider): return self._process_chain('process_item', item, spider)