diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py index 7032254ce..874a8fd28 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/adaptors.py @@ -21,7 +21,7 @@ class ItemAdaptor(Declarative): def _get_field_adaptors(self): fa = {} - for field in self.item_instance._fields.keys(): + for field in self.item_instance.fields.keys(): try: fa[field] = object.__getattribute__(self, field) except: diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py index b102526aa..d1b6c71ad 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py @@ -17,28 +17,24 @@ class Item(Declarative, ScrapedItem): def __init__(self): self._values = {} - @property - def _fields(self): - return self.__class__.fields - def __setattr__(self, name, value): if name.startswith('_'): return object.__setattr__(self, name, value) - if name in self._fields.keys(): - self._values[name] = self._fields[name].assign(value) + if name in self.fields.keys(): + self._values[name] = self.fields[name].assign(value) else: raise AttributeError(name) def __getattribute__(self, name): - if name.startswith('_'): + if name.startswith('_') or name == 'fields': return object.__getattribute__(self, name) - if name in self._fields.keys(): + if name in self.fields.keys(): try: return self._values[name] except KeyError: - return self._fields[name].default + return self.fields[name].default else: raise AttributeError(name) @@ -47,5 +43,5 @@ class Item(Declarative, ScrapedItem): Generate the following format so that items can be deserialized easily: ClassName({'attrib': value, ...}) """ - reprdict = dict((field, getattr(self, field)) for field in self._fields) + reprdict = dict((field, getattr(self, field)) for field in self.fields) return "%s(%s)" % (self.__class__.__name__, repr(reprdict))