make field_adaptors non-public

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40985
This commit is contained in:
Ismael Carnales 2009-03-11 13:26:29 +00:00
parent 2ba017b14d
commit 518a7c87dd
2 changed files with 12 additions and 11 deletions

View File

@ -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)

View File

@ -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')