mirror of https://github.com/scrapy/scrapy.git
using declarative in ItemAdaptor, more to come
--HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40965
This commit is contained in:
parent
e744e87517
commit
154dded1de
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue