mirror of https://github.com/scrapy/scrapy.git
renamed ItemField to Field for upcoming ItemExtractor and FieldExtractor
--HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40882
This commit is contained in:
parent
7fc8d590f3
commit
26bcc826e3
|
|
@ -3,15 +3,15 @@ import decimal
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['BooleanItemField', 'DateItemField', 'DecimalItemField',
|
__all__ = ['BooleanField', 'DateField', 'DecimalField',
|
||||||
'FloatItemField', 'IntegerItemField', 'StringItemField']
|
'FloatField', 'IntegerField', 'StringField']
|
||||||
|
|
||||||
|
|
||||||
class ItemFieldValueError(Exception):
|
class FieldValueError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ItemField(object):
|
class Field(object):
|
||||||
def __init__(self, required=False, default=None):
|
def __init__(self, required=False, default=None):
|
||||||
self.required = required
|
self.required = required
|
||||||
self.default = default or self.to_python(None)
|
self.default = default or self.to_python(None)
|
||||||
|
|
@ -34,18 +34,18 @@ class ItemField(object):
|
||||||
return ' '.join(value)
|
return ' '.join(value)
|
||||||
|
|
||||||
|
|
||||||
class BooleanItemField(ItemField):
|
class BooleanField(Field):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value in (True, False): return value
|
if value in (True, False): return value
|
||||||
if value in ('t', 'True', '1'): return True
|
if value in ('t', 'True', '1'): return True
|
||||||
if value in ('f', 'False', '0'): return False
|
if value in ('f', 'False', '0'): return False
|
||||||
raise ItemFieldValueError("This value must be either True or False.")
|
raise FieldValueError("This value must be either True or False.")
|
||||||
|
|
||||||
|
|
||||||
ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$')
|
ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$')
|
||||||
|
|
||||||
|
|
||||||
class DateItemField(ItemField):
|
class DateField(Field):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
|
|
@ -55,51 +55,51 @@ class DateItemField(ItemField):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
if not ansi_date_re.search(value):
|
if not ansi_date_re.search(value):
|
||||||
raise ItemFieldValueError(
|
raise FieldValueError(
|
||||||
"Enter a valid date in YYYY-MM-DD format.")
|
"Enter a valid date in YYYY-MM-DD format.")
|
||||||
|
|
||||||
year, month, day = map(int, value.split('-'))
|
year, month, day = map(int, value.split('-'))
|
||||||
try:
|
try:
|
||||||
return datetime.date(year, month, day)
|
return datetime.date(year, month, day)
|
||||||
except ValueError, e:
|
except ValueError, e:
|
||||||
raise ItemFieldValueError("Invalid date: %s" % str(e))
|
raise FieldValueError("Invalid date: %s" % str(e))
|
||||||
|
|
||||||
|
|
||||||
class DecimalItemField(ItemField):
|
class DecimalField(Field):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
try:
|
try:
|
||||||
return decimal.Decimal(value)
|
return decimal.Decimal(value)
|
||||||
except decimal.InvalidOperation:
|
except decimal.InvalidOperation:
|
||||||
raise ItemFieldValueError("This value must be a decimal number.")
|
raise FieldValueError("This value must be a decimal number.")
|
||||||
|
|
||||||
|
|
||||||
class FloatItemField(ItemField):
|
class FloatField(Field):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
try:
|
try:
|
||||||
return float(value)
|
return float(value)
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
raise ItemFieldValueError("This value must be a float.")
|
raise FieldValueError("This value must be a float.")
|
||||||
|
|
||||||
|
|
||||||
class IntegerItemField(ItemField):
|
class IntegerField(Field):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
try:
|
try:
|
||||||
return int(value)
|
return int(value)
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
raise ItemFieldValueError("This value must be an integer.")
|
raise FieldValueError("This value must be an integer.")
|
||||||
|
|
||||||
|
|
||||||
class StringItemField(ItemField):
|
class StringField(Field):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
if isinstance(value, basestring):
|
if isinstance(value, basestring):
|
||||||
return value
|
return value
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
raise ItemFieldValueError("This field must be a string.")
|
raise FieldValueError("This field must be a string.")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from scrapy.contrib_exp.newitem.fields import ItemField
|
from scrapy.contrib_exp.newitem.fields import Field
|
||||||
|
|
||||||
|
|
||||||
class Item(object):
|
class Item(object):
|
||||||
|
|
@ -12,7 +12,7 @@ class Item(object):
|
||||||
|
|
||||||
def _get_fields(self):
|
def _get_fields(self):
|
||||||
return dict(i for i in self.__class__.__dict__.iteritems() \
|
return dict(i for i in self.__class__.__dict__.iteritems() \
|
||||||
if isinstance(i[1], ItemField))
|
if isinstance(i[1], Field))
|
||||||
|
|
||||||
def __setattr__(self, name, value):
|
def __setattr__(self, name, value):
|
||||||
if not name.startswith('_'):
|
if not name.startswith('_'):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue