added default_adaptor to ItemAdaptor

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40947
This commit is contained in:
Ismael Carnales 2009-03-01 14:26:11 +00:00
parent f145e850ad
commit 16c20f5c4c
2 changed files with 23 additions and 2 deletions

View File

@ -20,6 +20,7 @@ class ItemAdaptor(object):
self.item_instance = item if item else self.item_class()
self._response = response
self._field_adaptors = self._get_field_adaptors()
self._default_adaptor = self._get_default_adaptor()
def _get_field_adaptors(self):
fa = {}
@ -31,14 +32,24 @@ class ItemAdaptor(object):
return fa
def _get_default_adaptor(self):
try:
return object.__getattribute__(self, 'default_adaptor')
except:
return None
def __setattr__(self, name, value):
if name.startswith('_') or name == 'item_instance':
if name.startswith('_') or name == 'item_instance' \
or name == 'default_adaptor':
return object.__setattr__(self, name, value)
try:
fa = self._field_adaptors[name]
except KeyError:
return setattr(self.item_instance, name, value)
if self._default_adaptor:
fa = self._default_adaptor
else:
return setattr(self.item_instance, name, value)
adaptor_args = {'response': self._response}
ovalue = fa(value, adaptor_args=adaptor_args)

View File

@ -23,6 +23,16 @@ class ItemAdaptorTest(unittest.TestCase):
self.assertEqual(ia.item_instance.name, 'Marta')
self.assertEqual(ia.name, 'Marta')
def test_defaultadaptor(self):
class DefaultedTestAdaptor(ItemAdaptor):
item_class = TestItem
default_adaptor = lambda v, adaptor_args: v.title()
dta = DefaultedTestAdaptor()
assert dta._default_adaptor
dta.name = 'marta'
assert dta.name == 'Marta'
def test_inheritance(self):
class ChildTestAdaptor(TestAdaptor):
url = lambda v, adaptor_args: v.lower()