mirror of https://github.com/scrapy/scrapy.git
better handling of default value in newitem
This commit is contained in:
parent
47d937f36b
commit
72457c3e4e
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue