mirror of https://github.com/scrapy/scrapy.git
newitem: support multiple depth inheritance of ItemAdaptor
--HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40929
This commit is contained in:
parent
03db659040
commit
fdaa2ec3ff
|
|
@ -15,14 +15,16 @@ class ItemAdaptor(object):
|
|||
def _get_field_adaptors(self):
|
||||
def get_field_adaptor(field, cls):
|
||||
if field in cls.__dict__:
|
||||
fa[field] = cls.__dict__[field]
|
||||
return cls.__dict__[field]
|
||||
else:
|
||||
for class_ in cls.__bases__:
|
||||
return get_field_adaptor(field, class_)
|
||||
|
||||
fa = {}
|
||||
for field in self.item_instance._fields.keys():
|
||||
for base in self.__class__.__bases__:
|
||||
get_field_adaptor(field, base)
|
||||
|
||||
get_field_adaptor(field, self.__class__)
|
||||
adaptor = get_field_adaptor(field, self.__class__)
|
||||
if adaptor:
|
||||
fa[field] = adaptor
|
||||
|
||||
return fa
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ from scrapy.contrib_exp.newitem import Item, StringField
|
|||
class TestItem(Item):
|
||||
name = StringField()
|
||||
url = StringField()
|
||||
summary = StringField()
|
||||
|
||||
class TestAdaptor(ItemAdaptor):
|
||||
item_class = TestItem
|
||||
|
|
@ -30,6 +31,15 @@ class ItemAdaptorTest(unittest.TestCase):
|
|||
assert 'name' in ia._field_adaptors
|
||||
|
||||
|
||||
class ChildChildTestAdaptor(ChildTestAdaptor):
|
||||
summary = lambda v, adaptor_args: v
|
||||
|
||||
ia = ChildChildTestAdaptor()
|
||||
assert 'url' in ia._field_adaptors
|
||||
assert 'name' in ia._field_adaptors
|
||||
assert 'summary' in ia._field_adaptors
|
||||
|
||||
|
||||
ia.url = 'HTTP://scrapy.ORG'
|
||||
self.assertEqual(ia.url, 'http://scrapy.org')
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue