From 1017f12163410205b954c974a8db26fe560d43e8 Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Thu, 19 Feb 2009 11:40:21 +0000 Subject: [PATCH] don't allow setting attributes that aren't fields, and return field default values on newitem --HG-- extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40875 --- .../trunk/scrapy/contrib_exp/newitem/models.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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)