From 154dded1de6c0a1224e402315b618415bef88f16 Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Tue, 3 Mar 2009 21:29:00 +0000 Subject: [PATCH] using declarative in ItemAdaptor, more to come --HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40965 --- .../scrapy/contrib_exp/newitem/adaptors.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py index a1c70cff8..7032254ce 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py @@ -1,20 +1,17 @@ +from scrapy.contrib_exp.newitem.declarative import Declarative from scrapy.utils.python import get_func_args def is_adaptor(func): return callable(func) and 'adaptor_args' in get_func_args(func) -class ItemAdaptorMetaClass(type): - def __new__(meta, name, bases, dct): - # defines adaptor fields as static methods - for key, func in dct.items(): - if not key.startswith('_') and is_adaptor(func): - dct[key] = staticmethod(func) - return type.__new__(meta, name, bases, dct) +class ItemAdaptor(Declarative): - -class ItemAdaptor(object): - __metaclass__ = ItemAdaptorMetaClass + def __classinit__(cls, attrs): + # defines adaptors as staticmethods + for n, v in attrs.items(): + if is_adaptor(v): + setattr(cls, n, staticmethod(v)) def __init__(self, response=None, item=None): self.item_instance = item if item else self.item_class()