1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-02-26 16:44:22 +00:00

newitem: fix itemadaptor inheritance

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40924
This commit is contained in:
Daniel Grana 2009-02-25 06:52:06 +00:00
parent 1fa5c7bade
commit cf3afb9490
2 changed files with 27 additions and 1 deletions

View File

@ -14,6 +14,11 @@ class ItemAdaptor(object):
def _get_field_adaptors(self): def _get_field_adaptors(self):
fa = {} fa = {}
for field in self.item_instance._fields.keys(): 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): if self.__class__.__dict__.has_key(field):
fa[field] = self.__class__.__dict__[field] fa[field] = self.__class__.__dict__[field]
return fa return fa

View File

@ -1,6 +1,27 @@
import unittest import unittest
from scrapy.contrib_exp.newitem.adaptors import adaptor, ItemAdaptor 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): class TreeadaptTest(unittest.TestCase):