better handling of default value in newitem

This commit is contained in:
Ismael Carnales 2009-07-13 17:03:38 -03:00
parent 47d937f36b
commit 72457c3e4e
3 changed files with 15 additions and 3 deletions

View File

@ -6,7 +6,7 @@ import time
class BaseField(object):
def __init__(self, default=None):
self.default = default or self.to_python(None)
self._default = self.to_python(default) if default is not None else None
def to_python(self, value):
"""
@ -15,6 +15,10 @@ class BaseField(object):
"""
return value
def get_default(self):
"""Returns the default value for the field."""
return self._default
class MultiValuedField(BaseField):
def __init__(self, field_type, default=None):

View File

@ -44,7 +44,7 @@ class Item(ScrapedItem):
return self._values[name]
except KeyError:
try:
return self.fields[name].default
return self.fields[name].get_default()
except KeyError:
raise AttributeError(name)
@ -54,3 +54,4 @@ class Item(ScrapedItem):
"""
values = dict((field, getattr(self, field)) for field in self.fields)
return "%s(%s)" % (self.__class__.__name__, repr(values))

View File

@ -63,6 +63,13 @@ class NewItemTest(unittest.TestCase):
i = TestItem()
assert i.name == u'John'
def test_wrong_default(self):
def set_wrong_default():
class TestItem(Item):
name = fields.TextField(default=3)
self.assertRaises(ValueError, set_wrong_default)
def test_to_python_iter(self):
class TestItem(Item):
name = fields.TextField()
@ -117,7 +124,7 @@ class NewItemFieldsTest(unittest.TestCase):
def test_base_field(self):
f = fields.BaseField()
assert f.default == None
assert f.get_default() is None
assert f.to_python(1) == 1
def test_boolean_field(self):