diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py index 652179e99..42873e6ad 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py @@ -23,13 +23,13 @@ class ItemAdaptorMeta(type): cls = type.__new__(meta, class_name, bases, attrs) - cls.field_adaptors = cls.field_adaptors.copy() + cls._field_adaptors = cls._field_adaptors.copy() if cls.item_class: for item_field in cls.item_class.fields.keys(): if item_field in attrs: adaptor = adaptize(attrs[item_field]) - cls.field_adaptors[item_field] = adaptor + cls._field_adaptors[item_field] = adaptor setattr(cls, item_field, staticmethod(adaptor)) return cls @@ -45,20 +45,21 @@ class ItemAdaptor(object): __metaclass__ = ItemAdaptorMeta item_class = None - field_adaptors = {} default_adaptor = IDENTITY + _field_adaptors = {} + def __init__(self, response=None, item=None): self.item_instance = item if item else self.item_class() self._response = response def __setattr__(self, name, value): if (name.startswith('_') or name == 'item_instance' \ - or name == 'default_adaptor' or name == 'field_adaptors'): + or name == 'default_adaptor'): return object.__setattr__(self, name, value) try: - fa = self.field_adaptors[name] + fa = self._field_adaptors[name] except KeyError: fa = self.default_adaptor @@ -68,7 +69,7 @@ class ItemAdaptor(object): def __getattribute__(self, name): if (name.startswith('_') or name.startswith('item_') \ - or name == 'default_adaptor' or name == 'field_adaptors'): + or name == 'default_adaptor'): return object.__getattribute__(self, name) return getattr(self.item_instance, name) diff --git a/scrapy/trunk/scrapy/tests/test_itemadaptor.py b/scrapy/trunk/scrapy/tests/test_itemadaptor.py index df858adb6..654057cbd 100644 --- a/scrapy/trunk/scrapy/tests/test_itemadaptor.py +++ b/scrapy/trunk/scrapy/tests/test_itemadaptor.py @@ -63,8 +63,8 @@ class ItemAdaptorTest(unittest.TestCase): url = lambda v: v.lower() ia = ChildTestAdaptor() - assert 'url' in ia.field_adaptors - assert 'name' in ia.field_adaptors + assert 'url' in ia._field_adaptors + assert 'name' in ia._field_adaptors ia.url = 'HTTP://scrapy.ORG' self.assertEqual(ia.url, 'http://scrapy.org') @@ -77,9 +77,9 @@ class ItemAdaptorTest(unittest.TestCase): summary = lambda v: v ia = ChildChildTestAdaptor() - assert 'url' in ia.field_adaptors - assert 'name' in ia.field_adaptors - assert 'summary' in ia.field_adaptors + 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')