New implementation of Field and MultiValuedField

This commit is contained in:
Ismael Carnales 2009-05-21 14:55:14 +00:00
parent 0cc289ac84
commit d5f0cae776
2 changed files with 13 additions and 11 deletions

View File

@ -11,16 +11,13 @@ class FieldValueError(Exception):
pass
class Field(object):
class BaseField(object):
def __init__(self, required=False, default=None):
self.required = required
self.default = default or self.to_python(None)
def assign(self, value):
if hasattr(value, '__iter__'):
return self.to_python(self.deiter(value))
else:
return self.to_python(value)
return self.to_python(value)
def to_python(self, value):
"""
@ -29,12 +26,20 @@ class Field(object):
"""
return value
class Field(BaseField):
def assign(self, value):
if hasattr(value, '__iter__'):
return self.to_python(self.deiter(value))
else:
return self.to_python(value)
def deiter(self, value):
"Converts the input iterable into a single value."
return ' '.join(value)
class MultiValuedField(Field):
class MultiValuedField(BaseField):
def __init__(self, field_type, required=False, default=None):
self._field = field_type()
super(MultiValuedField, self).__init__(required, default)
@ -45,9 +50,6 @@ class MultiValuedField(Field):
else:
return [self._field.to_python(v) for v in value]
def deiter(self, value):
return value
class BooleanField(Field):
def to_python(self, value):

View File

@ -1,5 +1,5 @@
from scrapy.item import ScrapedItem
from scrapy.contrib_exp.newitem.fields import Field
from scrapy.contrib_exp.newitem.fields import BaseField
class ItemMeta(type):
@ -8,7 +8,7 @@ class ItemMeta(type):
cls = type.__new__(meta, class_name, bases, attrs)
cls.fields = cls.fields.copy()
for n, v in attrs.items():
if isinstance(v, Field):
if isinstance(v, BaseField):
cls.fields[n] = v
return cls