From eb3a1dc16cf8f61e7395db1a1f605699d50857e4 Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Wed, 22 Jul 2009 15:13:33 -0300 Subject: [PATCH] return default values for newitem in __getitem__ --- scrapy/contrib_exp/newitem/models.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/scrapy/contrib_exp/newitem/models.py b/scrapy/contrib_exp/newitem/models.py index 73b92542b..bca1b4381 100644 --- a/scrapy/contrib_exp/newitem/models.py +++ b/scrapy/contrib_exp/newitem/models.py @@ -29,20 +29,20 @@ class Item(DictMixin, BaseItem): def __init__(self, *args, **kwargs): self._values = {} - - # load default values - for name, field in self.fields.iteritems(): - default = field.get_default() - if default: - self._values[name] = default - - # load init values + if args or kwargs: # don't instantiate dict for simple (most common) case for k, v in dict(*args, **kwargs).iteritems(): self[k] = v def __getitem__(self, key): - return self._values[key] + try: + return self._values[key] + except KeyError: + default = self.fields[key].get_default() + if default is not None: + return default + else: + raise KeyError(key) def __setitem__(self, key, value): self._values[key] = self.fields[key].to_python(value)