diff --git a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py index 045a5aede..9f75846d9 100644 --- a/scrapy/trunk/scrapy/contrib_exp/newitem/models.py +++ b/scrapy/trunk/scrapy/contrib_exp/newitem/models.py @@ -11,14 +11,16 @@ class Item(object): self._fields = self._get_fields() def _get_fields(self): - return dict(i for i in self.__class__.__dict__.iteritems() if - isinstance(i[1], ItemField)) + return dict(i for i in self.__class__.__dict__.iteritems() \ + if isinstance(i[1], ItemField)) def __setattr__(self, name, value): - if not name.startswith('_') and name in self._fields.keys(): - self._values[name] = self._fields[name].to_python(value) + if not name.startswith('_'): + if name in self._fields.keys(): + self._values[name] = self._fields[name].to_python(value) + else: + raise AttributeError(name) else: - # for now setting values that are not fields is permitted object.__setattr__(self, name, value) def __getattribute__(self, name): @@ -26,10 +28,7 @@ class Item(object): try: return self._values[name] except KeyError: - # what to to in this case? - # maybe return a default value: - # return self._fields[name].default_value() - return None + return self._fields[name].default_value() else: return object.__getattribute__(self, name)