using declarative in ItemAdaptor, more to come

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40965
This commit is contained in:
Ismael Carnales 2009-03-03 21:29:00 +00:00
parent e744e87517
commit 154dded1de
1 changed files with 7 additions and 10 deletions

View File

@ -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()