diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py index d3ac8d160..63ac7d8df 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py @@ -7,13 +7,18 @@ class ItemAdaptor(object): self.item_instance = item else: self.item_instance = self.item_class() - + self._response = response self._field_adaptors = self._get_field_adaptors() def _get_field_adaptors(self): fa = {} for field in self.item_instance._fields.keys(): + try: + fa[field] = object.__getattribute__(self, field) + except AttributeError: + pass + if self.__class__.__dict__.has_key(field): fa[field] = self.__class__.__dict__[field] return fa diff --git a/scrapy/trunk/scrapy/tests/test_itemadaptor.py b/scrapy/trunk/scrapy/tests/test_itemadaptor.py index 0c4fc611a..645e0517d 100644 --- a/scrapy/trunk/scrapy/tests/test_itemadaptor.py +++ b/scrapy/trunk/scrapy/tests/test_itemadaptor.py @@ -1,6 +1,27 @@ import unittest from scrapy.contrib_exp.newitem.adaptors import adaptor, ItemAdaptor +from scrapy.contrib_exp.newitem import Item, StringField + + +class TestItem(Item): + name = StringField() + url = StringField() + + +class ItemAdaptorTest(unittest.TestCase): + + def test_inheritance(self): + class TestAdaptor(ItemAdaptor): + item_class = TestItem + name = lambda v, adaptor_args: v.title() + + class ChildTestAdaptor(TestAdaptor): + url = lambda v, adaptor_args: v.lower() + + ia = ChildTestAdaptor() + assert 'url' in ia._field_adaptors + assert 'name' in ia._field_adaptors class TreeadaptTest(unittest.TestCase):