1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-02-25 20:04:28 +00:00

moved item.fields to item._fields in newitem

This commit is contained in:
Ismael Carnales 2009-07-16 13:00:25 -03:00
parent 92b746d866
commit cc33ac4f86
2 changed files with 14 additions and 10 deletions

View File

@ -1,4 +1,3 @@
from scrapy.utils.misc import arg_to_iter
from scrapy.utils.python import get_func_args
@ -28,7 +27,7 @@ class ItemAdaptorMeta(type):
cls._field_adaptors = cls._field_adaptors.copy()
if cls.item_class:
for item_field in cls.item_class.fields.keys():
for item_field in cls.item_class.get_fields():
if item_field in attrs:
adaptor = adaptize(attrs[item_field])
cls._field_adaptors[item_field] = adaptor
@ -36,7 +35,7 @@ class ItemAdaptorMeta(type):
return cls
def __getattr__(cls, name):
if name in cls.item_class.fields:
if name in cls.item_class.get_fields():
return cls.default_adaptor
raise AttributeError(name)

View File

@ -6,10 +6,10 @@ class _ItemMeta(type):
def __new__(meta, class_name, bases, attrs):
cls = type.__new__(meta, class_name, bases, attrs)
cls.fields = cls.fields.copy()
cls._fields = cls._fields.copy()
for n, v in attrs.iteritems():
if isinstance(v, BaseField):
cls.fields[n] = v
cls._fields[n] = v
delattr(cls, n)
return cls
@ -19,7 +19,7 @@ class Item(ScrapedItem):
__metaclass__ = _ItemMeta
fields = {}
_fields = {}
def __init__(self, values=None):
self._values = {}
@ -34,8 +34,8 @@ class Item(ScrapedItem):
if name.startswith('_'):
return ScrapedItem.__setattr__(self, name, value)
if name in self.fields.keys():
self._values[name] = self.fields[name].to_python(value)
if name in self._fields:
self._values[name] = self._fields[name].to_python(value)
else:
raise AttributeError(name)
@ -44,7 +44,7 @@ class Item(ScrapedItem):
return self._values[name]
except KeyError:
try:
return self.fields[name].get_default()
return self._fields[name].get_default()
except KeyError:
raise AttributeError(name)
@ -52,6 +52,11 @@ class Item(ScrapedItem):
"""Generate a representation of this item that can be used to
reconstruct the item by evaluating it
"""
values = dict((field, getattr(self, field)) for field in self.fields)
values = dict((field, getattr(self, field)) for field in self._fields)
return "%s(%s)" % (self.__class__.__name__, repr(values))
@classmethod
def get_fields(cls):
"""Returns the item fields"""
return cls._fields