diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py index e08999e3d..27bb2a9ea 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py @@ -18,8 +18,9 @@ def IDENTITY(v): class ItemAdaptorMeta(type): def __new__(meta, class_name, bases, attrs): - da = attrs.get('default_adaptor') or IDENTITY - attrs['default_adaptor'] = staticmethod(adaptize(da)) + da = attrs.get('default_adaptor') + if da: + attrs['default_adaptor'] = staticmethod(adaptize(da)) cls = type.__new__(meta, class_name, bases, attrs) @@ -46,6 +47,7 @@ class ItemAdaptor(object): item_class = None field_adaptors = {} + default_adaptor = IDENTITY def __init__(self, response=None, item=None): self.item_instance = item if item else self.item_class() diff --git a/scrapy/trunk/scrapy/tests/test_itemadaptor.py b/scrapy/trunk/scrapy/tests/test_itemadaptor.py index 546547d2c..a72b899f7 100644 --- a/scrapy/trunk/scrapy/tests/test_itemadaptor.py +++ b/scrapy/trunk/scrapy/tests/test_itemadaptor.py @@ -24,6 +24,9 @@ class TestAdaptor(BaseAdaptor): class DefaultedAdaptor(BaseAdaptor): default_adaptor = lambda v: v.title() +class InheritDefaultAdaptor(DefaultedAdaptor): + pass + class ItemAdaptorTest(unittest.TestCase): @@ -39,6 +42,11 @@ class ItemAdaptorTest(unittest.TestCase): dta.name = 'marta' assert dta.name == 'Marta' + def test_inheritdefaultadaptor(self): + ida = InheritDefaultAdaptor() + ida.name = 'marta' + assert ida.name == 'Marta' + def test_inheritance(self): class ChildTestAdaptor(TestAdaptor): url = lambda v: v.lower()